aboutsummaryrefslogtreecommitdiff
path: root/server/src/data
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/data')
-rw-r--r--server/src/data/mod.rs57
1 files changed, 26 insertions, 31 deletions
diff --git a/server/src/data/mod.rs b/server/src/data/mod.rs
index 91b32a42..39684c6f 100644
--- a/server/src/data/mod.rs
+++ b/server/src/data/mod.rs
@@ -34,6 +34,7 @@ use std::{
path::PathBuf,
str::FromStr,
sync::{Mutex, RwLock},
+ time::Duration,
};
use tokio::fs::read_to_string;
@@ -48,44 +49,34 @@ pub enum RecipeDeclAction {
Demand,
}
+#[rustfmt::skip]
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RecipeDecl {
- #[serde(default)]
- tile: Option<String>,
- #[serde(default)]
- inputs: Vec<String>,
- #[serde(default)]
- outputs: Vec<String>,
- #[serde(default)]
- action: RecipeDeclAction,
- #[serde(default)]
- warn: bool,
- #[serde(default)]
- revert_duration: Option<f32>,
- #[serde(default)]
- duration: Option<f32>,
- #[serde(default)]
- points: Option<i64>,
+ #[serde(default)] tile: Option<String>,
+ #[serde(default)] inputs: Vec<String>,
+ #[serde(default)] outputs: Vec<String>,
+ #[serde(default)] action: RecipeDeclAction,
+ #[serde(default)] warn: bool,
+ #[serde(default)] revert_duration: Option<f32>,
+ #[serde(default)] duration: Option<f32>,
+ #[serde(default)] points: Option<i64>,
}
+#[rustfmt::skip]
#[derive(Debug, Clone, Deserialize)]
pub struct MapDecl {
- #[serde(default)]
- recipes: Option<String>,
+ #[serde(default)] recipes: Option<String>,
map: Vec<String>,
tiles: HashMap<char, String>,
- #[serde(default)]
- items: HashMap<char, String>,
+ #[serde(default)] items: HashMap<char, String>,
collider: Vec<String>,
walkable: Vec<String>,
chef_spawn: char,
customer_spawn: char,
- #[serde(default)]
- entities: Vec<EntityDecl>,
- #[serde(default)]
- tile_entities: HashMap<char, EntityDecl>,
- #[serde(default)]
- score_baseline: i64,
+ #[serde(default)] entities: Vec<EntityDecl>,
+ #[serde(default)] tile_entities: HashMap<char, EntityDecl>,
+ #[serde(default)] score_baseline: i64,
+ #[serde(default)] default_timer: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -103,6 +94,7 @@ pub struct Serverdata {
pub chef_spawn: Vec2,
pub customer_spawn: Vec2,
pub score_baseline: i64,
+ pub default_timer: Option<Duration>
}
#[derive(Debug, Deserialize, Default)]
@@ -150,11 +142,7 @@ impl DataIndex {
let map_in: MapDecl = serde_yml::from_str(&self.read_map(map).await?)?;
let recipes_in = serde_yml::from_str(
&self
- .read_recipes(
- map_in
- .recipes.as_deref()
- .unwrap_or("default"),
- )
+ .read_recipes(map_in.recipes.as_deref().unwrap_or("default"))
.await?,
)?;
build_data(&self.maps, map.to_string(), map_in, recipes_in)
@@ -293,6 +281,12 @@ pub fn build_data(
.map(|i| !map_in.collider.contains(i) && !map_in.walkable.contains(i))
.collect();
+ let default_timer = if map_name.ends_with("lobby") {
+ None
+ } else {
+ Some(Duration::from_secs(map_in.default_timer.unwrap_or(420)))
+ };
+
Ok((
Gamedata {
bot_algos,
@@ -309,6 +303,7 @@ pub fn build_data(
initial_map,
chef_spawn,
customer_spawn,
+ default_timer,
score_baseline: map_in.score_baseline,
},
entities,