rogueliketutorials/input_handlers.py

48 lines
1.3 KiB
Python
Raw Normal View History

2022-01-02 17:50:33 +00:00
from __future__ import annotations
from typing import Optional, TYPE_CHECKING
import tcod.event
from actions import Action, EscapeAction, BumpAction
2022-01-02 17:50:33 +00:00
if TYPE_CHECKING:
from engine import Engine
class EventHandler(tcod.event.EventDispatch[Action]):
2022-01-02 17:50:33 +00:00
def __init__(self, engine: Engine):
self.engine = engine
def handle_events(self) -> None:
for event in tcod.event.wait():
action = self.dispatch(event)
if action is None:
continue
action.perform()
self.engine.handle_enemy_turns()
self.engine.update_fov()
def ev_quit(self, event: tcod.event.Quit) -> Optional[Action]:
raise SystemExit()
def ev_keydown(self, event: tcod.event.KeyDown) -> Optional[Action]:
action: Optional[Action] = None
key = event.sym
2022-01-02 17:50:33 +00:00
player = self.engine.player
if key == tcod.event.K_UP:
2022-01-02 17:50:33 +00:00
action = BumpAction(player, dx=0, dy=-1)
elif key == tcod.event.K_DOWN:
2022-01-02 17:50:33 +00:00
action = BumpAction(player, dx=0, dy=1)
elif key == tcod.event.K_LEFT:
2022-01-02 17:50:33 +00:00
action = BumpAction(player, dx=-1, dy=0)
elif key == tcod.event.K_RIGHT:
2022-01-02 17:50:33 +00:00
action = BumpAction(player, dx=1, dy=0)
elif key == tcod.event.K_ESCAPE:
2022-01-02 17:50:33 +00:00
action = EscapeAction(player)
return action