From 34a44de39a233d40f1b1fafefc09233636750bd1 Mon Sep 17 00:00:00 2001 From: Tipragot Date: Thu, 2 Nov 2023 12:50:00 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20du=20plugin=20de=20d=C3=A9placement=20s?= =?UTF-8?q?mooth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/smooth.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/plugins/smooth.py diff --git a/src/plugins/smooth.py b/src/plugins/smooth.py new file mode 100644 index 0000000..051f9eb --- /dev/null +++ b/src/plugins/smooth.py @@ -0,0 +1,40 @@ +""" +Un plugin permettant de faire des déplacements fluides des entités. +""" + +from engine import Plugin, World +from engine.math import Vec2 +from plugins.render import Sprite +from plugins.timing import Delta + + +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(Sprite, Target): + sprite = entity[Sprite] + target = entity[Target] + speed = entity[Speed] if Speed in entity else Speed(10) + sprite.position = ( + sprite.position + (target - sprite.position) * world[Delta] * speed + ) + + +PLUGIN = Plugin( + [], + [__update_positions], + [], +)