aboutsummaryrefslogtreecommitdiff
path: root/server/data/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/data/src/lib.rs')
-rw-r--r--server/data/src/lib.rs32
1 files changed, 16 insertions, 16 deletions
diff --git a/server/data/src/lib.rs b/server/data/src/lib.rs
index fa078643..86dec209 100644
--- a/server/data/src/lib.rs
+++ b/server/data/src/lib.rs
@@ -17,15 +17,15 @@
*/
pub mod book;
-pub mod demands;
pub mod entities;
+pub mod filter_demands;
pub mod index;
use anyhow::{Result, anyhow, bail};
use clap::Parser;
-use demands::generate_demands;
+use filter_demands::filter_demands_and_recipes;
use hurrycurry_protocol::{
- Gamedata, ItemIndex, MapMetadata, Recipe, TileIndex,
+ Demand, Gamedata, ItemIndex, MapMetadata, Recipe, TileIndex,
book::Book,
glam::{IVec2, Vec2},
};
@@ -134,8 +134,8 @@ fn build_data(
) -> Result<(Gamedata, Serverdata)> {
let reg = ItemTileRegistry::default();
let mut recipes = Vec::new();
+ let mut demands = Vec::new();
let mut entities = Vec::new();
- let mut raw_demands = Vec::new();
let mut recipe_groups = BTreeMap::<String, BTreeSet<ItemIndex>>::new();
for mut r in recipes_in {
@@ -186,11 +186,12 @@ fn build_data(
outputs: [outputs.next(), outputs.next()],
});
}
- RecipeDeclAction::Demand => raw_demands.push((
- inputs.next().ok_or(anyhow!("demand needs inputs"))?,
- outputs.next(),
- r.duration.unwrap_or(10.),
- )),
+ RecipeDeclAction::Demand => demands.push(Demand {
+ input: inputs.next().ok_or(anyhow!("demand needs inputs"))?,
+ output: outputs.next(),
+ duration: r.duration.unwrap_or(10.),
+ points: 0, // assigned later when filtering
+ }),
}
assert_eq!(inputs.next(), None, "{r2:?} inputs left over");
assert_eq!(outputs.next(), None, "{r2:?} outputs left over");
@@ -257,17 +258,20 @@ fn build_data(
}
}
+ let chef_spawn = chef_spawn.ok_or(anyhow!("map has no chef spawn"))?;
+
for tile in tile_specs.values() {
if !tiles_used.contains(&reg.register_tile(tile.tile_name.clone())) {
bail!("tile {:?} is unused", tile.tile_name)
}
}
- let chef_spawn = chef_spawn.ok_or(anyhow!("map has no chef spawn"))?;
-
entities.extend(map_in.entities.clone());
+ for e in &entities {
+ e.run_register(&reg);
+ }
- let demands = generate_demands(&tiles_used, &items_used, &raw_demands, &recipes);
+ filter_demands_and_recipes(&tiles_used, &items_used, &mut demands, &mut recipes);
let mut maps = maps
.iter()
@@ -295,10 +299,6 @@ fn build_data(
}
}
- for e in &entities {
- e.run_register(&reg);
- }
-
let item_names = reg.items.into_inner().unwrap();
let tile_names = reg.tiles.into_inner().unwrap();