ecs #58
|
@ -7,6 +7,7 @@ from engine.ecs import World
|
||||||
from plugins import assets, defaults
|
from plugins import assets, defaults
|
||||||
from plugins.animation import Animation
|
from plugins.animation import Animation
|
||||||
from plugins.coroutine import Coroutine, condition, wait
|
from plugins.coroutine import Coroutine, condition, wait
|
||||||
|
from plugins.hover import HoveredTexture
|
||||||
from plugins.inputs import MousePosition
|
from plugins.inputs import MousePosition
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,6 +36,10 @@ start_game(
|
||||||
[
|
[
|
||||||
lambda world: world.new_entity().set(
|
lambda world: world.new_entity().set(
|
||||||
Coroutine(super_fonction_du_turfu(world)),
|
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,
|
assets,
|
||||||
coroutine,
|
coroutine,
|
||||||
display,
|
display,
|
||||||
|
hover,
|
||||||
inputs,
|
inputs,
|
||||||
render,
|
render,
|
||||||
sound,
|
sound,
|
||||||
|
@ -20,6 +21,7 @@ PLUGIN = (
|
||||||
+ timing.PLUGIN
|
+ timing.PLUGIN
|
||||||
+ assets.PLUGIN
|
+ assets.PLUGIN
|
||||||
+ inputs.PLUGIN
|
+ inputs.PLUGIN
|
||||||
|
+ hover.PLUGIN
|
||||||
+ coroutine.PLUGIN
|
+ coroutine.PLUGIN
|
||||||
+ sound.PLUGIN
|
+ sound.PLUGIN
|
||||||
+ text.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