Esempio n. 1
0
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)