diff options
Diffstat (limited to 'azalea-block/src')
| -rw-r--r-- | azalea-block/src/behavior.rs | 3 | ||||
| -rw-r--r-- | azalea-block/src/blocks.rs | 88 | ||||
| -rw-r--r-- | azalea-block/src/lib.rs | 5 | ||||
| -rw-r--r-- | azalea-block/src/properties.rs | 20 |
4 files changed, 116 insertions, 0 deletions
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<BlockState> 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<AcaciaButtonBlock> 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, +} |
