From 618d9ca9de7ed4087f4151ea220da01d10967eaa Mon Sep 17 00:00:00 2001 From: hal8174 Date: Tue, 1 Apr 2025 18:56:28 +0200 Subject: [PATCH] Improve automatic splitter --- factorio-blueprint-generator/src/factory.rs | 58 ++++++++++++++------- factorio-blueprint/src/abstraction.rs | 21 ++++++++ 2 files changed, 60 insertions(+), 19 deletions(-) diff --git a/factorio-blueprint-generator/src/factory.rs b/factorio-blueprint-generator/src/factory.rs index 15a2f5c..3099c5e 100644 --- a/factorio-blueprint-generator/src/factory.rs +++ b/factorio-blueprint-generator/src/factory.rs @@ -449,22 +449,6 @@ pub fn generate_factory { - let mut blueprint = Blueprint::new(); - blueprint.add_entity(Entity::new_splitter_with_priority( - Beltspeed::from_items_per_second( - input_connections - .iter() - .chain(output_connections.iter()) - .map(|&(_, c)| c.amount) - .max_by(|x, y| x.partial_cmp(y).unwrap()) - .unwrap_or(1.0), - ), - Position::new(2, 1), - Direction::Up, - None, - Some(true), - )); - let macro_block = MacroBlock { size: Position::new(2, 1), input: vec![ @@ -514,7 +498,7 @@ pub fn generate_factory, output_priority_left: Option, + filter: Option, }, ElectricPole(ElectricPoleType), Inserter { @@ -212,6 +213,7 @@ impl Entity { beltspeed, input_priority_left: None, output_priority_left: None, + filter: None, }, position, direction, @@ -224,12 +226,14 @@ impl Entity { direction: Direction, input_priority_left: Option, output_priority_left: Option, + filter: Option, ) -> Self { Self::new( EntityType::Splitter { beltspeed, input_priority_left, output_priority_left, + filter, }, position, direction, @@ -321,6 +325,7 @@ impl Entity { beltspeed, input_priority_left: _, output_priority_left: _, + filter: _, } => beltspeed.string_splitter(), EntityType::Unknown { name, @@ -379,6 +384,7 @@ impl Entity { beltspeed: _, input_priority_left, output_priority_left: _, + filter: _, } => match input_priority_left { Some(true) => Some("left".to_string()), Some(false) => Some("right".to_string()), @@ -394,6 +400,7 @@ impl Entity { beltspeed: _, input_priority_left: _, output_priority_left, + filter: _, } => match output_priority_left { Some(true) => Some("left".to_string()), Some(false) => Some("right".to_string()), @@ -402,6 +409,19 @@ impl Entity { _ => None, } } + + pub fn get_maybe_filter(&self) -> Option { + match &self.entity { + EntityType::Splitter { + beltspeed: _, + input_priority_left: _, + output_priority_left: _, + filter, + } => filter.clone(), + _ => None, + } + } + pub fn size(&self) -> Position { match &self.entity { EntityType::Splitter { .. } => Position::new(4, 2), @@ -631,6 +651,7 @@ impl Blueprint { .maybe_recipe(e.get_maybe_recipe()) .maybe_input_priority(e.get_maybe_input_priority()) .maybe_output_priority(e.get_maybe_output_priority()) + .maybe_filter(e.get_maybe_filter()) .build() }) .collect();