Use StationSpec for basic station
This commit is contained in:
		
							parent
							
								
									7f563b37a4
								
							
						
					
					
						commit
						a98e2cfb2b
					
				
					 4 changed files with 63 additions and 60 deletions
				
			
		|  | @ -1,6 +1,9 @@ | ||||||
| use clap::{Parser, Subcommand}; | use clap::{Parser, Subcommand}; | ||||||
| use factorio_blueprint::{BlueprintBook, BlueprintBookEntry, BlueprintString, encode}; | use factorio_blueprint::{BlueprintBook, BlueprintBookEntry, BlueprintString, encode}; | ||||||
| use factorio_blueprint_generator::station::{StationBasicSpec, basic_station}; | use factorio_blueprint_generator::{ | ||||||
|  |     multistation::StationSpec, | ||||||
|  |     station::{StationBasicSpec, basic_station}, | ||||||
|  | }; | ||||||
| use factorio_core::beltoptions::{Beltspeed, Belttype}; | use factorio_core::beltoptions::{Beltspeed, Belttype}; | ||||||
| 
 | 
 | ||||||
| #[derive(Parser)] | #[derive(Parser)] | ||||||
|  | @ -63,13 +66,15 @@ fn main() { | ||||||
|                             let o = 1 << o; |                             let o = 1 << o; | ||||||
| 
 | 
 | ||||||
|                             let blueprint = basic_station( |                             let blueprint = basic_station( | ||||||
|                                 load, |                                 &StationSpec { | ||||||
|                                 locomotives, |                                     locomotives, | ||||||
|                                 cargo, |                                     wagons: cargo, | ||||||
|                                 o, |                                     load, | ||||||
|                                 beltspeed, |                                     beltspeed, | ||||||
|                                 Belttype::Full, |                                     lanes: o, | ||||||
|                                 false, |                                     belttype: Belttype::Full, | ||||||
|  |                                     stacked: false, | ||||||
|  |                                 }, | ||||||
|                                 &factorio_blueprint_generator::station::StationBasicSpec::default(), |                                 &factorio_blueprint_generator::station::StationBasicSpec::default(), | ||||||
|                             ); |                             ); | ||||||
| 
 | 
 | ||||||
|  | @ -132,13 +137,15 @@ fn main() { | ||||||
|         } => { |         } => { | ||||||
|             let b = BlueprintString::Blueprint( |             let b = BlueprintString::Blueprint( | ||||||
|                 basic_station( |                 basic_station( | ||||||
|                     load, |                     &StationSpec { | ||||||
|                     locomotives, |                         locomotives, | ||||||
|                     length, |                         wagons: length, | ||||||
|                     outputs, |                         load, | ||||||
|                     beltspeed, |                         beltspeed, | ||||||
|                     belttype, |                         lanes: outputs, | ||||||
|                     false, |                         belttype, | ||||||
|  |                         stacked: false, | ||||||
|  |                     }, | ||||||
|                     &StationBasicSpec::default(), |                     &StationBasicSpec::default(), | ||||||
|                 ) |                 ) | ||||||
|                 .to_blueprint(), |                 .to_blueprint(), | ||||||
|  |  | ||||||
|  | @ -6,12 +6,12 @@ pub fn merger( | ||||||
|     beltspeed: Beltspeed, |     beltspeed: Beltspeed, | ||||||
|     intervall: usize, |     intervall: usize, | ||||||
|     outputs: usize, |     outputs: usize, | ||||||
|     lines: usize, |     inputs: usize, | ||||||
| ) -> Blueprint { | ) -> Blueprint { | ||||||
|     let section_size = lines / outputs; |     let section_size = inputs / outputs; | ||||||
|     assert!(lines % outputs == 0); |     assert!(inputs % outputs == 0); | ||||||
|     assert!(section_size.is_power_of_two()); |     assert!(section_size.is_power_of_two()); | ||||||
|     assert!(outputs <= lines); |     assert!(outputs <= inputs); | ||||||
| 
 | 
 | ||||||
|     let mut b = Blueprint::new(); |     let mut b = Blueprint::new(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -266,16 +266,7 @@ pub fn multistation( | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // station
 |         // station
 | ||||||
|         let mut b = basic_station( |         let mut b = basic_station(station, basic_spec); | ||||||
|             station.load, |  | ||||||
|             station.locomotives, |  | ||||||
|             station.wagons, |  | ||||||
|             station.lanes, |  | ||||||
|             station.beltspeed, |  | ||||||
|             station.belttype, |  | ||||||
|             station.stacked, |  | ||||||
|             basic_spec, |  | ||||||
|         ); |  | ||||||
|         let output_height = -b.bounding_box().min().y; |         let output_height = -b.bounding_box().min().y; | ||||||
| 
 | 
 | ||||||
|         b.transform(Transformation::new( |         b.transform(Transformation::new( | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ use factorio_core::{ | ||||||
|     prelude::*, |     prelude::*, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| use crate::binary_merger::merger; | use crate::{binary_merger::merger, multistation::StationSpec}; | ||||||
| 
 | 
 | ||||||
| pub struct StationBasicSpec { | pub struct StationBasicSpec { | ||||||
|     pub inserter_type: InserterType, |     pub inserter_type: InserterType, | ||||||
|  | @ -224,28 +224,19 @@ pub fn one_loader( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[allow(clippy::too_many_arguments)] | #[allow(clippy::too_many_arguments)] | ||||||
| pub fn basic_station( | pub fn basic_station(station_spec: &StationSpec, basic_spec: &StationBasicSpec) -> Blueprint { | ||||||
|     load: bool, |     let section_size = station_spec.wagons / station_spec.lanes; | ||||||
|     locomotives: usize, |     assert!(station_spec.wagons % station_spec.lanes == 0); | ||||||
|     length: usize, |  | ||||||
|     outputs: usize, |  | ||||||
|     beltspeed: Beltspeed, |  | ||||||
|     belttype: Belttype, |  | ||||||
|     stacked: bool, |  | ||||||
|     basic_spec: &StationBasicSpec, |  | ||||||
| ) -> Blueprint { |  | ||||||
|     let section_size = length / outputs; |  | ||||||
|     assert!(length % outputs == 0); |  | ||||||
|     assert!(section_size.is_power_of_two()); |     assert!(section_size.is_power_of_two()); | ||||||
|     assert!(outputs <= length); |     assert!(station_spec.lanes <= station_spec.wagons); | ||||||
| 
 | 
 | ||||||
|     let mut blueprint = Blueprint::new(); |     let mut blueprint = Blueprint::new(); | ||||||
| 
 | 
 | ||||||
|     let global_x_offset = locomotives * 7; |     let global_x_offset = station_spec.locomotives * 7; | ||||||
| 
 | 
 | ||||||
|     // electric poles
 |     // electric poles
 | ||||||
|     let mut poles = Vec::new(); |     let mut poles = Vec::new(); | ||||||
|     for l in 1..=(length + locomotives) { |     for l in 1..=(station_spec.wagons + station_spec.locomotives) { | ||||||
|         poles.push(blueprint.add_entity(Entity::new_electric_pole( |         poles.push(blueprint.add_entity(Entity::new_electric_pole( | ||||||
|             ElectricPoleType::Medium, |             ElectricPoleType::Medium, | ||||||
|             Position::new(1, 1) + 2 * Position::new(7 * l as PositionType, -2), |             Position::new(1, 1) + 2 * Position::new(7 * l as PositionType, -2), | ||||||
|  | @ -258,30 +249,38 @@ pub fn basic_station( | ||||||
| 
 | 
 | ||||||
|     // unloader
 |     // unloader
 | ||||||
| 
 | 
 | ||||||
|     let (_, output_y) = match load { |     let (_, output_y) = match station_spec.load { | ||||||
|         false => unloader( |         false => unloader( | ||||||
|             beltspeed.halvings((length / outputs).ilog2() as usize), |             station_spec | ||||||
|             belttype, |                 .beltspeed | ||||||
|             stacked, |                 .halvings((station_spec.wagons / station_spec.lanes).ilog2() as usize), | ||||||
|  |             station_spec.belttype, | ||||||
|  |             station_spec.stacked, | ||||||
|             basic_spec, |             basic_spec, | ||||||
|         ), |         ), | ||||||
|         true => one_loader( |         true => one_loader( | ||||||
|             beltspeed.halvings((length / outputs).ilog2() as usize), |             station_spec | ||||||
|             stacked, |                 .beltspeed | ||||||
|  |                 .halvings((station_spec.wagons / station_spec.lanes).ilog2() as usize), | ||||||
|  |             station_spec.stacked, | ||||||
|             basic_spec, |             basic_spec, | ||||||
|         ), |         ), | ||||||
|     }; |     }; | ||||||
|     for l in 0..length { |     for l in 0..station_spec.wagons { | ||||||
|         let (mut unloader, _) = match load { |         let (mut unloader, _) = match station_spec.load { | ||||||
|             false => unloader( |             false => unloader( | ||||||
|                 beltspeed.halvings((length / outputs).ilog2() as usize), |                 station_spec | ||||||
|                 belttype, |                     .beltspeed | ||||||
|                 stacked, |                     .halvings((station_spec.wagons / station_spec.lanes).ilog2() as usize), | ||||||
|  |                 station_spec.belttype, | ||||||
|  |                 station_spec.stacked, | ||||||
|                 basic_spec, |                 basic_spec, | ||||||
|             ), |             ), | ||||||
|             true => one_loader( |             true => one_loader( | ||||||
|                 beltspeed.halvings((length / outputs).ilog2() as usize), |                 station_spec | ||||||
|                 stacked, |                     .beltspeed | ||||||
|  |                     .halvings((station_spec.wagons / station_spec.lanes).ilog2() as usize), | ||||||
|  |                 station_spec.stacked, | ||||||
|                 basic_spec, |                 basic_spec, | ||||||
|             ), |             ), | ||||||
|         }; |         }; | ||||||
|  | @ -303,7 +302,7 @@ pub fn basic_station( | ||||||
|     )); |     )); | ||||||
| 
 | 
 | ||||||
|     // rails
 |     // rails
 | ||||||
|     for l in 0..(length * 7 + global_x_offset).div_ceil(2) { |     for l in 0..(station_spec.wagons * 7 + global_x_offset).div_ceil(2) { | ||||||
|         blueprint.add_entity(Entity::new_unknown( |         blueprint.add_entity(Entity::new_unknown( | ||||||
|             "straight-rail", |             "straight-rail", | ||||||
|             Position::new(2 + 4 * l as PositionType, 2), |             Position::new(2 + 4 * l as PositionType, 2), | ||||||
|  | @ -314,7 +313,13 @@ pub fn basic_station( | ||||||
| 
 | 
 | ||||||
|     // output and merging
 |     // output and merging
 | ||||||
| 
 | 
 | ||||||
|     let mut m = merger(load, beltspeed, 7, outputs, length); |     let mut m = merger( | ||||||
|  |         station_spec.load, | ||||||
|  |         station_spec.beltspeed, | ||||||
|  |         7, | ||||||
|  |         station_spec.lanes, | ||||||
|  |         station_spec.wagons, | ||||||
|  |     ); | ||||||
| 
 | 
 | ||||||
|     m.transform(Transformation::new( |     m.transform(Transformation::new( | ||||||
|         Direction::Up, |         Direction::Up, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue