Пример #1
0
 def __init__(self, state_factory, world_map_service, pathfinding_service, motion_service, secret_code_decoding_service, treasure_handling_service, hardware_status_collector_service, local_world_map_service):
     self._state_factory = state_factory
     self._state_factory.inject_dependency(self)
     self._state_factory.inject_dependency(world_map_service)
     self._state_factory.inject_dependency(pathfinding_service)
     self._state_factory.inject_dependency(motion_service)
     self._state_factory.inject_dependency(secret_code_decoding_service)
     self._state_factory.inject_dependency(treasure_handling_service)
     self._state_factory.inject_dependency(hardware_status_collector_service)
     self._state_factory.inject_dependency(local_world_map_service)
     self._register_states()
     self._current_cycle = 0
     self._timer = Timer()
     self._init_game_cycle_state()
Пример #2
0
class GameCycleControlService(object):
    GAME_DURATION_MINUTES = 10

    @property
    def elapsed_time(self):
        return self._timer.elapsed_time

    @property
    def remaining_time(self):
        game_duration = timedelta(0, 0, 0, 0, self.GAME_DURATION_MINUTES)
        return game_duration - self.elapsed_time

    @property
    def state(self):
        return self._state

    @state.setter
    def state(self, value):
        self._state = value

    @property
    def current_state_display_string(self):
        if self._paused:
            return str(self._state) + " (Paused)"
        else:
            return str(self._state)

    @property
    def current_cycle(self):
        return self._current_cycle

    def __init__(self, state_factory, world_map_service, pathfinding_service, motion_service, secret_code_decoding_service, treasure_handling_service, hardware_status_collector_service, local_world_map_service):
        self._state_factory = state_factory
        self._state_factory.inject_dependency(self)
        self._state_factory.inject_dependency(world_map_service)
        self._state_factory.inject_dependency(pathfinding_service)
        self._state_factory.inject_dependency(motion_service)
        self._state_factory.inject_dependency(secret_code_decoding_service)
        self._state_factory.inject_dependency(treasure_handling_service)
        self._state_factory.inject_dependency(hardware_status_collector_service)
        self._state_factory.inject_dependency(local_world_map_service)
        self._register_states()
        self._current_cycle = 0
        self._timer = Timer()
        self._init_game_cycle_state()

    def _register_states(self):
        self._state_factory.register_state(CapacitorChargingState)
        self._state_factory.register_state(GameCycleCompletedState)
        self._state_factory.register_state(MovingTowardChargingStationState)
        self._state_factory.register_state(MovingTowardIslandState)
        self._state_factory.register_state(MovingTowardTreasureState)
        self._state_factory.register_state(SecretCodeDecodingState)
        self._state_factory.register_state(TreasureDropState)
        self._state_factory.register_state(TreasurePickupState)
        self._state_factory.register_state(WorldDetectionState)

    def _init_game_cycle_state(self):
        self._state = self._state_factory.create(InitialState)
        self._thread = None
        self._cycle_started = False
        self._paused = False
    
    def start_cycle(self):
        if self._cycle_started:
            raise GameCycleError("A game cycle is currently in progress.")
        self._init_game_cycle_state()
        self._timer.start()
        self._cycle_started = True
        self._current_cycle += 1
        self._thread = Thread(target = self._start_cycle_thread, daemon = True)
        self._thread.start()

    def _start_cycle_thread(self):
        self._state.execute()

    def pause_cycle(self):
        self._paused = True
        self._timer.pause()
        self._state.pause()

    def resume_cycle(self):
        self._timer.resume()
        self._state.resume()
        self._paused = False 

    def stop_cycle(self):
        self._state.reset()
        self._cycle_started = False
        self._timer.pause()

    def reset(self):
        self._state.reset()
        self._timer.stop()
        self._timer.reset()
        self._init_game_cycle_state()
        self._current_cycle = 0