Mouse Presses#
https://github.com/lukasturcani/xecs/blob/master/examples/mouse_presses/mouse_presses.py
When you click a mouse button a different circle will light up!
import xecs as xx
from xecs_pygame import Circle, PyGamePlugin
class LeftCircle(xx.Component):
pass
class MiddleCircle(xx.Component):
pass
class RightCircle(xx.Component):
pass
class XInput1Circle(xx.Component):
pass
class XInput2Circle(xx.Component):
pass
def main() -> None:
app = xx.RealTimeApp(num_entities=5)
app.add_plugin(PyGamePlugin())
app.add_startup_system(spawn_circles)
app.add_system(mouse_presses)
app.add_pool(xx.Transform2.create_pool(5))
app.add_pool(Circle.create_pool(5))
app.add_pool(LeftCircle.create_pool(1))
app.add_pool(MiddleCircle.create_pool(1))
app.add_pool(RightCircle.create_pool(1))
app.add_pool(XInput1Circle.create_pool(1))
app.add_pool(XInput2Circle.create_pool(1))
app.run()
def spawn_circles(
world: xx.World,
commands: xx.Commands,
) -> None:
_, transformi, circlei = commands.spawn(
(LeftCircle, xx.Transform2, Circle), 1
)
transform = world.get_view(xx.Transform2, transformi)
transform.translation.x.fill(-320)
circle = world.get_view(Circle, circlei)
circle.radius.fill(60)
circle.color.fill("red")
_, transformi, circlei = commands.spawn(
(MiddleCircle, xx.Transform2, Circle), 1
)
transform = world.get_view(xx.Transform2, transformi)
transform.translation.x.fill(-160)
circle = world.get_view(Circle, circlei)
circle.radius.fill(60)
circle.color.fill("green")
_, transformi, circlei = commands.spawn(
(RightCircle, xx.Transform2, Circle), 1
)
transform = world.get_view(xx.Transform2, transformi)
transform.translation.x.fill(0)
circle = world.get_view(Circle, circlei)
circle.radius.fill(60)
circle.color.fill("blue")
_, transformi, circlei = commands.spawn(
(XInput1Circle, xx.Transform2, Circle), 1
)
transform = world.get_view(xx.Transform2, transformi)
transform.translation.x.fill(160)
circle = world.get_view(Circle, circlei)
circle.radius.fill(60)
circle.color.fill("yellow")
_, transformi, circlei = commands.spawn(
(XInput2Circle, xx.Transform2, Circle), 1
)
transform = world.get_view(xx.Transform2, transformi)
transform.translation.x.fill(320)
circle = world.get_view(Circle, circlei)
circle.radius.fill(60)
circle.color.fill("purple")
def mouse_presses(
mouse: xx.Mouse,
left_circle_query: xx.Query[tuple[LeftCircle, Circle]],
middle_circle_query: xx.Query[tuple[MiddleCircle, Circle]],
right_circle_query: xx.Query[tuple[RightCircle, Circle]],
xinput1_circle_query: xx.Query[tuple[XInput1Circle, Circle]],
xinput2_circle_query: xx.Query[tuple[XInput2Circle, Circle]],
) -> None:
_, left_circle = left_circle_query.result()
if xx.MouseButton.left() in mouse.pressed:
left_circle.width.fill(0)
else:
left_circle.width.fill(2)
_, middle_circle = middle_circle_query.result()
if xx.MouseButton.middle() in mouse.pressed:
middle_circle.width.fill(0)
else:
middle_circle.width.fill(2)
_, right_circle = right_circle_query.result()
if xx.MouseButton.right() in mouse.pressed:
right_circle.width.fill(0)
else:
right_circle.width.fill(2)
_, xinput1_circle = xinput1_circle_query.result()
if xx.MouseButton.xinput1() in mouse.pressed:
xinput1_circle.width.fill(0)
else:
xinput1_circle.width.fill(2)
_, xinput2_circle = xinput2_circle_query.result()
if xx.MouseButton.xinput2() in mouse.pressed:
xinput2_circle.width.fill(0)
else:
xinput2_circle.width.fill(2)
if __name__ == "__main__":
main()