stevenarella/src/world/block.rs

49 lines
921 B
Rust

#[derive(Debug, PartialEq, Eq, Hash)]
pub struct Block {
pub render: bool,
}
macro_rules! define_blocks {
(
$(
$name:ident $bl:expr
)*
) => (
const BLOCKS: &'static [Block] = &[
$(
$bl
),*
];
mod internal_ids { create_ids!(usize, $($name),*); }
$(
pub const $name: &'static Block = &BLOCKS[internal_ids::$name];
)*
impl Block {
pub fn get_id(&self) -> usize {
$(
if self == $name { return internal_ids::$name; }
)*
unreachable!()
}
}
)
}
define_blocks! {
AIR Block {
render: false,
}
MISSING Block {
render: true,
}
}
pub fn get_block_by_id(id: usize) -> &'static Block {
if id >= BLOCKS.len() {
return MISSING;
}
&BLOCKS[id]
}