aboutsummaryrefslogtreecommitdiff
path: root/azalea-block/src
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-05-27 16:04:22 -0500
committermat <github@matdoes.dev>2022-05-27 16:04:22 -0500
commitaac64d013546c8be3b992af63d70150155386c11 (patch)
tree5241eda4c71ad5d6093b7759fc7ec8feab18863c /azalea-block/src
parent86cc2a9b7c85b0cb412fa8cbe2ab6b9a7ae5fcfc (diff)
downloadazalea-drasl-aac64d013546c8be3b992af63d70150155386c11.tar.xz
Start making azalea-block
Diffstat (limited to 'azalea-block/src')
-rw-r--r--azalea-block/src/behavior.rs3
-rw-r--r--azalea-block/src/blocks.rs88
-rw-r--r--azalea-block/src/lib.rs5
-rw-r--r--azalea-block/src/properties.rs20
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,
+}