Add option to only generate night missions (#36)

Replaces the existing checkbox to disable night missions with a selector that allows you to choose between Day/Night/Day&Night
This commit is contained in:
MetalStormGhost 2022-12-13 20:08:56 +02:00 committed by GitHub
parent 608525d5b4
commit 7d2dd0bcbe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 7 deletions

View File

@ -12,6 +12,7 @@
* **[Mission Generation]** Use Escort & SEAD tasks for Escort & SEAD Escort flights * **[Mission Generation]** Use Escort & SEAD tasks for Escort & SEAD Escort flights
* **[Mission Generation]** Variable flight-size (2/3/4-ship) for * **[Mission Generation]** Variable flight-size (2/3/4-ship) for
BAI/ANTISHIP/DEAD/STRIKE/BARCAP/CAS/OCA/AIR-ASSAULT (main) missions BAI/ANTISHIP/DEAD/STRIKE/BARCAP/CAS/OCA/AIR-ASSAULT (main) missions
* **[Mission Generation]** Add option to only generate night missions
* **[Modding]** Support for F-15D 'Baz' mod version 1.0 * **[Modding]** Support for F-15D 'Baz' mod version 1.0
* **[Modding]** Support for Su-30 mod version 2.01B * **[Modding]** Support for Su-30 mod version 2.01B
* **[Modding]** Support for A-6A Intruder version 2.7.5.01 * **[Modding]** Support for A-6A Intruder version 2.7.5.01

View File

@ -14,6 +14,7 @@ from .minutesoption import minutes_option
from .optiondescription import OptionDescription, SETTING_DESCRIPTION_KEY from .optiondescription import OptionDescription, SETTING_DESCRIPTION_KEY
from .skilloption import skill_option from .skilloption import skill_option
from ..ato.starttype import StartType from ..ato.starttype import StartType
from ..weather import NightMissions
@unique @unique
@ -105,11 +106,16 @@ class Settings:
section=MISSION_DIFFICULTY_SECTION, section=MISSION_DIFFICULTY_SECTION,
default=True, default=True,
) )
night_disabled: bool = boolean_option( night_day_missions: NightMissions = choices_option(
"No night missions", "Night/day mission options",
page=DIFFICULTY_PAGE, page=DIFFICULTY_PAGE,
section=MISSION_DIFFICULTY_SECTION, section=MISSION_DIFFICULTY_SECTION,
default=False, choices={
"Generate night and day missions": NightMissions.DayAndNight,
"Only generate day missions": NightMissions.OnlyDay,
"Only generate night missions": NightMissions.OnlyNight,
},
default=NightMissions.DayAndNight,
) )
# Mission Restrictions # Mission Restrictions
labels: str = choices_option( labels: str = choices_option(

View File

@ -5,6 +5,7 @@ import logging
import math import math
import random import random
from dataclasses import dataclass, field from dataclasses import dataclass, field
from enum import Enum
from typing import Optional, TYPE_CHECKING from typing import Optional, TYPE_CHECKING
from dcs.cloud_presets import Clouds as PydcsClouds from dcs.cloud_presets import Clouds as PydcsClouds
@ -28,6 +29,12 @@ if TYPE_CHECKING:
from game.theater.seasonalconditions import SeasonalConditions from game.theater.seasonalconditions import SeasonalConditions
class NightMissions(Enum):
DayAndNight = "nightmissions_nightandday"
OnlyDay = "nightmissions_onlyday"
OnlyNight = "nightmissions_onlynight"
@dataclass(frozen=True) @dataclass(frozen=True)
class AtmosphericConditions: class AtmosphericConditions:
#: Pressure at sea level. #: Pressure at sea level.
@ -424,7 +431,7 @@ class Conditions:
_start_time = datetime.datetime.combine(day, forced_time) _start_time = datetime.datetime.combine(day, forced_time)
else: else:
_start_time = cls.generate_start_time( _start_time = cls.generate_start_time(
theater, day, time_of_day, settings.night_disabled theater, day, time_of_day, settings.night_day_missions
) )
return cls( return cls(
@ -439,11 +446,11 @@ class Conditions:
theater: ConflictTheater, theater: ConflictTheater,
day: datetime.date, day: datetime.date,
time_of_day: TimeOfDay, time_of_day: TimeOfDay,
night_disabled: bool, night_day_missions: NightMissions,
) -> datetime.datetime: ) -> datetime.datetime:
if night_disabled: from game.theater import DaytimeMap
from game.theater import DaytimeMap
if night_day_missions == NightMissions.OnlyDay:
logging.info("Skip Night mission due to user settings") logging.info("Skip Night mission due to user settings")
time_range = DaytimeMap( time_range = DaytimeMap(
dawn=(datetime.time(hour=8), datetime.time(hour=9)), dawn=(datetime.time(hour=8), datetime.time(hour=9)),
@ -451,6 +458,14 @@ class Conditions:
dusk=(datetime.time(hour=12), datetime.time(hour=14)), dusk=(datetime.time(hour=12), datetime.time(hour=14)),
night=(datetime.time(hour=14), datetime.time(hour=17)), night=(datetime.time(hour=14), datetime.time(hour=17)),
).range_of(time_of_day) ).range_of(time_of_day)
elif night_day_missions == NightMissions.OnlyNight:
logging.info("Skip Day mission due to user settings")
time_range = DaytimeMap(
dawn=(datetime.time(hour=0), datetime.time(hour=3)),
day=(datetime.time(hour=3), datetime.time(hour=6)),
dusk=(datetime.time(hour=21), datetime.time(hour=22)),
night=(datetime.time(hour=22), datetime.time(hour=23)),
).range_of(time_of_day)
else: else:
time_range = theater.daytime_map.range_of(time_of_day) time_range = theater.daytime_map.range_of(time_of_day)