mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/power.rs')
-rw-r--r--src/block/power.rs48
1 files changed, 42 insertions, 6 deletions
diff --git a/src/block/power.rs b/src/block/power.rs
index 69a1857..184203b 100644
--- a/src/block/power.rs
+++ b/src/block/power.rs
@@ -5,7 +5,11 @@ use crate::block::simple::*;
use crate::block::*;
use crate::data::dynamic::DynType;
-make_simple!(GeneratorBlock);
+make_simple!(GeneratorBlock => |_, _, _, buff: &mut DataRead| read_generator(buff));
+make_simple!(NuclearGeneratorBlock => |_, _, _, buff: &mut DataRead| read_nuclear(buff));
+make_simple!(ImpactReactorBlock => |_, _, _, buff: &mut DataRead| read_impact(buff));
+make_simple!(HeaterGeneratorBlock => |_, _, _, buff: &mut DataRead| read_heater(buff));
+make_simple!(BatteryBlock);
make_register! {
// illuminator == power ?????
@@ -14,8 +18,8 @@ make_register! {
"power-node-large" => ConnectorBlock::new(2, true, cost!(Lead: 10, Titanium: 5, Silicon: 3), 15);
"surge-tower" => ConnectorBlock::new(2, true, cost!(Lead: 10, Titanium: 7, Silicon: 15, SurgeAlloy: 15), 2);
"diode" => GeneratorBlock::new(1, false, cost!(Metaglass: 10, Silicon: 10, Plastanium: 5));
- "battery" => GeneratorBlock::new(1, true, cost!(Copper: 5, Lead: 20));
- "battery-large" => GeneratorBlock::new(3, true, cost!(Lead: 50, Titanium: 20, Silicon: 30));
+ "battery" => BatteryBlock::new(1, true, cost!(Copper: 5, Lead: 20));
+ "battery-large" => BatteryBlock::new(3, true, cost!(Lead: 50, Titanium: 20, Silicon: 30));
"combustion-generator" => GeneratorBlock::new(1, true, cost!(Copper: 25, Lead: 15));
"thermal-generator" => GeneratorBlock::new(2, true, cost!(Copper: 40, Lead: 50, Metaglass: 40, Graphite: 35, Silicon: 35));
"steam-generator" => GeneratorBlock::new(2, true, cost!(Copper: 35, Lead: 40, Graphite: 25, Silicon: 30));
@@ -23,8 +27,8 @@ make_register! {
"rtg-generator" => GeneratorBlock::new(2, true, cost!(Lead: 100, Thorium: 50, Silicon: 75, Plastanium: 75, PhaseFabric: 25));
"solar-panel" => GeneratorBlock::new(1, true, cost!(Lead: 10, Silicon: 15));
"solar-panel-large" => GeneratorBlock::new(3, true, cost!(Lead: 80, Silicon: 110, PhaseFabric: 15));
- "thorium-reactor" => GeneratorBlock::new(3, true, cost!(Lead: 300, Metaglass: 50, Graphite: 150, Thorium: 150, Silicon: 200));
- "impact-reactor" => GeneratorBlock::new(4, true,
+ "thorium-reactor" => NuclearGeneratorBlock::new(3, true, cost!(Lead: 300, Metaglass: 50, Graphite: 150, Thorium: 150, Silicon: 200));
+ "impact-reactor" => ImpactReactorBlock::new(4, true,
cost!(Lead: 500, Metaglass: 250, Graphite: 400, Thorium: 100, Silicon: 300, SurgeAlloy: 250));
"beam-node" => ConnectorBlock::new(1, true, cost!(Beryllium: 8), 4);
"beam-tower" => ConnectorBlock::new(3, true, cost!(Beryllium: 30, Oxide: 10, Silicon: 10), 12);
@@ -32,13 +36,14 @@ make_register! {
"chemical-combustion-chamber" => GeneratorBlock::new(3, true, cost!(Graphite: 40, Tungsten: 40, Oxide: 40, Silicon: 30));
"pyrolysis-generator" => GeneratorBlock::new(3, true, cost!(Graphite: 50, Carbide: 50, Oxide: 60, Silicon: 50));
"flux-reactor" => GeneratorBlock::new(5, true, cost!(Graphite: 300, Carbide: 200, Oxide: 100, Silicon: 600, SurgeAlloy: 300));
- "neoplasia-reactor" => GeneratorBlock::new(5, true, cost!(Tungsten: 1000, Carbide: 300, Oxide: 150, Silicon: 500, PhaseFabric: 300, SurgeAlloy: 200));
+ "neoplasia-reactor" => HeaterGeneratorBlock::new(5, true, cost!(Tungsten: 1000, Carbide: 300, Oxide: 150, Silicon: 500, PhaseFabric: 300, SurgeAlloy: 200));
// editor only
"beam-link" => ConnectorBlock::new(3, true, &[], 12);
// sandbox only
"power-source" => ConnectorBlock::new(1, true, &[], 100);
"power-void" => GeneratorBlock::new(1, true, &[]);
}
+
pub struct ConnectorBlock {
size: u8,
symmetric: bool,
@@ -205,3 +210,34 @@ impl BlockLogic for LampBlock {
Ok(DynData::Int(u32::from(*state) as i32))
}
}
+
+/// format:
+/// - production efficiency: [`f32`]
+/// - generate time: [`f32`]
+fn read_generator(buff: &mut DataRead) -> Result<(), DataReadError> {
+ buff.skip(8)
+}
+
+/// format:
+/// - call [`read_generator`]
+/// - heat: [`f32`]
+fn read_nuclear(buff: &mut DataRead) -> Result<(), DataReadError> {
+ read_generator(buff)?;
+ buff.skip(4)
+}
+
+/// format:
+/// - call [`read_generator`]
+/// - warmup: [`f32`]
+fn read_impact(buff: &mut DataRead) -> Result<(), DataReadError> {
+ read_generator(buff)?;
+ buff.skip(4)
+}
+
+/// format:
+/// - call [`read_generator`]
+/// - heat: [`f32`]
+fn read_heater(buff: &mut DataRead) -> Result<(), DataReadError> {
+ read_generator(buff)?;
+ buff.skip(4)
+}