mirror of
https://github.com/mat-1/azalea.git
synced 2024-09-18 22:32:31 +00:00
Start making azalea-block
This commit is contained in:
parent
86cc2a9b7c
commit
aac64d0135
8 changed files with 137 additions and 0 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -78,6 +78,10 @@ dependencies = [
|
|||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "azalea-block"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "azalea-brigadier"
|
||||
version = "0.1.0"
|
||||
|
|
|
@ -11,6 +11,7 @@ members = [
|
|||
"azalea-crypto",
|
||||
"azalea-world",
|
||||
"azalea-language",
|
||||
"azalea-block",
|
||||
]
|
||||
|
||||
[profile.release]
|
||||
|
|
8
azalea-block/Cargo.toml
Normal file
8
azalea-block/Cargo.toml
Normal 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
8
azalea-block/README.md
Normal 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().
|
3
azalea-block/src/behavior.rs
Normal file
3
azalea-block/src/behavior.rs
Normal file
|
@ -0,0 +1,3 @@
|
|||
pub struct BlockBehavior {
|
||||
pub has_collision: bool,
|
||||
}
|
88
azalea-block/src/blocks.rs
Normal file
88
azalea-block/src/blocks.rs
Normal 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
5
azalea-block/src/lib.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
pub mod behavior;
|
||||
pub mod blocks;
|
||||
pub mod properties;
|
||||
|
||||
use std::fmt::Debug;
|
20
azalea-block/src/properties.rs
Normal file
20
azalea-block/src/properties.rs
Normal 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,
|
||||
}
|
Loading…
Reference in a new issue