1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- # coding: utf-8
- import time
-
- from sandbox.tile.simulation.event import NoLongerVisibleOpponent
- from sandbox.tile.simulation.event import NewVisibleOpponent
- from sandbox.tile.simulation.mechanism import OpponentVisibleMechanism
- from sandbox.tile.user_action import UserAction
- from synergine2.config import Config
- from synergine2.simulation import Simulation
- from synergine2.simulation import SubjectBehaviour
- from synergine2.simulation import Event
- from synergine2.simulation import Subject
- from synergine2_xyz.move.simulation import MoveToBehaviour as BaseMoveToBehaviour
-
-
- class MoveToBehaviour(BaseMoveToBehaviour):
- def __init__(
- self,
- config: Config,
- simulation: Simulation,
- subject: Subject,
- ) -> None:
- super().__init__(config, simulation, subject)
- self._walk_duration = float(self.config.resolve('game.move.walk_ref_time'))
- self._run_duration = float(self.config.resolve('game.move.run_ref_time'))
- self._crawl_duration = float(self.config.resolve('game.move.crawl_ref_time'))
-
- def _can_move_to_next_step(self, move_to_data: dict) -> bool:
- if move_to_data['gui_action'] == UserAction.ORDER_MOVE:
- return time.time() - move_to_data['last_intention_time'] >= self._walk_duration
- if move_to_data['gui_action'] == UserAction.ORDER_MOVE_FAST:
- return time.time() - move_to_data['last_intention_time'] >= self._run_duration
- if move_to_data['gui_action'] == UserAction.ORDER_MOVE_CRAWL:
- return time.time() - move_to_data['last_intention_time'] >= self._crawl_duration
-
-
- class LookAroundBehaviour(SubjectBehaviour):
- """
- Behaviour who permit to reference visible things like enemies
- """
- visible_mechanism = OpponentVisibleMechanism
- use = [visible_mechanism]
- force_action = True
-
- def action(self, data) -> [Event]:
- new_visible_subject_events = []
- no_longer_visible_subject_events = []
-
- for no_longer_visible_subject_id in data['no_longer_visible_subject_ids']:
- no_longer_visible_subject_events.append(NoLongerVisibleOpponent(
- observer_subject_id=self.subject.id,
- observed_subject_id=no_longer_visible_subject_id,
- ))
- self.subject.visible_opponent_ids.remove(no_longer_visible_subject_id)
-
- for new_visible_subject_id in data['new_visible_subject_ids']:
- new_visible_subject_events.append(NewVisibleOpponent(
- observer_subject_id=self.subject.id,
- observed_subject_id=new_visible_subject_id,
- ))
- self.subject.visible_opponent_ids.append(new_visible_subject_id)
-
- return new_visible_subject_events + no_longer_visible_subject_events
-
- def run(self, data):
- visible_subjects = data[self.visible_mechanism]['visible_subjects']
- visible_subject_ids = [s.id for s in visible_subjects]
- new_visible_subject_ids = []
- no_longer_visible_subject_ids = []
-
- for subject_id in self.subject.visible_opponent_ids:
- if subject_id not in visible_subject_ids:
- no_longer_visible_subject_ids.append(subject_id)
-
- for subject in visible_subjects:
- if subject.id not in self.subject.visible_opponent_ids:
- new_visible_subject_ids.append(subject.id)
-
- return {
- 'new_visible_subject_ids': new_visible_subject_ids,
- 'no_longer_visible_subject_ids': no_longer_visible_subject_ids,
- }
|