def _parse_rotate(s): rotate = _float_list(s) if len(rotate) == 4: # around axis return Quaternion.new_rotate_axis(rotate[0] / 180. * math.pi, Vector3(*vector[1:])) else: x, y, z = [ i / 180. * math.pi for i in rotate ] return Quaternion.new_rotate_euler(y, z, x)
def tick(self, time): self.current_time += time fraction = self.current_time / self.total_time # part of animation done if fraction > 1: fraction = 1 current_rotation = Quaternion.new_interpolate(self.start_rotation, self.dest_rotation, fraction) self.object.rotation = current_rotation return fraction != 1 # continue animation iff it is not completed
def _compute_time(self): if self.req_time: return self.req_time else: angle = Quaternion.angle_between(self.start_rotation, self.dest_rotation) return angle / self.req_speed
def tick(self, elapsed): self.angle += self.angular_speed * elapsed self.camera.eye += Quaternion.new_rotate_axis(self.angle, Vector3(0, 0, 1)) * self.speed * elapsed self._update()
def _update(self): direction = Quaternion.new_rotate_axis(self.angle, Vector3(0, 0, 1)) * Vector3(1, 0, 0) self.camera.center = self.camera.eye + direction