46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
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.debug_label = TextLabel('', -1, -1)
|
|
|
|
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 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
|
|
|
|
self.debug_label.set_text(f'jump: {self.jump_time}, x: {round(self.motion[0], 2)}, y: {round(self.motion[1], 2)}, touches: {list(map(lambda x: x.to_string(), self.get_collides_with()))}')
|