class EntitySnapshot(net.Object): def __init__(self): self.pos = Vec3() self.quat = Quat() self.time = 0 self.empty = True def takeSnapshot(self, entity): self.pos = entity.getPosition() self.quat = Quat(entity.getQuaternion()) self.time = engine.clock.time self.empty = False def addTo(self, datagram): pos = HighResVec3(self.pos) quat = StandardQuat(self.quat) pos.addTo(datagram) quat.addTo(datagram) @staticmethod def getFrom(iterator): es = EntitySnapshot() es.pos = HighResVec3.getFrom(iterator) es.quat = StandardQuat.getFrom(iterator) es.time = engine.clock.time es.empty = False return es def commitTo(self, entity): entity.setQuaternion(self.quat) entity.setPosition(self.pos) def lerp(self, snapshot, scale): result = EntitySnapshot() result.pos = self.pos + ((snapshot.pos - self.pos) * scale) result.quat = self.quat + ((snapshot.quat - self.quat) * scale) result.empty = False return result def setFrom(self, snapshot): self.pos = Vec3(snapshot.pos) self.quat = Quat(snapshot.quat) self.time = engine.clock.time self.empty = snapshot.empty def almostEquals(self, snapshot): return self.quat.almostEqual(snapshot.quat, 2) and self.pos.almostEqual(snapshot.pos, 0.2)