ecs #58
|
@ -2,7 +2,10 @@
|
|||
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.math import Vec2
|
||||
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:
|
||||
"""
|
||||
Composant marquant une entité comme étant le nom d'un dossier.
|
||||
|
@ -156,6 +171,84 @@ def __initialize(world: World):
|
|||
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):
|
||||
"""
|
||||
|
|
Loading…
Reference in a new issue