fish_lib/data/
season_data.rs1use 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 #[serde(default = "default_rain_intensity_raining_threshold")]
10 pub rain_intensity_raining_threshold: f32,
11 #[serde(default = "default_moisture_raining_threshold")]
13 pub moisture_raining_threshold: f32,
14 #[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}