WIP Ajout projectil horizonto et du system de vagu

This commit is contained in:
Raphaël 2023-11-05 02:39:37 +01:00
parent eae3f5392b
commit 6d1abb44a1

View file

@ -118,15 +118,27 @@ class Wave:
def __init__(self) -> None: def __init__(self) -> None:
self.wave_list = [ self.wave_list = [
["__rainning_projectiles"], ["__rainning_projectiles"],
["__rainning_projectiles", "__rainning_projectiles"], ["__rainning_projectiles", "__horizontal_projectile"],
["__rainning_projectiles", "__create_zone_attack"],
[ [
"__rainning_projectiles", "__rainning_projectiles",
"__rainning_projectiles", "__rainning_projectiles",
"__create_zone_attack", "__create_zone_attack",
], ],
["__rainning_projectiles", "__create_spike"], [
["__rainning_projectiles", "__rainning_projectiles", "__create_spike"], "__rainning_projectiles",
"__rainning_projectiles",
"__horizontal_projectile",
"__create_zone_attack",
],
[
"__rainning_projectiles",
"__create_spike",
],
[
"__rainning_projectiles",
"__rainning_projectiles",
"__create_spike",
],
[ [
"__rainning_projectiles", "__rainning_projectiles",
"__rainning_projectiles", "__rainning_projectiles",
@ -137,6 +149,12 @@ class Wave:
] ]
class HorizontalProjectiles:
"""
Composant qui marque les entitées comme etnat des projectiles horizontaux
"""
def __initialize_world(world: World): def __initialize_world(world: World):
""" """
TODO TODO
@ -151,6 +169,7 @@ def __initialize_world(world: World):
) )
world.new_entity().set(Coroutine(__wave(world))) world.new_entity().set(Coroutine(__wave(world)))
world.new_entity().set(Coroutine(__print_time(world)))
world.new_entity().set(Sprite(world[Assets].get_texture("background"))) world.new_entity().set(Sprite(world[Assets].get_texture("background")))
@ -231,7 +250,7 @@ def __check_hurt(world: World):
position = entity.get(Sprite).position position = entity.get(Sprite).position
width, height = entity.get(Sprite).texture.get_size() width, height = entity.get(Sprite).texture.get_size()
for shield in world.query(Velocity, Sprite): for shield in world.query(Player, Sprite):
if world[Hurtable] == Hurtable.TRUE: if world[Hurtable] == Hurtable.TRUE:
shield_position = shield.get(Sprite).position shield_position = shield.get(Sprite).position
shield_width, shield_height = shield.get(Sprite).texture.get_size() shield_width, shield_height = shield.get(Sprite).texture.get_size()
@ -258,7 +277,6 @@ def __check_hurt(world: World):
) )
if is_collision: if is_collision:
world.set(Life(world.get(Life) - entity.get(Hurt).damage)) world.set(Life(world.get(Life) - entity.get(Hurt).damage))
print(world.get(Life))
entity.remove(Hurt) entity.remove(Hurt)
if Spike in entity: if Spike in entity:
match entity.get(Spike): match entity.get(Spike):
@ -294,26 +312,88 @@ def __defeat(world: World):
def __wave(world: World): def __wave(world: World):
entity = world.new_entity()
entity2 = world.new_entity()
entity3 = world.new_entity()
entity4 = world.new_entity()
entity5 = world.new_entity()
for i, actuel_wave in enumerate(world[Wave].wave_list): for i, actuel_wave in enumerate(world[Wave].wave_list):
print("vague n°" + str(i)) print("vague n°" + str(i))
for fonction in actuel_wave: for i, fonction in enumerate(actuel_wave):
match fonction: if i == 0:
case "__rainning_projectiles": match fonction:
print("1") case "__rainning_projectiles":
entity = world.new_entity() entity.set(Coroutine(__rainning_projectiles(world)))
entity.set(Coroutine(__rainning_projectiles(world))) case "__create_zone_attack":
case "__create_zone_attack": for i in range(5):
print("2") entity.set(Coroutine(__create_zone_attack(world)))
entity = world.new_entity() yield wait(5)
entity.set(Coroutine(__create_zone_attack(world))) case "__create_spike":
case "__create_spike": entity.set(Coroutine(__create_spike(world)))
entity = world.new_entity() yield wait(25)
entity.set(Coroutine(__create_spike(world))) entity4.set(Coroutine(__create_spike(world)))
case _: case "__horizontal_projectile":
pass entity.set(Coroutine(__horizontal_projectile(world)))
case _:
pass
elif i == 1:
match fonction:
case "__rainning_projectiles":
entity2.set(Coroutine(__rainning_projectiles(world)))
case "__create_zone_attack":
for i in range(5):
entity2.set(Coroutine(__create_zone_attack(world)))
yield wait(5)
case "__create_spike":
entity2.set(Coroutine(__create_spike(world)))
yield wait(25)
entity2.set(Coroutine(__create_spike(world)))
case "__horizontal_projectile":
entity2.set(Coroutine(__horizontal_projectile(world)))
case _:
pass
elif i == 2:
match fonction:
case "__rainning_projectiles":
entity3.set(Coroutine(__rainning_projectiles(world)))
case "__create_zone_attack":
for i in range(5):
entity3.set(Coroutine(__create_zone_attack(world)))
yield wait(5)
case "__create_spike":
entity3.set(Coroutine(__create_spike(world)))
yield wait(25)
entity3.set(Coroutine(__create_spike(world)))
case "__horizontal_projectile":
entity3.set(Coroutine(__horizontal_projectile(world)))
case _:
pass
elif i == 3:
match fonction:
case "__rainning_projectiles":
entity4.set(Coroutine(__rainning_projectiles(world)))
case "__create_zone_attack":
for i in range(5):
entity4.set(Coroutine(__create_zone_attack(world)))
yield wait(5)
case "__create_spike":
entity4.set(Coroutine(__create_spike(world)))
yield wait(25)
entity4.set(Coroutine(__create_spike(world)))
case "__horizontal_projectile":
entity4.set(Coroutine(__horizontal_projectile(world)))
case _:
pass
yield wait(float(world[Wave].wave_list[-1][0])) yield wait(float(world[Wave].wave_list[-1][0]))
entity.destroy() entity.destroy()
for entities in world.query(RainProjectiles): entity2.destroy()
entity3.destroy()
entity4.destroy()
entity5.destroy()
for entities in world.query(
RainProjectiles or ZoneAttack or Spike or HorizontalProjectiles
):
entities.destroy() entities.destroy()
@ -402,6 +482,8 @@ def __create_zone_attack(world: World):
world[FightBox].p2[1], world[FightBox].p2[1],
) )
locate = locate2 locate = locate2
for entities in world.query(ZoneAttackProjectiles):
entities.destroy()
def __create_spike(world: World): def __create_spike(world: World):
@ -546,9 +628,36 @@ def __rainning_projectiles(world: World):
yield wait(0.2) yield wait(0.2)
entity.set(smooth.Target(Vec2(entity[Sprite].position.x, 1121))) entity.set(smooth.Target(Vec2(entity[Sprite].position.x, 1121)))
for entity in world.query(RainProjectiles, Sprite): for entity in world.query(RainProjectiles, Sprite):
if entity[Sprite].position.y > 1080: if entity[Sprite].position.y > 1080:
entity.destroy() entity.destroy()
def __horizontal_projectile(world: World):
while IsRunning:
animation = Animation(
"projectiles_coming",
30,
)
entity = world.new_entity()
entity.set(
Sprite(
world[Assets].get_texture("error"),
Vec2(10, random.randint(500, 930)),
4,
),
animation,
smooth.Speed(2),
Hurt(10),
HorizontalProjectiles(),
)
yield animation.wait()
yield wait(1)
entity.set(smooth.Target(Vec2(1500, entity[Sprite].position.y)))
for entity in world.query(RainProjectiles, Sprite):
if entity[Sprite].position.x > 1440:
entity.destroy()
def __check_key_pressed(world: World): def __check_key_pressed(world: World):
@ -573,6 +682,14 @@ def __update_life_bar(world: World):
entity[Sprite].texture = surface_carre entity[Sprite].texture = surface_carre
def __print_time(world: World):
time = 0
while IsRunning:
yield wait(1)
time += 1
print(time)
def __new_game_scene() -> Scene: def __new_game_scene() -> Scene:
""" """
Créer une nouvelle scène Créer une nouvelle scène