Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'src/block/liquid.rs')
-rw-r--r--src/block/liquid.rs158
1 files changed, 0 insertions, 158 deletions
diff --git a/src/block/liquid.rs b/src/block/liquid.rs
deleted file mode 100644
index d20fb47..0000000
--- a/src/block/liquid.rs
+++ /dev/null
@@ -1,158 +0,0 @@
-//! liquid related things
-use thiserror::Error;
-
-use crate::block::distribution::BridgeBlock;
-use crate::block::simple::*;
-use crate::block::*;
-use crate::content;
-use crate::data::dynamic::DynType;
-use crate::data::renderer::load;
-use crate::fluid;
-use crate::utils::ImageUtils;
-
-make_simple!(ConduitBlock, |_,
- name,
- _,
- ctx: Option<&RenderingContext>,
- rot,
- s| {
- let ctx = ctx.unwrap();
-
- let mask = mask(ctx, rot, name);
- // TODO caps. stopped trying bcz too complex
- mask2tile(mask, rot, name, s)
-});
-
-make_register! {
- "reinforced-pump" -> BasicBlock::new(2, true, cost!(Beryllium: 40, Tungsten: 30, Silicon: 20));
- "mechanical-pump" -> BasicBlock::new(1, true, cost!(Copper: 15, Metaglass: 10));
- "rotary-pump" -> BasicBlock::new(2, true, cost!(Copper: 70, Metaglass: 50, Titanium: 35, Silicon: 20));
- "impulse-pump" -> BasicBlock::new(3, true, cost!(Copper: 80, Metaglass: 90, Titanium: 40, Thorium: 35, Silicon: 30));
- "conduit" => ConduitBlock::new(1, false, cost!(Metaglass: 1));
- "pulse-conduit" => ConduitBlock::new(1, false, cost!(Metaglass: 1, Titanium: 2));
- "plated-conduit" => ConduitBlock::new(1, false, cost!(Metaglass: 1, Thorium: 2, Plastanium: 1));
- "liquid-router" -> BasicBlock::new(1, true, cost!(Metaglass: 2, Graphite: 4));
- "liquid-container" -> BasicBlock::new(2, true, cost!(Metaglass: 15, Titanium: 10));
- "liquid-tank" -> BasicBlock::new(3, true, cost!(Metaglass: 40, Titanium: 30));
- "liquid-junction" -> BasicBlock::new(1, true, cost!(Metaglass: 8, Graphite: 4));
- "bridge-conduit" -> BridgeBlock::new(1, true, cost!(Metaglass: 8, Graphite: 4), 4, true);
- "phase-conduit" -> BridgeBlock::new(1, true, cost!(Metaglass: 20, Titanium: 10, Silicon: 7, PhaseFabric: 5), 12, true);
- "reinforced-conduit" => ConduitBlock::new(1, false, cost!(Beryllium: 2));
- "reinforced-liquid-junction" -> BasicBlock::new(1, true, cost!(Graphite: 4, Beryllium: 8));
- "reinforced-bridge-conduit" => BridgeBlock::new(1, true, cost!(Graphite: 8, Beryllium: 20), 4, true);
- "reinforced-liquid-router" -> BasicBlock::new(1, true, cost!(Graphite: 8, Beryllium: 4));
- "reinforced-liquid-container" -> BasicBlock::new(2, true, cost!(Tungsten: 10, Beryllium: 16));
- "reinforced-liquid-tank" -> BasicBlock::new(3, true, cost!(Tungsten: 40, Beryllium: 50));
- // sandbox only
- "liquid-source" => FluidBlock::new(1, true, &[]);
- "liquid-void" -> BasicBlock::new(1, true, &[]);
-}
-
-pub struct FluidBlock {
- size: u8,
- symmetric: bool,
- build_cost: BuildCost,
-}
-
-impl FluidBlock {
- #[must_use]
- pub const fn new(size: u8, symmetric: bool, build_cost: BuildCost) -> Self {
- assert!(size != 0, "invalid size");
- Self {
- size,
- symmetric,
- build_cost,
- }
- }
-
- state_impl!(pub Option<fluid::Type>);
-}
-
-impl BlockLogic for FluidBlock {
- impl_block!();
-
- fn data_from_i32(&self, config: i32, _: GridPos) -> Result<DynData, DataConvertError> {
- if config < 0 || config > i32::from(u16::MAX) {
- return Err(DataConvertError::Custom(Box::new(FluidConvertError(
- config,
- ))));
- }
- Ok(DynData::Content(content::Type::Fluid, config as u16))
- }
-
- fn deserialize_state(&self, data: DynData) -> Result<Option<State>, DeserializeError> {
- match data {
- DynData::Empty => Ok(Some(Self::create_state(None))),
- DynData::Content(content::Type::Fluid, id) => Ok(Some(Self::create_state(Some(
- FluidDeserializeError::forward(fluid::Type::try_from(id))?,
- )))),
- DynData::Content(have, ..) => Err(DeserializeError::Custom(Box::new(
- FluidDeserializeError::ContentType(have),
- ))),
- _ => Err(DeserializeError::InvalidType {
- have: data.get_type(),
- expect: DynType::Content,
- }),
- }
- }
-
- fn serialize_state(&self, state: &State) -> Result<DynData, SerializeError> {
- Ok(Self::get_state(state)
- .as_ref()
- .map_or(DynData::Empty, |&fluid| {
- DynData::Content(content::Type::Fluid, fluid.into())
- }))
- }
-
- fn draw(
- &self,
- _: &str,
- state: Option<&State>,
- _: Option<&RenderingContext>,
- _: Rotation,
- s: Scale,
- ) -> ImageHolder<4> {
- let mut p = load!("liquid-source", s);
- if let Some(state) = state && let Some(liq) = Self::get_state(state) {
- let mut top = load!("center", s);
- unsafe { p.overlay(top.tint(liq.color())) };
- return p;
- }
- p
- }
-
- /// format:
- /// - fluid: [`u16`] as [`Fluid`](fluid::Type)
- fn read(
- &self,
- b: &mut Build,
- _: &BlockRegistry,
- _: &EntityMapping,
- buff: &mut DataRead,
- ) -> Result<(), DataReadError> {
- let f = buff.read_u16()?;
- b.state = Some(Self::create_state(fluid::Type::try_from(f).ok()));
- Ok(())
- }
-}
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
-#[error("invalid config ({0}) for fluid")]
-pub struct FluidConvertError(pub i32);
-
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Error)]
-pub enum FluidDeserializeError {
- #[error("expected Fluid but got {0:?}")]
- ContentType(content::Type),
- #[error("fluid not found")]
- NotFound(#[from] fluid::TryFromU16Error),
-}
-
-impl FluidDeserializeError {
- pub fn forward<T, E: Into<Self>>(result: Result<T, E>) -> Result<T, DeserializeError> {
- match result {
- Ok(v) => Ok(v),
- Err(e) => Err(DeserializeError::Custom(Box::new(e.into()))),
- }
- }
-}