Start making azalea-block

This commit is contained in:
mat 2022-05-27 16:04:22 -05:00
parent 86cc2a9b7c
commit aac64d0135
8 changed files with 137 additions and 0 deletions

4
Cargo.lock generated
View file

@ -78,6 +78,10 @@ dependencies = [
"uuid",
]
[[package]]
name = "azalea-block"
version = "0.1.0"
[[package]]
name = "azalea-brigadier"
version = "0.1.0"

View file

@ -11,6 +11,7 @@ members = [
"azalea-crypto",
"azalea-world",
"azalea-language",
"azalea-block",
]
[profile.release]

8
azalea-block/Cargo.toml Normal file
View file

@ -0,0 +1,8 @@
[package]
name = "azalea-block"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

8
azalea-block/README.md Normal file
View file

@ -0,0 +1,8 @@
# Azalea Block
Representation of Minecraft block states.
There's two main things here, the `BlockState` enum and the `Block` trait.
`BlockState` is a simple enum with every possible block state as variant, and `Block` is a heavier trait which lets you access information about a block more easily.
Every block is a struct that implements `Block`. You can freely convert between `BlockState` and `Block` with .into().

View file

@ -0,0 +1,3 @@
pub struct BlockBehavior {
pub has_collision: bool,
}

View file

@ -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!(),
}
}
}

5
azalea-block/src/lib.rs Normal file
View file

@ -0,0 +1,5 @@
pub mod behavior;
pub mod blocks;
pub mod properties;
use std::fmt::Debug;

View file

@ -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,
}