Source code for VegansDeluxe.core.Actions.EntityActions

from VegansDeluxe.core.Actions.Action import DecisiveAction
from VegansDeluxe.core.Actions.ActionTags import ActionTag
from VegansDeluxe.core.ContentManager import AttachedAction
from VegansDeluxe.core.Entities import Entity
from VegansDeluxe.core.Events.Events import GameEvent
from VegansDeluxe.core.TargetType import OwnOnly
from VegansDeluxe.core.Translator.LocalizedString import ls


[docs]@AttachedAction(Entity) class ApproachAction(DecisiveAction): id = 'approach' name = ls("core.action.approach.name") target_type = OwnOnly() @property def hidden(self) -> bool: return self.source.nearby_entities == list(filter(lambda t: t != self.source, self.session.entities))
[docs] async def func(self, source, target): source.nearby_entities = list(filter(lambda t: t != source, self.session.entities)) for entity in source.nearby_entities: entity.nearby_entities.append(source) if source not in entity.nearby_entities else None self.session.say(ls("core.action.approach.text").format(source.name))
[docs]@AttachedAction(Entity) class ReloadAction(DecisiveAction): id = 'reload' name = ls("core.action.reload.name") target_type = OwnOnly() def __init__(self, *args): super().__init__(*args) self.tags += [ActionTag.RELOAD]
[docs] async def func(self, source, target): source.energy = source.max_energy self.session.say(source.weapon.reload_text(source))
[docs]class SkipActionGameEvent(GameEvent): def __init__(self, session_id, turn, entity_id): super().__init__(session_id, turn) self.entity_id = entity_id self.no_text = False
[docs]@AttachedAction(Entity) class SkipTurnAction(DecisiveAction): id = 'skip' name = ls("core.action.skip.name") target_type = OwnOnly() priority = 2 def __init__(self, *args): super().__init__(*args) self.tags += [ActionTag.SKIP]
[docs] async def func(self, source, target): message = await self.event_manager.publish(SkipActionGameEvent(self.session.id, self.session.turn, source.id)) if not message[0].no_text: self.session.say(ls("core.action.skip.text").format(source.name))