from .Spherical import Spherical from .Quaternion import Quaternion ## A thing is the basic building block # ## A thing is the basic building block class Thing: class Type: Undetermined = 0x00 Switch = 0x01 DistanceSensor = 0x02 DirectionalSensor = 0x03 TemperatureSensor = 0x04 Animator = 0x40 Position = 0x01 Orientation = 0x02 LinearVelocity = 0x04 AngularVelocity = 0x08 def __init__(self, network_id = 0, thing_id = 0, type=Type.Undetermined, parent=None, name=None): self.network_id = network_id self.id = thing_id self.type = type if parent is None: self.parent_id = 0 else: self.parent_id = parent.id self.name = name self.model_url = None self.position = Spherical.zero self.orientation = Quaternion.identity self.linearVelocity = Spherical.zero self.angularVelocity = Spherical.zero self.pose_updated = 0x00 # the bits indicate which fields have been updated Thing.Add(self) def update(self, currentTime): pass def ProcessBinary(self, data): print('default binary processor') pass allThings = set({ None }) @staticmethod def Add(thing): thing.id = len(Thing.allThings) Thing.allThings.add(thing) @staticmethod def Get(network_id, thing_id): for thing in Thing.allThings: if thing is not None: if thing.network_id == network_id and thing.id == thing_id: return thing return None ## Update all things @staticmethod def UpdateAll(currentTime): for thing in list(Thing.allThings): if thing is not None: thing.update(currentTime)