dcs-retribution/game/ato/flightstate/waitingforstart.py

57 lines
1.6 KiB
Python

from __future__ import annotations
from datetime import datetime, timedelta
from typing import TYPE_CHECKING
from game.ato.starttype import StartType
from .flightstate import FlightState
from .inflight import InFlight
from .startup import StartUp
from .takeoff import Takeoff
from .taxi import Taxi
if TYPE_CHECKING:
from game.ato.flight import Flight
from game.settings import Settings
class WaitingForStart(FlightState):
def __init__(
self,
flight: Flight,
settings: Settings,
start_time: datetime,
) -> None:
super().__init__(flight, settings)
self.start_time = start_time
@property
def start_type(self) -> StartType:
return self.flight.start_type
def on_game_tick(self, time: datetime, duration: timedelta) -> None:
if time < self.start_time:
return
new_state: FlightState
if self.start_type is StartType.COLD:
new_state = StartUp(self.flight, self.settings, time)
elif self.start_type is StartType.WARM:
new_state = Taxi(self.flight, self.settings, time)
elif self.start_type is StartType.RUNWAY:
new_state = Takeoff(self.flight, self.settings, time)
else:
new_state = InFlight(self.flight, self.settings, waypoint_index=0)
self.flight.set_state(new_state)
@property
def is_waiting_for_start(self) -> bool:
return True
def time_remaining(self, time: datetime) -> timedelta:
return self.start_time - time
@property
def spawn_type(self) -> StartType:
return self.flight.start_type