Add fuel to train schedules

This commit is contained in:
hal8174 2024-11-24 14:12:53 +01:00
parent 3beab0c64d
commit 7fd42f45c7
3 changed files with 55 additions and 3 deletions

View file

@ -31,10 +31,11 @@ fn main() {
BlueprintBook::builder()
.blueprints(b)
.active_index(0)
.version(562949954797573)
.build(),
);
// let b = BlueprintString::Blueprint(generate_train(1, 2, false, false));
println!("{}", serde_json::to_string_pretty(&b).unwrap());
println!(

View file

@ -4,6 +4,12 @@ use bon::Builder;
use serde::Deserialize;
use serde::Serialize;
static VERSION: u64 = calculate_version(2, 0, 19, 173);
const fn calculate_version(major: u16, minor: u16, patch: u16, dev: u16) -> u64 {
((major as u64) << 48) | ((minor as u64) << 32) | ((patch as u64) << 16) | (dev as u64)
}
#[derive(Serialize, Deserialize, Debug)]
pub enum BlueprintString {
#[serde(rename = "blueprint_book")]
@ -22,6 +28,7 @@ pub struct BlueprintBook {
label_color: Option<BlueprintColor>,
blueprints: Vec<BlueprintBookEntry>,
active_index: i32,
#[builder(skip = VERSION)]
version: u64,
}
@ -68,6 +75,7 @@ pub struct Blueprint {
absolute_snapping: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
position_relative_to_grid: Option<BlueprintPosition>,
#[builder(skip = VERSION)]
version: u64,
}

View file

@ -75,11 +75,55 @@ pub fn generate_train(locomotives: u32, wagons: u32, rails: bool, fluid: bool) -
"[virtual-signal=signal-C]"
};
let mut fuel_conditions = Vec::new();
fuel_conditions.push(serde_json::json!({
"compare_type": "and",
"station": format!("[virtual-signal=signal-F][virtual-signal=signal-{locomotives}][virtual-signal=signal-{wagons}]"),
"type": "specific_destination_not_full"
}));
for (fuel, min) in [
("coal", 50),
("solid-fuel", 50),
("rocket-fuel", 20),
("nuclear-fuel", 1),
] {
fuel_conditions.push(serde_json::json!({
"compare_type": "and",
"type": "fuel_item_count_any",
"condition": {
"comparator": "",
"constant": min,
"first_signal": {
"name": fuel,
},
}
}));
}
let schedule = serde_json::json!({
"locomotives": [1],
"schedule": {
"group": format!("{cargotype}[virtual-signal=signal-{locomotives}][virtual-signal=signal-{wagons}]"),
"interrupts": [
{
"name": format!("[virtual-signal=signal-F][virtual-signal=signal-{locomotives}][virtual-signal=signal-{wagons}]"),
"conditions": fuel_conditions,
"inside_interrupt": true,
"targets": [
{
"station": format!("[virtual-signal=signal-F][virtual-signal=signal-{locomotives}][virtual-signal=signal-{wagons}]"),
"wait_conditions": [
{
"compare_type": "and",
"ticks": 120,
"type": "inactivity"
}
]
}
]
},
{
"name": format!("{cargotype}[virtual-signal=signal-{locomotives}][virtual-signal=signal-{wagons}][virtual-signal=signal-L]"),
"conditions": [
@ -145,7 +189,7 @@ pub fn generate_train(locomotives: u32, wagons: u32, rails: bool, fluid: bool) -
],
"records": [
{
"station": "Depot"
"station": format!("[virtual-signal=signal-D][virtual-signal=signal-{}]", locomotives + wagons),
}
]
}
@ -156,7 +200,6 @@ pub fn generate_train(locomotives: u32, wagons: u32, rails: bool, fluid: bool) -
.entities(e)
.stock_connections(stock_connections)
.schedules(vec![schedule])
.version(562949954797573)
.snap_to_grid(BlueprintPosition::new(
4.0,
2.0 * ((locomotives + wagons) * 7).div_ceil(2) as f64,