use crate::components::{FloorPosition, Orientation};
use crate::dispatch::{BuiltinReposition, BuiltinStrategy};
use crate::stop::{StopConfig, StopId};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SimConfig {
pub building: BuildingConfig,
#[serde(default)]
pub elevators: Vec<ElevatorConfig>,
pub simulation: SimulationParams,
pub passenger_spawning: PassengerSpawnConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BuildingConfig {
pub name: String,
pub stops: Vec<StopConfig>,
#[serde(default)]
pub lines: Option<Vec<LineConfig>>,
#[serde(default)]
pub groups: Option<Vec<GroupConfig>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ElevatorConfig {
pub id: u32,
pub name: String,
pub max_speed: f64,
pub acceleration: f64,
pub deceleration: f64,
pub weight_capacity: f64,
pub starting_stop: StopId,
pub door_open_ticks: u32,
pub door_transition_ticks: u32,
#[serde(default)]
pub restricted_stops: Vec<StopId>,
#[cfg(feature = "energy")]
#[serde(default)]
pub energy_profile: Option<crate::energy::EnergyProfile>,
#[serde(default)]
pub service_mode: Option<crate::components::ServiceMode>,
#[serde(default = "default_inspection_speed_factor")]
pub inspection_speed_factor: f64,
}
const fn default_inspection_speed_factor() -> f64 {
0.25
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SimulationParams {
pub ticks_per_second: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PassengerSpawnConfig {
pub mean_interval_ticks: u32,
pub weight_range: (f64, f64),
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LineConfig {
pub id: u32,
pub name: String,
pub serves: Vec<StopId>,
pub elevators: Vec<ElevatorConfig>,
#[serde(default)]
pub orientation: Orientation,
#[serde(default)]
pub position: Option<FloorPosition>,
#[serde(default)]
pub min_position: Option<f64>,
#[serde(default)]
pub max_position: Option<f64>,
#[serde(default)]
pub max_cars: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GroupConfig {
pub id: u32,
pub name: String,
pub lines: Vec<u32>,
pub dispatch: BuiltinStrategy,
#[serde(default)]
pub reposition: Option<BuiltinReposition>,
}