Spawn chercheur de dossier

This commit is contained in:
CoCo_Sol 2023-11-03 12:22:48 +01:00
parent 9460573438
commit dc6f4136d8

View file

@ -2,7 +2,10 @@
Scène du jeu dans lequel Windows Defender se cache de Edmond dans les dossiers. Scène du jeu dans lequel Windows Defender se cache de Edmond dans les dossiers.
""" """
from engine import Scene import random
from plugins.animation import Animation
from plugins.coroutine import Coroutine, wait
from engine import CurrentScene, Scene
from engine.ecs import Entity, World from engine.ecs import Entity, World
from engine.math import Vec2 from engine.math import Vec2
from plugins import assets as plugin_assets, render, smooth from plugins import assets as plugin_assets, render, smooth
@ -79,6 +82,18 @@ class SearchingDirectory:
""" """
class SearchedDirectoryAlert:
"""
Composant marquant une entité comme etant un dossier etant dans la recherche plus tard.
"""
class SearchedDirectoryAlertPosition(Vec2):
"""
Composant marquant une entité comme etant la position d'un dossier dans la recherche plus tard.
"""
class DirectoryName: class DirectoryName:
""" """
Composant marquant une entité comme étant le nom d'un dossier. Composant marquant une entité comme étant le nom d'un dossier.
@ -156,6 +171,84 @@ def __initialize(world: World):
DirectoryName(entity), DirectoryName(entity),
) )
# Lancement de la boucle de jeu
world.new_entity().set(Coroutine(__game_loop(world)))
def __game_loop(world: World):
"""
La boucle principale de la scene.
"""
yield wait(5.0)
for _ in range(5):
__spawn_search_alert(world, 5)
yield wait(5.0)
__spawn_search_directory(world)
__delete_search_alert(world)
yield wait(5.0)
__delete_search_directory(world)
yield wait(1.0)
def __delete_search_directory(world: World):
for entity in world.query(Directory, SearchingDirectory):
del entity[SearchingDirectory]
del entity[Animation]
print("c'est bon ?")
def __spawn_search_directory(world: World):
for search_alert in world.query(
SearchedDirectoryAlert, SearchedDirectoryAlertPosition
):
for entity in world.query(Directory, DirectoryPosition):
if (
entity[DirectoryPosition]
== search_alert[SearchedDirectoryAlertPosition]
):
if DefenderDirectory in entity:
entity.set(
SearchingDirectory(),
Animation("search_directory_failed", callback=__game_over),
)
break
entity.set(SearchingDirectory(), Animation("search_directory"))
break
def __game_over(world: World, _entity: Entity):
world[CurrentScene] = SCENE
def __delete_search_alert(world: World):
for search_alert in world.query(
SearchedDirectoryAlert, SearchedDirectoryAlertPosition
):
search_alert[Animation] = Animation(
"search_alert/despawn", callback=lambda _, entity: entity.destroy()
)
def __spawn_search_alert(world: World, nb_alerts: int):
"""
Spawn une alerte de recherche.
"""
entities = world.query(Directory, DirectoryPosition, without=[BlockedDirectory])
for entity in random.sample(list(entities), nb_alerts):
position = entity[DirectoryPosition]
world.new_entity().set(
Animation("search_alert/spawn"),
Sprite(
world[Assets].error_texture,
position.screen_position(),
origin=Vec2(0.5),
order=2,
),
SearchedDirectoryAlert(),
SearchedDirectoryAlertPosition(position),
)
def __control_directories(world: World): def __control_directories(world: World):
""" """