From 5f5fe0c149935898d77c350fa3351c5af77becc1 Mon Sep 17 00:00:00 2001 From: hal8174 Date: Sat, 1 Mar 2025 22:31:35 +0100 Subject: [PATCH] Add multistation to factory --- .../factory_graph_black_science.yml | 4 +- .../factory_graph_blue_science.yml | 2 - .../factory_graph_fast_inserter.yml | 2 - .../factory_graph_green_science.yml | 2 - .../factory_graph_inserter.yml | 2 - factorio-blueprint-generator/src/factory.rs | 110 ++++++++++++++---- .../src/multistation.rs | 2 +- factorio-pathfinding/src/belt_finding/mod.rs | 20 ++-- 8 files changed, 98 insertions(+), 46 deletions(-) diff --git a/factorio-blueprint-generator/factory_graph_black_science.yml b/factorio-blueprint-generator/factory_graph_black_science.yml index d728e76..8bea6f5 100644 --- a/factorio-blueprint-generator/factory_graph_black_science.yml +++ b/factorio-blueprint-generator/factory_graph_black_science.yml @@ -16,12 +16,10 @@ subfactories: machines: 32 machine: assembly-machine-3 - !SubFactory - recipe: wall + recipe: stone-wall machines: 4 machine: assembly-machine-3 - !ExternalConnection - inputs: 1 - outputs: 6 factory_connections: - item: military-science-pack amount: 10 diff --git a/factorio-blueprint-generator/factory_graph_blue_science.yml b/factorio-blueprint-generator/factory_graph_blue_science.yml index 9f5808a..c4296b0 100644 --- a/factorio-blueprint-generator/factory_graph_blue_science.yml +++ b/factorio-blueprint-generator/factory_graph_blue_science.yml @@ -40,8 +40,6 @@ subfactories: machines: 10 machine: assembly-machine-3 - !ExternalConnection - inputs: 1 - outputs: 10 - !Splitter - !Splitter - !Splitter diff --git a/factorio-blueprint-generator/factory_graph_fast_inserter.yml b/factorio-blueprint-generator/factory_graph_fast_inserter.yml index bb2ec2e..73860d3 100644 --- a/factorio-blueprint-generator/factory_graph_fast_inserter.yml +++ b/factorio-blueprint-generator/factory_graph_fast_inserter.yml @@ -22,8 +22,6 @@ subfactories: machine: assembly-machine-3 - !SideLoader - !ExternalConnection - inputs: 1 - outputs: 8 - !SideLoader factory_connections: - item: iron-gear-wheel diff --git a/factorio-blueprint-generator/factory_graph_green_science.yml b/factorio-blueprint-generator/factory_graph_green_science.yml index de73b59..0c945cf 100644 --- a/factorio-blueprint-generator/factory_graph_green_science.yml +++ b/factorio-blueprint-generator/factory_graph_green_science.yml @@ -24,8 +24,6 @@ subfactories: machines: 6 machine: assembly-machine-3 - !ExternalConnection - inputs: 1 - outputs: 5 - !Splitter factory_connections: - item: logistic-science-pack diff --git a/factorio-blueprint-generator/factory_graph_inserter.yml b/factorio-blueprint-generator/factory_graph_inserter.yml index 4f2fb3c..6505b00 100644 --- a/factorio-blueprint-generator/factory_graph_inserter.yml +++ b/factorio-blueprint-generator/factory_graph_inserter.yml @@ -16,8 +16,6 @@ subfactories: machines: 6 machine: assembly-machine-3 - !ExternalConnection - inputs: 1 - outputs: 5 factory_connections: - item: iron-gear-wheel amount: 15 diff --git a/factorio-blueprint-generator/src/factory.rs b/factorio-blueprint-generator/src/factory.rs index b9b797e..865e36f 100644 --- a/factorio-blueprint-generator/src/factory.rs +++ b/factorio-blueprint-generator/src/factory.rs @@ -7,7 +7,10 @@ use factorio_pathfinding::Pathfinder; use rand::{Rng, SeedableRng, seq::IndexedRandom}; use serde::{Deserialize, Serialize}; -use crate::assembly::assembly_line_2_input; +use crate::{ + assembly::assembly_line_2_input, + multistation::{StationSpec, multistation}, +}; #[derive(Debug, Serialize, Deserialize, Clone)] pub struct FactoryGraph { @@ -22,10 +25,7 @@ pub enum Building { machines: usize, machine: String, }, - ExternalConnection { - inputs: usize, - outputs: usize, - }, + ExternalConnection, Splitter, SideLoader, } @@ -59,8 +59,9 @@ pub fn generate_factory { - let step = 4; - let static_input_offset = static_input.len(); - let static_output_offset = static_output.len(); - static_input.extend((0..*inputs).map(|y| Interface { - offset: Position::new( - 0, - step * (y + static_input_offset + static_output_offset) as PositionType, - ), - dir: Direction::Left, + Building::ExternalConnection => { + let step = 1; + // static_input.extend((0..*inputs).map(|y| Interface { + // offset: Position::new( + // -1, + // step * (y + static_input_offset + static_output_offset) as PositionType, + // ), + // dir: Direction::Left, + // })); + // static_output.extend((0..*outputs).map(|y| Interface { + // offset: Position::new( + // -1, + // step * (y + static_input_offset + static_output_offset + inputs) + // as PositionType, + // ), + // dir: Direction::Right, + // })); + + station_spec.extend(input_connections.iter().map(|&(_, c)| StationSpec { + locomotives: 2, + wagons: 4, + load: true, + beltspeed: Beltspeed::from_items_per_second(c.amount), + lanes: 1, })); - static_output.extend((0..*outputs).map(|y| Interface { - offset: Position::new( - 0, - step * (y + static_input_offset + static_output_offset + inputs) - as PositionType, - ), - dir: Direction::Right, + station_spec.extend(output_connections.iter().map(|&(_, c)| StationSpec { + locomotives: 2, + wagons: 4, + load: false, + beltspeed: Beltspeed::from_items_per_second(c.amount), + lanes: 1, })); + intermediate_connections.push(IntermediateConnection { input: input_connections .iter() @@ -301,6 +316,8 @@ pub fn generate_factory>(), }); + static_input_offset += input_connections.len(); + static_output_offset += output_connections.len(); } Building::SideLoader => { let mut blueprint = Blueprint::new(); @@ -449,6 +466,44 @@ pub fn generate_factory { let penalty = self.map.get(next.x as usize, next.y as usize).weight; match num { 0 => Some(((next, node.1), 1.5 + penalty)), - 1 => Some(((next, node.1.counter_clockwise()), 1.5 + penalty)), - 2 => Some(((next, node.1.clockwise()), 1.5 + penalty)), + 1 => Some(((next, node.1.counter_clockwise()), 2.0 + penalty)), + 2 => Some(((next, node.1.clockwise()), 2.0 + penalty)), _ => { let mut count = 2; for l in 2..=6 {