from physics.CollisionDirection import CollisionDirection from physics.TickData import TickData from sprite.DynamicSprite import DynamicSprite from sprite.Spritesheet import Spritesheet from ui_elements.KeyManager import KeyManager from ui_elements.TextLabel import TextLabel class PlayerSprite(DynamicSprite): def __init__(self, spritesheet: Spritesheet): super().__init__(spritesheet) self.cheat_fly = False self.jump_time = -1 self.allowed_jump_time = 12 self.acceleration_horizontal = 2 self.deceleration_horizontal_air = 0.02 self.deceleration_horizontal_ground = 0.3 self.gravity = 9.81 / 10 self.max_motion_horizontal_via_input = 5 def tick(self, tick_data: TickData): super().tick(tick_data) if tick_data.key_manager.is_keymap_down(KeyManager.KEY_RIGHT): if self.motion[0] < self.max_motion_horizontal_via_input: self.motion = (self.motion[0] + self.acceleration_horizontal, self.motion[1]) if tick_data.key_manager.is_keymap_down(KeyManager.KEY_LEFT): if self.motion[0] > -self.max_motion_horizontal_via_input: self.motion = (self.motion[0] - self.acceleration_horizontal, self.motion[1]) if not self.cheat_fly: if tick_data.key_manager.is_keymap_down(KeyManager.KEY_UP): if self.jump_time < 0 and self.get_collides_with_direction(CollisionDirection.BOTTOM): self.jump_time = self.allowed_jump_time self.motion = (self.motion[0], self.motion[1] - 7) if self.jump_time >= 0: self.motion = (self.motion[0], self.motion[1] - 0.5) if self.jump_time >= 0: self.jump_time -= 1 else: if tick_data.key_manager.is_keymap_down(KeyManager.KEY_UP): self.motion = (self.motion[0], self.motion[1] - 2) if tick_data.key_manager.is_keymap_down(KeyManager.KEY_DOWN): self.motion = (self.motion[0], self.motion[1] + 2)