ecs #58
|
@ -7,6 +7,7 @@ from engine.ecs import World
|
|||
from plugins import assets, defaults
|
||||
from plugins.animation import Animation
|
||||
from plugins.coroutine import Coroutine, condition, wait
|
||||
from plugins.hover import HoveredTexture
|
||||
from plugins.inputs import MousePosition
|
||||
|
||||
|
||||
|
@ -35,6 +36,10 @@ start_game(
|
|||
[
|
||||
lambda world: world.new_entity().set(
|
||||
Coroutine(super_fonction_du_turfu(world)),
|
||||
HoveredTexture(
|
||||
world[assets.Assets].get_texture("directory"),
|
||||
world[assets.Assets].get_texture("attack_point"),
|
||||
),
|
||||
)
|
||||
],
|
||||
[],
|
||||
|
|
|
@ -7,6 +7,7 @@ from plugins import (
|
|||
assets,
|
||||
coroutine,
|
||||
display,
|
||||
hover,
|
||||
inputs,
|
||||
render,
|
||||
sound,
|
||||
|
@ -20,6 +21,7 @@ PLUGIN = (
|
|||
+ timing.PLUGIN
|
||||
+ assets.PLUGIN
|
||||
+ inputs.PLUGIN
|
||||
+ hover.PLUGIN
|
||||
+ coroutine.PLUGIN
|
||||
+ sound.PLUGIN
|
||||
+ text.PLUGIN
|
||||
|
|
92
src/plugins/hover.py
Normal file
92
src/plugins/hover.py
Normal file
|
@ -0,0 +1,92 @@
|
|||
"""
|
||||
Un plugin permettant de savoir si la souris est par dessus une entité.
|
||||
"""
|
||||
|
||||
|
||||
import pygame
|
||||
|
||||
from engine import GlobalPlugin
|
||||
from engine.ecs import World
|
||||
from engine.math import Vec2
|
||||
from plugins.inputs import MousePosition
|
||||
from plugins.render import Sprite
|
||||
|
||||
|
||||
class HoverEnter:
|
||||
"""
|
||||
Composant indicant que l'entité vient de commencer a être survolée par la souris.
|
||||
"""
|
||||
|
||||
|
||||
class Hovered:
|
||||
"""
|
||||
Composant indicant que l'entité est survolée par la souris.
|
||||
"""
|
||||
|
||||
|
||||
class HoverExit:
|
||||
"""
|
||||
Composant indicant que la souris viens d'arreter de survoler l'entité.
|
||||
"""
|
||||
|
||||
|
||||
class HoveredTexture:
|
||||
"""
|
||||
Composant permettant de changer la texture d'une entité lorsque
|
||||
celle-ci est survolée par la souris.
|
||||
"""
|
||||
|
||||
def __init__(self, normal: pygame.Surface, hovered: pygame.Surface):
|
||||
self.normal = normal
|
||||
self.hovered = hovered
|
||||
|
||||
|
||||
def __update_hovered(world: World):
|
||||
"""
|
||||
Vérifie le survol de la souris sur les entitées.
|
||||
"""
|
||||
# On met à jour les composants
|
||||
mouse_position = world[MousePosition]
|
||||
for entity in world.query(Sprite):
|
||||
# Récupération de la position et taille de l'entité
|
||||
sprite = entity[Sprite]
|
||||
size = Vec2(*sprite.texture.get_size()) * Vec2(*sprite.area[2:])
|
||||
position = sprite.position - (sprite.origin * size)
|
||||
|
||||
# On détermine si la souris est sur l'entité
|
||||
if (
|
||||
mouse_position.x >= position.x
|
||||
and mouse_position.x <= position.x + size.x
|
||||
and mouse_position.y >= position.y
|
||||
and mouse_position.y <= position.y + size.y
|
||||
):
|
||||
if Hovered not in entity:
|
||||
entity[HoverEnter] = HoverEnter()
|
||||
else:
|
||||
del entity[HoverEnter]
|
||||
entity[Hovered] = Hovered()
|
||||
else:
|
||||
if Hovered in entity:
|
||||
entity[HoverExit] = HoverExit()
|
||||
else:
|
||||
del entity[HoverExit]
|
||||
del entity[Hovered]
|
||||
|
||||
# On affiche la bonne texture
|
||||
for entity in world.query(HoveredTexture):
|
||||
if Hovered in entity:
|
||||
texture = entity[HoveredTexture].hovered
|
||||
else:
|
||||
texture = entity[HoveredTexture].normal
|
||||
if Sprite in entity:
|
||||
entity[Sprite].texture = texture
|
||||
else:
|
||||
entity[Sprite] = Sprite(texture)
|
||||
|
||||
|
||||
PLUGIN = GlobalPlugin(
|
||||
[],
|
||||
[__update_hovered],
|
||||
[],
|
||||
[],
|
||||
)
|
Loading…
Reference in a new issue