Spell turbulence correctly.

This commit is contained in:
SnappyComebacks 2022-11-18 16:22:26 -07:00
parent 1eccedb74d
commit 774eb48828
14 changed files with 91 additions and 91 deletions

View File

@ -10,7 +10,7 @@ Saves from 5.x are not compatible with 6.0.
* **[Mission Generation]** Reworked the ground object generation which now uses a new layout system * **[Mission Generation]** Reworked the ground object generation which now uses a new layout system
* **[Mission Generation]** Added information about the modulation (AM/FM) of the assigned frequencies to the kneeboard and assign AM modulation instead of FM for JTAC. * **[Mission Generation]** Added information about the modulation (AM/FM) of the assigned frequencies to the kneeboard and assign AM modulation instead of FM for JTAC.
* **[Mission Generation]** Adjusted wind speeds. Wind speeds at high altitude are generally higher now. * **[Mission Generation]** Adjusted wind speeds. Wind speeds at high altitude are generally higher now.
* **[Mission Generation]** Added turbulance. Higher in Summer and Winter, also higher at day time than at night time. * **[Mission Generation]** Added turbulence. Higher in Summer and Winter, also higher at day time than at night time.
* **[Factions]** Updated the Faction file structure. Older custom faction files will not work correctly and have to be updated to the new structure. * **[Factions]** Updated the Faction file structure. Older custom faction files will not work correctly and have to be updated to the new structure.
* **[Flight Planning]** Added preset formations for different flight types at hold, join, ingress, and split waypoints. Air to Air flights will tend toward line-abreast and spread-four formations. Air to ground flights will tend towards trail formation. * **[Flight Planning]** Added preset formations for different flight types at hold, join, ingress, and split waypoints. Air to Air flights will tend toward line-abreast and spread-four formations. Air to ground flights will tend towards trail formation.
* **[Flight Planning]** Added the ability to plan tankers for recovery on package flights. AI does not plan. * **[Flight Planning]** Added the ability to plan tankers for recovery on package flights. AI does not plan.

View File

@ -17,7 +17,7 @@ class EnvironmentGenerator:
def set_atmospheric(self, atmospheric: AtmosphericConditions) -> None: def set_atmospheric(self, atmospheric: AtmosphericConditions) -> None:
self.mission.weather.qnh = atmospheric.qnh.mm_hg self.mission.weather.qnh = atmospheric.qnh.mm_hg
self.mission.weather.season_temperature = atmospheric.temperature_celsius self.mission.weather.season_temperature = atmospheric.temperature_celsius
self.mission.weather.turbulence_at_ground = int(atmospheric.turbulance_per_10cm) self.mission.weather.turbulence_at_ground = int(atmospheric.turbulence_per_10cm)
def set_clouds(self, clouds: Optional[Clouds]) -> None: def set_clouds(self, clouds: Optional[Clouds]) -> None:
if clouds is None: if clouds is None:

View File

@ -401,7 +401,7 @@ class BriefingPage(KneeboardPage):
) )
writer.text(f"QNH: {qnh_in_hg} inHg / {qnh_mm_hg} mmHg / {qnh_hpa} hPa") writer.text(f"QNH: {qnh_in_hg} inHg / {qnh_mm_hg} mmHg / {qnh_hpa} hPa")
writer.text( writer.text(
f"Turbulance: {round(self.weather.atmospheric.turbulance_per_10cm)} per 10cm at ground level." f"Turbulence: {round(self.weather.atmospheric.turbulence_per_10cm)} per 10cm at ground level."
) )
fl = self.flight fl = self.flight

View File

@ -45,9 +45,9 @@ class SeasonalConditions:
winter_avg_temperature: float winter_avg_temperature: float
temperature_day_night_difference: float temperature_day_night_difference: float
high_avg_yearly_turbulance_per_10cm: float high_avg_yearly_turbulence_per_10cm: float
low_avg_yearly_turbulance_per_10cm: float low_avg_yearly_turbulence_per_10cm: float
solar_noon_turbulance_per_10cm: float solar_noon_turbulence_per_10cm: float
midnight_turbulance_per_10cm: float midnight_turbulence_per_10cm: float
weather_type_chances: dict[Season, WeatherTypeChances] weather_type_chances: dict[Season, WeatherTypeChances]

View File

