Stepwise/source/event_handler.py
2025-03-24 20:42:51 +11:00

47 lines
1.1 KiB
Python

from typing import Optional
import tcod
from actions import Action, QuitAction, MoveAction
from engine import Engine
#event handler is one part of the engine
class EventHandler(tcod.event.EventDispatch[Action]):
def __init__(self, engine: Engine):
super().__init__()
self.engine = engine
def handle_events(self) -> None:
for event in tcod.event.wait():
action = self.dispatch(event)
if action is None:
continue
action.apply() #entity references the engine
#callbacks
def ev_quit(self, event: tcod.event.Quit) -> Optional[Action]:
return QuitAction()
def ev_keydown(self, event: tcod.event.KeyDown) -> Optional[Action]:
key = event.sym #SDL stuff, neat.
player = self.engine.player
#parse player input
match key:
case tcod.event.KeySym.ESCAPE:
return QuitAction()
case tcod.event.KeySym.UP:
return MoveAction(player, xdir = 0, ydir = -1)
case tcod.event.KeySym.DOWN:
return MoveAction(player, xdir = 0, ydir = 1)
case tcod.event.KeySym.LEFT:
return MoveAction(player, xdir = -1, ydir = 0)
case tcod.event.KeySym.RIGHT:
return MoveAction(player, xdir = 1, ydir = 0)
case _:
return None