示例#1
0
    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)
示例#2
0
 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)
示例#3
0
def get_rotation_quaternion(dir):
    angle = (dir - 0.5) / 2 * pi
    return Quaternion.new_rotate_axis(angle, Vector3(0, 0, 1))