From be278171cc296f8307659d723e97fa0bbc1fc8cd Mon Sep 17 00:00:00 2001 From: Tipragot Date: Sun, 29 Oct 2023 16:37:55 +0100 Subject: [PATCH] Test for COCO --- src/main.py | 5 ++-- src/plugins/smooth.py | 37 +++++++++++++++++++++++++++ src/scenes/folder_hide.py | 53 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 src/plugins/smooth.py create mode 100644 src/scenes/folder_hide.py diff --git a/src/main.py b/src/main.py index 1754bc0..546e02a 100644 --- a/src/main.py +++ b/src/main.py @@ -4,13 +4,14 @@ Example de l'utilisation du moteur de jeu. from engine import start_game -from scenes import menu +from scenes import folder_hide, menu start_game( { "menu": menu.SCENE, + "folder_hide": folder_hide.SCENE, }, - "menu", + "folder_hide", title="Guess The Number", ) diff --git a/src/plugins/smooth.py b/src/plugins/smooth.py new file mode 100644 index 0000000..f74e604 --- /dev/null +++ b/src/plugins/smooth.py @@ -0,0 +1,37 @@ +""" +Un plugin permettant de faire des déplacements fluides des entités. +""" + +import math +from engine import Delta, Position, Scene, Vec2, World + + +class Target(Vec2): + """ + Composant donnant la position voulue de l'entité. + """ + + +class Speed(float): + """ + Composant donnant la vittesse de déplacement de l'entité. + """ + + +def __update_positions(world: World): + """ + Met à jour la position des entités pour se rapprocher de la position voulue. + """ + for entity in world.query(Position, Target): + position = entity[Position] + target = entity[Target] + speed = entity[Speed] if Speed in entity else Speed(500) + blend = math.pow(0.5, world[Delta] * speed) + entity[Position] = Position(position + ((target - position) * blend)) + + +PLUGIN = Scene( + [], + [__update_positions], + [], +) diff --git a/src/scenes/folder_hide.py b/src/scenes/folder_hide.py new file mode 100644 index 0000000..611e084 --- /dev/null +++ b/src/scenes/folder_hide.py @@ -0,0 +1,53 @@ +""" +Scène du jeu dans lequel on se cache de Edmond dans les dossiers. +""" + +from engine import Centered, Display, Order, Position, Scene, Texture, Vec2, World +from plugins import smooth + + +class FolderPosition: + """ + La position d'un dossier dans la grille. + """ + + def __init__(self, x: int, y: int): + self.x = x + self.y = y + + +def __initialize_world(world: World): + """ + Initialise le monde de la scène. + """ + for x in range(5): + for y in range(2): + world.create_entity( + Position(0, 0), + Order(1), + Centered(), + Texture("directory.png"), + FolderPosition(x, y), + ) + + +def __update_positions(world: World): + """ + Met à jour la position cible des dossiers. + """ + for entity in world.query(FolderPosition): + position = entity[FolderPosition] + first_position = Vec2(Display.WIDTH / 2 - 300, Display.HEIGHT / 2 - 50) + entity[smooth.Target] = smooth.Target( + first_position + Vec2(position.x * 150, position.y * 100) + ) + + +SCENE = ( + Scene( + [__initialize_world], + [__update_positions], + [], + ) + + smooth.PLUGIN +)