fish_lib/data/
season_data.rs

1use crate::utils::math::float_interpolate;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
5pub struct SeasonData {
6    pub min_temp_c: f32,
7    pub max_temp_c: f32,
8    /// How big the rain intensity has to be for rain to start
9    #[serde(default = "default_rain_intensity_raining_threshold")]
10    pub rain_intensity_raining_threshold: f32,
11    /// How big the humidity has to be for rain to start
12    #[serde(default = "default_moisture_raining_threshold")]
13    pub moisture_raining_threshold: f32,
14    /// How big the cloudiness has to be for rain to start
15    #[serde(default = "default_cloudiness_raining_threshold")]
16    pub cloudiness_raining_threshold: f32,
17}
18
19fn default_rain_intensity_raining_threshold() -> f32 {
20    0.4
21}
22
23fn default_moisture_raining_threshold() -> f32 {
24    0.75
25}
26
27fn default_cloudiness_raining_threshold() -> f32 {
28    0.6
29}
30
31impl SeasonData {
32    pub fn interpolate(&self, next_data: &SeasonData, progress: f32) -> Self {
33        Self {
34            min_temp_c: float_interpolate(self.min_temp_c, next_data.min_temp_c, progress),
35            max_temp_c: float_interpolate(self.max_temp_c, next_data.max_temp_c, progress),
36            rain_intensity_raining_threshold: float_interpolate(
37                self.rain_intensity_raining_threshold,
38                next_data.rain_intensity_raining_threshold,
39                progress,
40            ),
41            moisture_raining_threshold: float_interpolate(
42                self.moisture_raining_threshold,
43                next_data.moisture_raining_threshold,
44                progress,
45            ),
46            cloudiness_raining_threshold: float_interpolate(
47                self.cloudiness_raining_threshold,
48                next_data.cloudiness_raining_threshold,
49                progress,
50            ),
51        }
52    }
53}