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