diff --git a/project/data/levels/0-tutorial.csv b/project/data/levels/0-tutorial.csv index 2c30b16..71d0e78 100644 --- a/project/data/levels/0-tutorial.csv +++ b/project/data/levels/0-tutorial.csv @@ -10,7 +10,7 @@ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,C,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,M,,,C,,,,,,,,,,,,,,,,,,,,,,,,,,,,M,,,,,,,,,,,, ,,,,,,,,,,,,,,,,+,+,+,+,+,+,+,+,+,,,,,,,,,,,,,,,,,,,,,+,+,+,+,+,,,,,,,,,,, ,,,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,,,,,,,,#,#,#,#,#,+,+,+,+,,,,,,, ,,,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,,,,,,,+,+,+,+,+,+,+,,,,,,,,#,#,#,#,#,#,#,#,#,,,,,,, @@ -43,4 +43,4 @@ AQ,18,requires_xor=lever-1;button-1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, AU,32,requires_and=lever-1;button-1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, AJ,33,id=lever-1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Q,34,id=button-1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -F,23,size=7,,weight=0.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file +F,23,size=8,,weight=0.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/project/data/sprites/debug_1.png b/project/data/sprites/debug_1.png new file mode 100644 index 0000000..9d30781 Binary files /dev/null and b/project/data/sprites/debug_1.png differ diff --git a/project/data/sprites/sprites.json b/project/data/sprites/sprites.json index aab3a2b..b0b4f93 100644 --- a/project/data/sprites/sprites.json +++ b/project/data/sprites/sprites.json @@ -473,6 +473,19 @@ } ] }, + { + "id": "debug_1", + "subsheets": [ + { + "id": "1", + "delays": [ + 1 + ], + "width": 24, + "height": 24 + } + ] + }, { "id": "test_1", "subsheets": [ diff --git a/project/level/elements/LoadedLevel.py b/project/level/elements/LoadedLevel.py index 10109af..3d08e3a 100644 --- a/project/level/elements/LoadedLevel.py +++ b/project/level/elements/LoadedLevel.py @@ -1,6 +1,7 @@ from typing import Optional from level.Level import Level +from level.elements.dynamic.BouncingBallLevelElement import BouncingBallLevelElement from level.elements.dynamic.PushableBoxLevelElement import PushableBoxLevelElement from level.elements.static.ButtonInputLevelElement import ButtonInputLevelElement from level.elements.static.GateReceiverLevelElement import GateReceiverLevelElement @@ -27,6 +28,7 @@ TILES = { 'G': GateReceiverLevelElement, 'M': PushableBoxLevelElement, + 'q': BouncingBallLevelElement, } diff --git a/project/level/elements/dynamic/BouncingBallLevelElement.py b/project/level/elements/dynamic/BouncingBallLevelElement.py new file mode 100644 index 0000000..db5a3e0 --- /dev/null +++ b/project/level/elements/dynamic/BouncingBallLevelElement.py @@ -0,0 +1,17 @@ +from level.Level import Level +from level.elements.dynamic.PushableLevelElement import PushableLevelElement +from physics.SpriteManager import SpriteManager +from sprite.SpritesheetManager import SpritesheetManager + + +class BouncingBallLevelElement(PushableLevelElement): + def __init__(self, tile: dict, loaded_level): + super().__init__(tile, loaded_level) + + self.bounce_factor = -1 + + def load(self, sprite_manager: SpriteManager, spritesheet_manager: SpritesheetManager, level: Level): + self.spritesheet = spritesheet_manager.get_sheet('debug_1') + self.set_animation_state('1') + self.position_scale.position = self.tile['position'] + self.position_scale.scale = (0.5, 0.5) diff --git a/project/physics/PhysicsElementsHandler.py b/project/physics/PhysicsElementsHandler.py index 057911f..dc13ca1 100644 --- a/project/physics/PhysicsElementsHandler.py +++ b/project/physics/PhysicsElementsHandler.py @@ -109,7 +109,7 @@ class PhysicsElementsHandler: sprite.position_scale.position[1] ) - sprite.motion = (0, sprite.motion[1]) + sprite.motion = (sprite.motion[0] * sprite.bounce_factor, sprite.motion[1]) collides_with_last = collider collided[0] = True @@ -153,14 +153,15 @@ class PhysicsElementsHandler: sprite.position_scale.position[1] - motion_step[1] ) - sprite.motion = (sprite.motion[0], 0) + sprite.motion = (sprite.motion[0], sprite.motion[1] * sprite.bounce_factor) collides_with_last = collider collided[1] = True return collides_with_last - def check_collides(self, sprite: StaticSprite, colliders: list[StaticSprite], screen_transform: PositionScale) -> list[StaticSprite]: + def check_collides(self, sprite: StaticSprite, colliders: list[StaticSprite], screen_transform: PositionScale) -> \ + list[StaticSprite]: collides_with = [] for collider in colliders: @@ -171,7 +172,7 @@ class PhysicsElementsHandler: continue if sprite.collides_with(collider, TOLERANCE): collides_with.append(collider) - if len(collides_with) >= 2: + if len(collides_with) > 5: break return collides_with diff --git a/project/sprite/DynamicSprite.py b/project/sprite/DynamicSprite.py index 2271396..13c76a3 100644 --- a/project/sprite/DynamicSprite.py +++ b/project/sprite/DynamicSprite.py @@ -17,6 +17,8 @@ class DynamicSprite(StaticSprite): self.deceleration_horizontal_ground = 0.3 self.gravity = 9.81 / 10 + self.bounce_factor = 0 + def tick(self, tick_data: TickData): super().tick(tick_data)