def frame(self): while self.dataReady("position"): self.position = Vector(*self.recv("position")) if self.lastValidPos is None: self.lastValidPos = self.position.copy() while self.dataReady("inbox"): msg = self.recv("inbox") if msg == "ACK": self.lastValidPos = self.position.copy() elif msg == "INVALID": diff = self.lastValidPos - self.position diff.z = 0 self.send(diff.toTuple(), "movement")