@ -58,19 +58,19 @@ class SeasonData:
@dataclass(frozen=True) @dataclass(frozen=True)
class TurbulanceData: class TurbulenceData:
high_avg_yearly_turbulance_per_10cm: float | None high_avg_yearly_turbulence_per_10cm: float | None
low_avg_yearly_turbulance_per_10cm: float | None low_avg_yearly_turbulence_per_10cm: float | None
solar_noon_turbulance_per_10cm: float | None solar_noon_turbulence_per_10cm: float | None
midnight_turbulance_per_10cm: float | None midnight_turbulence_per_10cm: float | None
@staticmethod @staticmethod
def from_yaml(data: dict[str, Any]) -> TurbulanceData: def from_yaml(data: dict[str, Any]) -> TurbulenceData:
return TurbulanceData( return TurbulenceData(
data.get("high_avg_yearly_turbulance_per_10cm"), data.get("high_avg_yearly_turbulence_per_10cm"),
data.get("low_avg_yearly_turbulance_per_10cm"), data.get("low_avg_yearly_turbulence_per_10cm"),
data.get("solar_noon_turbulance_per_10cm"), data.get("solar_noon_turbulence_per_10cm"),
data.get("midnight_turbulance_per_10cm"), data.get("midnight_turbulence_per_10cm"),
) )
@ -130,7 +130,7 @@ class TheaterLoader:
spring = SeasonData.from_yaml(climate_data["seasons"]["spring"]) spring = SeasonData.from_yaml(climate_data["seasons"]["spring"])
summer = SeasonData.from_yaml(climate_data["seasons"]["summer"]) summer = SeasonData.from_yaml(climate_data["seasons"]["summer"])
fall = SeasonData.from_yaml(climate_data["seasons"]["fall"]) fall = SeasonData.from_yaml(climate_data["seasons"]["fall"])
turbulance = TurbulanceData.from_yaml(climate_data["turbulance"]) turbulence = TurbulenceData.from_yaml(climate_data["turbulence"])
if summer.average_pressure is None: if summer.average_pressure is None:
raise RuntimeError( raise RuntimeError(
f"{self.descriptor_path} does not define a summer average pressure" f"{self.descriptor_path} does not define a summer average pressure"
@ -147,21 +147,21 @@ class TheaterLoader:
raise RuntimeError( raise RuntimeError(
f"{self.descriptor_path} does not define a winter average temperature" f"{self.descriptor_path} does not define a winter average temperature"
) )
if turbulance.high_avg_yearly_turbulance_per_10cm is None: if turbulence.high_avg_yearly_turbulence_per_10cm is None:
raise RuntimeError( raise RuntimeError(
f"{self.descriptor_path} does not define a yearly average high turbulance" f"{self.descriptor_path} does not define a yearly average high turbulence"
) )
if turbulance.low_avg_yearly_turbulance_per_10cm is None: if turbulence.low_avg_yearly_turbulence_per_10cm is None:
raise RuntimeError( raise RuntimeError(
f"{self.descriptor_path} does not define a yearly average low turbulance" f"{self.descriptor_path} does not define a yearly average low turbulence"
) )
if turbulance.solar_noon_turbulance_per_10cm is None: if turbulence.solar_noon_turbulence_per_10cm is None:
raise RuntimeError( raise RuntimeError(
f"{self.descriptor_path} does not define a solar noon turbulance" f"{self.descriptor_path} does not define a solar noon turbulence"
) )
if turbulance.midnight_turbulance_per_10cm is None: if turbulence.midnight_turbulence_per_10cm is None:
raise RuntimeError( raise RuntimeError(
f"{self.descriptor_path} does not define a midnight turbulance" f"{self.descriptor_path} does not define a midnight turbulence"
) )
return SeasonalConditions( return SeasonalConditions(
summer.average_pressure, summer.average_pressure,
@ -169,10 +169,10 @@ class TheaterLoader:
summer.average_temperature, summer.average_temperature,
winter.average_temperature, winter.average_temperature,
climate_data["day_night_temperature_difference"], climate_data["day_night_temperature_difference"],
turbulance.high_avg_yearly_turbulance_per_10cm, turbulence.high_avg_yearly_turbulence_per_10cm,
turbulance.low_avg_yearly_turbulance_per_10cm, turbulence.low_avg_yearly_turbulence_per_10cm,
turbulance.solar_noon_turbulance_per_10cm, turbulence.solar_noon_turbulence_per_10cm,
turbulance.midnight_turbulance_per_10cm, turbulence.midnight_turbulence_per_10cm,
{ {
Season.Winter: winter.weather, Season.Winter: winter.weather,
Season.Spring: spring.weather, Season.Spring: spring.weather,

View File

@ -37,8 +37,8 @@ class AtmosphericConditions:
#: Temperature at sea level in Celcius. #: Temperature at sea level in Celcius.
temperature_celsius: float temperature_celsius: float
#: Turbulance per 10 cm. #: Turbulence per 10 cm.
turbulance_per_10cm: float turbulence_per_10cm: float
@dataclass(frozen=True) @dataclass(frozen=True)
@ -112,22 +112,22 @@ class Weather:
day, day,
) )
seasonal_turbulance = self.interpolate_seasonal_turbulance( seasonal_turbulence = self.interpolate_seasonal_turbulence(
seasonal_conditions.high_avg_yearly_turbulance_per_10cm, seasonal_conditions.high_avg_yearly_turbulence_per_10cm,
seasonal_conditions.low_avg_yearly_turbulance_per_10cm, seasonal_conditions.low_avg_yearly_turbulence_per_10cm,
day, day,
) )
day_turbulance = seasonal_conditions.solar_noon_turbulance_per_10cm day_turbulence = seasonal_conditions.solar_noon_turbulence_per_10cm
night_turbulance = seasonal_conditions.midnight_turbulance_per_10cm night_turbulence = seasonal_conditions.midnight_turbulence_per_10cm
time_of_day_turbulance = self.interpolate_solar_activity( time_of_day_turbulence = self.interpolate_solar_activity(
time_of_day, day_turbulance, night_turbulance time_of_day, day_turbulence, night_turbulence
) )
random_turbulance = random.normalvariate(mu=0, sigma=0.5) random_turbulence = random.normalvariate(mu=0, sigma=0.5)
turbulance = abs( turbulence = abs(
seasonal_turbulance + time_of_day_turbulance + random_turbulance seasonal_turbulence + time_of_day_turbulence + random_turbulence
) )
if time_of_day == TimeOfDay.Day: if time_of_day == TimeOfDay.Day:
@ -136,14 +136,14 @@ class Weather:
temperature -= seasonal_conditions.temperature_day_night_difference / 2 temperature -= seasonal_conditions.temperature_day_night_difference / 2
pressure += self.pressure_adjustment pressure += self.pressure_adjustment
temperature += self.temperature_adjustment temperature += self.temperature_adjustment
turbulance += self.turbulance_adjustment turbulence += self.turbulence_adjustment
logging.debug( logging.debug(
"Weather: Before random: temp {} press {}".format(temperature, pressure) "Weather: Before random: temp {} press {}".format(temperature, pressure)
) )
conditions = AtmosphericConditions( conditions = AtmosphericConditions(
qnh=self.random_pressure(pressure), qnh=self.random_pressure(pressure),
temperature_celsius=self.random_temperature(temperature), temperature_celsius=self.random_temperature(temperature),
turbulance_per_10cm=turbulance, turbulence_per_10cm=turbulence,
) )
logging.debug( logging.debug(
"Weather: After random: temp {} press {}".format( "Weather: After random: temp {} press {}".format(
@ -161,7 +161,7 @@ class Weather:
raise NotImplementedError raise NotImplementedError
@property @property
def turbulance_adjustment(self) -> float: def turbulence_adjustment(self) -> float:
raise NotImplementedError raise NotImplementedError
def generate_clouds(self) -> Optional[Clouds]: def generate_clouds(self) -> Optional[Clouds]:
@ -272,7 +272,7 @@ class Weather:
return interpolate(summer_value, winter_value, winter_factor, clamp=True) return interpolate(summer_value, winter_value, winter_factor, clamp=True)
@staticmethod @staticmethod
def interpolate_seasonal_turbulance( def interpolate_seasonal_turbulence(
high_value: float, low_value: float, day: datetime.date high_value: float, low_value: float, day: datetime.date
) -> float: ) -> float:
day_of_year = day.timetuple().tm_yday day_of_year = day.timetuple().tm_yday
@ -318,7 +318,7 @@ class ClearSkies(Weather):
return 3.0 return 3.0
@property @property
def turbulance_adjustment(self) -> float: def turbulence_adjustment(self) -> float:
return 0.3 return 0.3
def generate_clouds(self) -> Optional[Clouds]: def generate_clouds(self) -> Optional[Clouds]:
@ -341,7 +341,7 @@ class Cloudy(Weather):
return 0.0 return 0.0
@property @property
def turbulance_adjustment(self) -> float: def turbulence_adjustment(self) -> float:
return 0.6 return 0.6
def generate_clouds(self) -> Optional[Clouds]: def generate_clouds(self) -> Optional[Clouds]:
@ -365,7 +365,7 @@ class Raining(Weather):
return -3.0 return -3.0
@property @property
def turbulance_adjustment(self) -> float: def turbulence_adjustment(self) -> float:
return 0.9 return 0.9
def generate_clouds(self) -> Optional[Clouds]: def generate_clouds(self) -> Optional[Clouds]:
@ -389,7 +389,7 @@ class Thunderstorm(Weather):
return -3.0 return -3.0
@property @property
def turbulance_adjustment(self) -> float: def turbulence_adjustment(self) -> float:
return 1.2 return 1.2
def generate_clouds(self) -> Optional[Clouds]: def generate_clouds(self) -> Optional[Clouds]:

View File

@ -37,8 +37,8 @@ climate:
raining: 30 raining: 30
cloudy: 50 cloudy: 50
clear: 20 clear: 20
turbulance: turbulence:
high_avg_yearly_turbulance_per_10cm: 4 high_avg_yearly_turbulence_per_10cm: 4
low_avg_yearly_turbulance_per_10cm: 1 low_avg_yearly_turbulence_per_10cm: 1
solar_noon_turbulance_per_10cm: 1 solar_noon_turbulence_per_10cm: 1
midnight_turbulance_per_10cm: 0 midnight_turbulence_per_10cm: 0

View File

@ -46,8 +46,8 @@ climate:
raining: 30 raining: 30
cloudy: 45 cloudy: 45
clear: 25 clear: 25
turbulance: turbulence:
high_avg_yearly_turbulance_per_10cm: 9 high_avg_yearly_turbulence_per_10cm: 9
low_avg_yearly_turbulance_per_10cm: 3 low_avg_yearly_turbulence_per_10cm: 3
solar_noon_turbulance_per_10cm: 2 solar_noon_turbulence_per_10cm: 2
midnight_turbulance_per_10cm: 0 midnight_turbulence_per_10cm: 0

View File

@ -38,8 +38,8 @@ climate:
raining: 45 raining: 45
cloudy: 30 cloudy: 30
clear: 20 clear: 20
turbulance: turbulence:
high_avg_yearly_turbulance_per_10cm: 3 high_avg_yearly_turbulence_per_10cm: 3
low_avg_yearly_turbulance_per_10cm: 1 low_avg_yearly_turbulence_per_10cm: 1
solar_noon_turbulance_per_10cm: 2 solar_noon_turbulence_per_10cm: 2
midnight_turbulance_per_10cm: 1 midnight_turbulence_per_10cm: 1

View File

@ -37,8 +37,8 @@ climate:
raining: 10 raining: 10
cloudy: 45 cloudy: 45
clear: 45 clear: 45
turbulance: turbulence:
high_avg_yearly_turbulance_per_10cm: 9 high_avg_yearly_turbulence_per_10cm: 9
low_avg_yearly_turbulance_per_10cm: 1 low_avg_yearly_turbulence_per_10cm: 1
solar_noon_turbulance_per_10cm: 6 solar_noon_turbulence_per_10cm: 6
midnight_turbulance_per_10cm: 0 midnight_turbulence_per_10cm: 0

View File

@ -37,8 +37,8 @@ climate:
raining: 30 raining: 30
cloudy: 50 cloudy: 50
clear: 20 clear: 20
turbulance: turbulence:
high_avg_yearly_turbulance_per_10cm: 5 high_avg_yearly_turbulence_per_10cm: 5
low_avg_yearly_turbulance_per_10cm: 2 low_avg_yearly_turbulence_per_10cm: 2
solar_noon_turbulance_per_10cm: 3 solar_noon_turbulence_per_10cm: 3
midnight_turbulance_per_10cm: 1 midnight_turbulence_per_10cm: 1

View File

@ -38,8 +38,8 @@ climate:
raining: 2 raining: 2
cloudy: 28 cloudy: 28
clear: 70 clear: 70
turbulance: turbulence:
high_avg_yearly_turbulance_per_10cm: 8 high_avg_yearly_turbulence_per_10cm: 8
low_avg_yearly_turbulance_per_10cm: 1 low_avg_yearly_turbulence_per_10cm: 1
solar_noon_turbulance_per_10cm: 5 solar_noon_turbulence_per_10cm: 5
midnight_turbulance_per_10cm: 0 midnight_turbulence_per_10cm: 0

View File

@ -37,8 +37,8 @@ climate:
raining: 15 raining: 15
cloudy: 35 cloudy: 35
clear: 50 clear: 50
turbulance: turbulence:
high_avg_yearly_turbulance_per_10cm: 7 high_avg_yearly_turbulence_per_10cm: 7
low_avg_yearly_turbulance_per_10cm: 2 low_avg_yearly_turbulence_per_10cm: 2
solar_noon_turbulance_per_10cm: 4 solar_noon_turbulence_per_10cm: 4
midnight_turbulance_per_10cm: 1 midnight_turbulence_per_10cm: 1

View File

@ -38,8 +38,8 @@ climate:
raining: 30 raining: 30
cloudy: 50 cloudy: 50
clear: 20 clear: 20
turbulance: turbulence:
high_avg_yearly_turbulance_per_10cm: 5 high_avg_yearly_turbulence_per_10cm: 5
low_avg_yearly_turbulance_per_10cm: 2 low_avg_yearly_turbulence_per_10cm: 2
solar_noon_turbulance_per_10cm: 3 solar_noon_turbulence_per_10cm: 3
midnight_turbulance_per_10cm: 1 midnight_turbulence_per_10cm: 1