diff options
Diffstat (limited to 'server/data/src/lib.rs')
| -rw-r--r-- | server/data/src/lib.rs | 32 |
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(®.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(®); + } - 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(®); - } - let item_names = reg.items.into_inner().unwrap(); let tile_names = reg.tiles.into_inner().unwrap(); |