diff --git a/assets/story/boss_fight/down_spike.png b/assets/story/boss_fight/down_spike.png deleted file mode 100644 index c4e930d..0000000 Binary files a/assets/story/boss_fight/down_spike.png and /dev/null differ diff --git a/assets/story/boss_fight/top_spike.png b/assets/story/boss_fight/top_spike.png deleted file mode 100644 index 0f4f0ed..0000000 Binary files a/assets/story/boss_fight/top_spike.png and /dev/null differ diff --git a/src/scenes/story/boss_fight.py b/src/scenes/story/boss_fight.py index 1a01488..8fea733 100644 --- a/src/scenes/story/boss_fight.py +++ b/src/scenes/story/boss_fight.py @@ -5,7 +5,7 @@ Scene de Combat final contre edmond, inspiré du combat d'omega flowey dans unde from enum import Enum import random from tkinter import RIGHT -from turtle import down, left, right +from turtle import down, left, right, shapesize from engine import CurrentScene, Scene from engine.ecs import World @@ -92,14 +92,26 @@ class Hurtable(Enum): FALSE = 1 +class IsRunning: + """ + Ressource qui definit si le jeux est en cours + """ + + def __initialize_world(world: World): """ TODO """ world.set( - ShieldPos(Vec2(render.WIDTH / 2, 750)), FightBox(), Life(100), Hurtable.TRUE + ShieldPos(Vec2(render.WIDTH / 2, 750)), + FightBox(), + Life(100), + Hurtable.TRUE, + IsRunning(), ) + world.new_entity().set(Coroutine(__rainning_projectiles(world))) + world.new_entity().set(Sprite(world[Assets].get_texture("background"))) world.new_entity().set( @@ -211,6 +223,7 @@ def __defeat(world: World): TODO """ if world[Life] <= 0: + world.remove(IsRunning) world[CurrentScene] = __new_game_scene() @@ -384,10 +397,53 @@ def __create_spike(world: World, time: float): yield wait(time) - top_spike.destroy() - down_spike.destroy() - left_spike.destroy() - right_spike.destroy() + top_spike.set( + Animation( + "spike/spike_up_leaving", + 30, + callback=lambda world, entity: entity.destroy(), + ) + ) + down_spike.set( + Animation( + "spike/spike_down_leaving", + 30, + callback=lambda world, entity: entity.destroy(), + ) + ) + left_spike.set( + Animation( + "spike/spike_left_leaving", + 30, + callback=lambda world, entity: entity.destroy(), + ) + ) + right_spike.set( + Animation( + "spike/spike_right_leaving", + 30, + callback=lambda world, entity: entity.destroy(), + ) + ) + + +def __rainning_projectiles(world: World): + while IsRunning: + entity = world.new_entity() + entity.set( + Sprite( + world[Assets].get_texture("error"), + Vec2(random.randint(0, 1399), 300), + 4, + ), + Animation("projectiles", 60, True), + smooth.Speed(1.3), + Hurt(10), + ) + entity.set(smooth.Target(Vec2(entity[Sprite].position.x, 1121))) + yield wait(0.5) + if entity[Sprite].position.y >= 1080: + entity.destroy() def __check_key_pressed(world: World): @@ -409,7 +465,12 @@ def __new_game_scene() -> Scene: return ( Scene( [__initialize_world], - [__move, __check_key_pressed, __check_hurt, __defeat], + [ + __move, + __check_key_pressed, + __check_hurt, + __defeat, + ], [], ) + smooth.PLUGIN