diff options
| author | mat <github@matdoes.dev> | 2022-05-27 16:04:22 -0500 |
|---|---|---|
| committer | mat <github@matdoes.dev> | 2022-05-27 16:04:22 -0500 |
| commit | aac64d013546c8be3b992af63d70150155386c11 (patch) | |
| tree | 5241eda4c71ad5d6093b7759fc7ec8feab18863c /azalea-block/src | |
| parent | 86cc2a9b7c85b0cb412fa8cbe2ab6b9a7ae5fcfc (diff) | |
| download | azalea-drasl-aac64d013546c8be3b992af63d70150155386c11.tar.xz | |
Start making azalea-block
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, +} |
