mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/power.rs')
| -rw-r--r-- | src/block/power.rs | 48 |
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) +} |