ecs #58
40
src/plugins/smooth.py
Normal file
40
src/plugins/smooth.py
Normal file
|
@ -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],
|
||||||
|
[],
|
||||||
|
)
|
Loading…
Reference in a new issue