mirror of
https://github.com/neocturne/MinedMap.git
synced 2025-03-04 17:23:33 +01:00
resource: update block type code generator for Rust
This commit is contained in:
parent
6379472282
commit
718ecf5909
6 changed files with 6399 additions and 12 deletions
21
Cargo.lock
generated
21
Cargo.lock
generated
|
@ -102,6 +102,26 @@ version = "1.8.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
|
||||
|
||||
[[package]]
|
||||
name = "enumflags2"
|
||||
version = "0.7.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb"
|
||||
dependencies = [
|
||||
"enumflags2_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "enumflags2_derive"
|
||||
version = "0.7.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.2.8"
|
||||
|
@ -210,6 +230,7 @@ dependencies = [
|
|||
"anyhow",
|
||||
"bytemuck",
|
||||
"clap",
|
||||
"enumflags2",
|
||||
"fastnbt",
|
||||
"flate2",
|
||||
"itertools",
|
||||
|
|
|
@ -11,6 +11,7 @@ default-run = "minedmap"
|
|||
anyhow = "1.0.68"
|
||||
bytemuck = "1.13.0"
|
||||
clap = { version = "4.1.4", features = ["derive"] }
|
||||
enumflags2 = "0.7.5"
|
||||
fastnbt = "2.3.2"
|
||||
flate2 = "1.0.25"
|
||||
itertools = "0.10.5"
|
||||
|
|
|
@ -6,7 +6,7 @@ import sys
|
|||
|
||||
|
||||
if len(sys.argv) != 3:
|
||||
sys.exit('Usage: extract.py <colors.json> <BlockType.inc.cpp>')
|
||||
sys.exit('Usage: extract.py <colors.json> <block_types.rs>')
|
||||
|
||||
with open(sys.argv[1]) as f:
|
||||
colors = json.load(f)
|
||||
|
@ -14,29 +14,33 @@ with open(sys.argv[1]) as f:
|
|||
output = {}
|
||||
|
||||
with open(sys.argv[2], 'w') as f:
|
||||
print('use enumflags2::make_bitflags;', file=f);
|
||||
print('', file=f)
|
||||
print('use super::*;', file=f)
|
||||
print('', file=f)
|
||||
print('pub const BLOCK_TYPES: &[(&str, BlockType)] = &[', file=f)
|
||||
|
||||
for name, info in colors.items():
|
||||
flags = []
|
||||
if info['opaque']:
|
||||
flags.append('BLOCK_OPAQUE')
|
||||
flags.append('Opaque')
|
||||
if info['grass']:
|
||||
flags.append('BLOCK_GRASS')
|
||||
flags.append('Grass')
|
||||
if info['foliage']:
|
||||
flags.append('BLOCK_FOLIAGE')
|
||||
flags.append('Foliage')
|
||||
if info['birch']:
|
||||
flags.append('BLOCK_BIRCH')
|
||||
flags.append('Birch')
|
||||
if info['spruce']:
|
||||
flags.append('BLOCK_SPRUCE')
|
||||
flags.append('Spruce')
|
||||
if info['water']:
|
||||
flags.append('BLOCK_WATER')
|
||||
if flags:
|
||||
flags = '|'.join(flags)
|
||||
else:
|
||||
flags = '0'
|
||||
flags.append('Water')
|
||||
flags = 'make_bitflags!(BlockFlags::{' + '|'.join(flags) + '})'
|
||||
|
||||
print('{"%s", {%s, {%u, %u, %u}}},' % (
|
||||
print('\t("%s", BlockType { flags: %s, color: BlockColor(%u, %u, %u) }),' % (
|
||||
name,
|
||||
flags,
|
||||
info['color']['r'],
|
||||
info['color']['g'],
|
||||
info['color']['b'],
|
||||
), file=f)
|
||||
print('];', file=f)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
pub mod io;
|
||||
pub mod resource;
|
||||
pub mod types;
|
||||
pub mod world;
|
||||
|
|
6327
src/resource/block_types.rs
Normal file
6327
src/resource/block_types.rs
Normal file
File diff suppressed because it is too large
Load diff
33
src/resource/mod.rs
Normal file
33
src/resource/mod.rs
Normal file
|
@ -0,0 +1,33 @@
|
|||
mod block_types;
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
use enumflags2::{bitflags, BitFlags};
|
||||
|
||||
#[bitflags]
|
||||
#[repr(u8)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
pub enum BlockFlags {
|
||||
Opaque,
|
||||
Grass,
|
||||
Foliage,
|
||||
Birch,
|
||||
Spruce,
|
||||
Water,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct BlockColor(pub u8, pub u8, pub u8);
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct BlockType {
|
||||
pub flags: BitFlags<BlockFlags>,
|
||||
pub color: BlockColor,
|
||||
}
|
||||
|
||||
pub fn get_block_types() -> HashMap<String, BlockType> {
|
||||
block_types::BLOCK_TYPES
|
||||
.iter()
|
||||
.map(|(k, v)| (String::from(*k), *v))
|
||||
.collect()
|
||||
}
|
Loading…
Add table
Reference in a new issue