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], + [], +)