mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
61 lines
1.7 KiB
Python
61 lines
1.7 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
|
|
|
|
@property
|
|
def description(self) -> str:
|
|
return f"Waiting for startup at {self.start_time:%H:%M:%S}"
|