def tick(self, time): if abs(self.angular_velocity) > 0.001: q = Quaternion.new_rotate_axis(abs(self.angular_velocity) * time, self.angular_velocity.normalized()) else: q = Quaternion() self.rotation *= q self.rotation = Quaternion.new_rotate_axis(*self.rotation.get_angle_axis()) self.position += self.velocity * time + (self.game.gravity * time ** 2) / 2 self.velocity += self.game.gravity * time self.check_ground(time)
def create_static_object(self, player_name, name, pos=None): # for debugging player = self.get_player(player_name) model = g3d.model.read(loader=self.loader, name=name).clone() obj = Object(self, model) obj.owner = player obj.position = pos or Vector3(120, 135 + self._static_num * 30, 210) obj.rotation = Quaternion.new_rotate_axis(0, Vector3(0, 0, 1)) model.root.scale = 10 self._static_num += 1 self.add_object(obj)
def get_rotation_quaternion(dir): angle = (dir - 0.5) / 2 * pi return Quaternion.new_rotate_axis(angle, Vector3(0, 0, 1))