Add first blueprint abstraction

This commit is contained in:
hal8174 2025-01-20 23:15:55 +01:00
parent 505ca6ff5c
commit 2f12802507
4 changed files with 251 additions and 70 deletions

View file

@ -1,8 +1,100 @@
use factorio_blueprint::{
Blueprint, BlueprintEntity, BlueprintPosition, belt::convert_to_blueprint,
Blueprint, BlueprintEntity, BlueprintPosition,
abstraction::{self, Entity},
belt::convert_to_blueprint,
};
use factorio_core::{beltoptions::Beltspeed, pathfield::PathField, prelude::*};
fn balancer_path() -> Vec<PathField> {
vec![
PathField::Belt {
pos: Position::new(0, 1),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(3, 1),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(0, 2),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(3, 2),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(0, 3),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(1, 3),
dir: Direction::Left,
},
PathField::Belt {
pos: Position::new(2, 3),
dir: Direction::Right,
},
PathField::Belt {
pos: Position::new(3, 3),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(0, 5),
dir: Direction::Right,
},
PathField::Belt {
pos: Position::new(1, 5),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(2, 5),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(3, 5),
dir: Direction::Left,
},
PathField::Belt {
pos: Position::new(0, 6),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(3, 6),
dir: Direction::Up,
},
PathField::Underground {
pos: Position::new(1, 6),
dir: Direction::Up,
len: 4,
},
PathField::Underground {
pos: Position::new(2, 6),
dir: Direction::Up,
len: 4,
},
]
}
pub fn generate_4_lane_balancer2() -> Blueprint {
let mut b = abstraction::Blueprint::new();
let splitter_pos = [(0, 0), (2, 0), (1, 1), (1, 4), (0, 7), (2, 7)];
for (x, y) in splitter_pos {
b.add_entity(Entity::new(
"splitter",
Position::new(x, y),
Direction::Up,
Position::new(2, 1),
));
}
b.add_path(&balancer_path(), Beltspeed::Normal);
b.to_blueprint()
}
pub fn generate_4_lane_balancer() -> Blueprint {
let mut e = vec![
BlueprintEntity::builder("splitter".to_owned(), 1, BlueprintPosition::new(1.0, 0.5))
@ -21,74 +113,7 @@ pub fn generate_4_lane_balancer() -> Blueprint {
let mut nextfree = e.len() as u32;
e.extend(convert_to_blueprint(
&[
PathField::Belt {
pos: Position::new(0, 1),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(3, 1),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(0, 2),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(3, 2),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(0, 3),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(1, 3),
dir: Direction::Left,
},
PathField::Belt {
pos: Position::new(2, 3),
dir: Direction::Right,
},
PathField::Belt {
pos: Position::new(3, 3),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(0, 5),
dir: Direction::Right,
},
PathField::Belt {
pos: Position::new(1, 5),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(2, 5),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(3, 5),
dir: Direction::Left,
},
PathField::Belt {
pos: Position::new(0, 6),
dir: Direction::Up,
},
PathField::Belt {
pos: Position::new(3, 6),
dir: Direction::Up,
},
PathField::Underground {
pos: Position::new(1, 6),
dir: Direction::Up,
len: 4,
},
PathField::Underground {
pos: Position::new(2, 6),
dir: Direction::Up,
len: 4,
},
],
&balancer_path(),
&Beltspeed::Normal,
&mut nextfree,
));

View file

@ -1,10 +1,13 @@
use factorio_blueprint::{BlueprintString, encode};
use factorio_blueprint_generator::balancer::generate_4_lane_balancer;
use factorio_blueprint_generator::balancer::{generate_4_lane_balancer, generate_4_lane_balancer2};
fn main() {
let b = BlueprintString::Blueprint(generate_4_lane_balancer());
let b2 = BlueprintString::Blueprint(generate_4_lane_balancer2());
println!("{}", serde_json::to_string_pretty(&b).unwrap());
println!("{}", serde_json::to_string_pretty(&b).unwrap());
println!("{}", encode(&serde_json::to_string(&b).unwrap()));
println!("{}", encode(&serde_json::to_string(&b2).unwrap()));
}