use crate::resources::Resource;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum ProgressModel {
#[default]
TurnBased,
TimeBased,
Manual,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResearchConfig {
pub allow_parallel_research: bool,
pub max_parallel_slots: usize,
pub progress_model: ProgressModel,
pub auto_advance: bool,
pub base_progress_per_turn: f32,
}
impl Resource for ResearchConfig {}
impl Default for ResearchConfig {
fn default() -> Self {
Self {
allow_parallel_research: false,
max_parallel_slots: 1,
progress_model: ProgressModel::TurnBased,
auto_advance: true,
base_progress_per_turn: 0.1, }
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_config() {
let config = ResearchConfig::default();
assert!(!config.allow_parallel_research);
assert_eq!(config.max_parallel_slots, 1);
assert_eq!(config.progress_model, ProgressModel::TurnBased);
assert!(config.auto_advance);
assert_eq!(config.base_progress_per_turn, 0.1);
}
#[test]
fn test_progress_model_default() {
assert_eq!(ProgressModel::default(), ProgressModel::TurnBased);
}
}