Move the action perform logic to Action.perform() on each Action subclass

Rename Object to Entity to avoid name clashes with Python.object
This commit is contained in:
Eryn Wells 2022-05-01 09:29:30 -07:00
parent cde6ea2065
commit 5ce26e310b
4 changed files with 49 additions and 57 deletions

View file

@ -7,7 +7,7 @@ from .actions import ExitAction, MovePlayerAction, RegenerateRoomsAction
from .events import EventHandler
from .geometry import Point, Size
from .map import Map
from .object import Object
from .object import Entity
from typing import AbstractSet
LOG = logging.getLogger('engine')
@ -30,10 +30,10 @@ class Engine:
first_room = self.map.rooms[0]
player_start_position = first_room.midpoint
self.player = Object('@', tcod.white, x=player_start_position.x, y=player_start_position.y)
self.objects: AbstractSet[Object] = {self.player}
self.player = Entity('@', tcod.white, x=player_start_position.x, y=player_start_position.y)
self.entities: AbstractSet[Entity] = {self.player}
for _ in range(self.rng.randint(1, 15)):
self.objects.add(Object('@', color=tcod.yellow, x=self.rng.randint(0, map_size.width), y=self.rng.randint(0, map_size.height)))
self.entities.add(Entity('@', color=tcod.yellow, x=self.rng.randint(0, map_size.width), y=self.rng.randint(0, map_size.height)))
def handle_event(self, event: tcod.event.Event):
action = self.event_handler.dispatch(event)
@ -41,18 +41,7 @@ class Engine:
if not action:
return
if isinstance(action, MovePlayerAction):
map_size = self.configuration.map_size
new_player_position = Point(self.player.x + action.direction[0],
self.player.y + action.direction[1])
can_move_to_map_position = self.map.tile_is_in_bounds(new_player_position) and self.map.tile_is_walkable(new_player_position)
overlaps_an_object = any(new_player_position.x == obj.x and new_player_position.y == obj.y for obj in self.objects)
EVENT_LOG.debug(f'Attempting to move player to {new_player_position}; can_move:{can_move_to_map_position} overlaps:{overlaps_an_object}')
if can_move_to_map_position and not overlaps_an_object:
self.player.move_to(new_player_position)
if isinstance(action, ExitAction):
raise SystemExit()
action.perform(self, self.player)
# if isinstance(action, RegenerateRoomsAction):
# partitions, rooms = generate_rooms(random)
@ -60,5 +49,5 @@ class Engine:
def print_to_console(self, console):
self.map.print_to_console(console)
for obj in self.objects:
obj.print_to_console(console)
for ent in self.entities:
ent.print_to_console(console)