# Eryn Wells from typing import TYPE_CHECKING from ..object import Actor from .result import ActionResult if TYPE_CHECKING: from ..engine import Engine class Action: '''An action with no specific actor''' # pylint: disable=unused-argument def perform(self, engine: 'Engine') -> ActionResult: '''Perform this action. Parameters ---------- engine : Engine The game engine Returns ------- ActionResult A result object reflecting how the action was handled, and what follow-up actions, if any, are needed to complete the action. ''' return self.success() def failure(self) -> ActionResult: '''Create an ActionResult indicating failure with no follow-up''' return ActionResult(self, success=False) def success(self) -> ActionResult: '''Create an ActionResult indicating success with no follow-up''' return ActionResult(self, success=True) def __str__(self) -> str: return self.__class__.__name__ def __repr__(self): return f'{self.__class__.__name__}()' class ActionWithActor(Action): '''An action that assigned to an actor''' def __init__(self, actor: Actor): super().__init__() self.actor = actor def __str__(self) -> str: return f'{self.__class__.__name__} for {self.actor!s}' def __repr__(self): return f'{self.__class__.__name__}({self.actor!r})'