From aac64d013546c8be3b992af63d70150155386c11 Mon Sep 17 00:00:00 2001 From: mat Date: Fri, 27 May 2022 16:04:22 -0500 Subject: Start making azalea-block --- azalea-block/src/behavior.rs | 3 ++ azalea-block/src/blocks.rs | 88 ++++++++++++++++++++++++++++++++++++++++++ azalea-block/src/lib.rs | 5 +++ azalea-block/src/properties.rs | 20 ++++++++++ 4 files changed, 116 insertions(+) create mode 100644 azalea-block/src/behavior.rs create mode 100644 azalea-block/src/blocks.rs create mode 100644 azalea-block/src/lib.rs create mode 100644 azalea-block/src/properties.rs (limited to 'azalea-block/src') diff --git a/azalea-block/src/behavior.rs b/azalea-block/src/behavior.rs new file mode 100644 index 00000000..974260f2 --- /dev/null +++ b/azalea-block/src/behavior.rs @@ -0,0 +1,3 @@ +pub struct BlockBehavior { + pub has_collision: bool, +} diff --git a/azalea-block/src/blocks.rs b/azalea-block/src/blocks.rs new file mode 100644 index 00000000..f6f33a89 --- /dev/null +++ b/azalea-block/src/blocks.rs @@ -0,0 +1,88 @@ +use crate::{behavior::BlockBehavior, properties}; + +// make_block_states! { +// acacia_button => BlockBehavior { has_collision: false }, { +// Face, +// Facing, +// Powered +// }; +// acacia_door => BlockBehavior { has_collision: true }, { +// Facing, +// Half, +// Hinge, +// Open, +// Powered +// }; +// } + +// the underscore makes it more readable, so i think it's fine to allow it +#[allow(non_camel_case_types)] +pub enum BlockState { + AcaciaButton_FloorNorthTrue, + AcaciaButton_WallNorthTrue, + AcaciaButton_CeilingNorthTrue, +} + +pub trait Block { + fn behavior(&self) -> BlockBehavior; +} + +#[derive(Debug)] +pub struct AcaciaButtonBlock { + pub face: properties::Face, + pub facing: properties::Facing, + pub powered: properties::Powered, +} + +impl Block for AcaciaButtonBlock { + fn behavior(&self) -> BlockBehavior { + BlockBehavior { + has_collision: false, + } + } +} + +pub struct AcaciaDoorBlock { + pub facing: properties::Facing, + // pub half: properties::Half, + // pub hinge: properties::Hinge, + // pub open: properties::Open, + pub powered: properties::Powered, +} + +impl From for &dyn Block { + fn from(b: BlockState) -> Self { + match b { + BlockState::AcaciaButton_FloorNorthTrue => &AcaciaButtonBlock { + face: properties::Face::Floor, + facing: properties::Facing::North, + powered: properties::Powered::True, + }, + // BlockState::AcaciaButton_WallNorthTrue => todo!(), + // BlockState::AcaciaButton_CeilingNorthTrue => todo!(), + _ => todo!(), + } + } +} +impl From for BlockState { + fn from(b: AcaciaButtonBlock) -> Self { + match b { + AcaciaButtonBlock { + face: properties::Face::Floor, + facing: properties::Facing::North, + powered: properties::Powered::True, + } => BlockState::AcaciaButton_FloorNorthTrue, + // AcaciaButtonBlock { + // face: properties::Face::Wall, + // facing: properties::Facing::North, + // powered: properties::Powered::True, + // } => todo!(), + // AcaciaButtonBlock { + // face: properties::Face::Ceiling, + // facing: properties::Facing::North, + // powered: properties::Powered::True, + // } => todo!(), + _ => todo!(), + } + } +} diff --git a/azalea-block/src/lib.rs b/azalea-block/src/lib.rs new file mode 100644 index 00000000..db94d081 --- /dev/null +++ b/azalea-block/src/lib.rs @@ -0,0 +1,5 @@ +pub mod behavior; +pub mod blocks; +pub mod properties; + +use std::fmt::Debug; diff --git a/azalea-block/src/properties.rs b/azalea-block/src/properties.rs new file mode 100644 index 00000000..ac81fcb3 --- /dev/null +++ b/azalea-block/src/properties.rs @@ -0,0 +1,20 @@ +#[derive(Debug, Clone, Copy)] +pub enum Face { + Floor, + Wall, + Ceiling, +} + +#[derive(Debug, Clone, Copy)] +pub enum Facing { + North, + South, + West, + East, +} + +#[derive(Debug, Clone, Copy)] +pub enum Powered { + True, + False, +} -- cgit v1.2.3