aboutsummaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-05-28 20:59:22 -0500
committermat <github@matdoes.dev>2022-05-28 20:59:22 -0500
commit9c1c2862361a4863cfd0af36c80705fb6213c3a4 (patch)
treeaafbc0089624da25c530abdfa8e8435cb12f9347 /codegen
parent8cd0ff2aac9f8a03446f897c48fc92b00b5291a2 (diff)
downloadazalea-drasl-9c1c2862361a4863cfd0af36c80705fb6213c3a4.tar.xz
default block properties
Diffstat (limited to 'codegen')
-rw-r--r--codegen/lib/code/blocks.py46
-rw-r--r--codegen/lib/utils.py7
2 files changed, 47 insertions, 6 deletions
diff --git a/codegen/lib/code/blocks.py b/codegen/lib/code/blocks.py
index fd268b98..a8f9afd1 100644
--- a/codegen/lib/code/blocks.py
+++ b/codegen/lib/code/blocks.py
@@ -1,5 +1,6 @@
+from lib.utils import to_camel_case
from lib.utils import get_dir_location
-
+import json
BLOCKS_RS_DIR = get_dir_location('../azalea-block/src/blocks.rs')
@@ -11,10 +12,45 @@ def generate_blocks(blocks: dict):
new_make_block_states_macro_code = []
new_make_block_states_macro_code.append('make_block_states! {')
+ # Find properties
properties = {}
- for block_name, block_data in blocks.items():
- block_properties = block_data['properties']
-
+ for block_data in blocks.values():
+ block_properties = block_data.get('properties', {})
properties.update(block_properties)
- print(properties)
+ # Property codegen
+ new_make_block_states_macro_code.append(' Properties => {')
+ for property_name, property_variants in properties.items():
+ new_make_block_states_macro_code.append(
+ f' {to_camel_case(property_name)} => {{')
+
+ for variant in property_variants:
+ new_make_block_states_macro_code.append(
+ f' {to_camel_case(variant)},')
+
+ new_make_block_states_macro_code.append(
+ f' }},')
+ new_make_block_states_macro_code.append(' },')
+
+ # Block codegen
+ new_make_block_states_macro_code.append(' Blocks => {')
+ for block_id, block_data in blocks.items():
+ block_id = block_id.split(':')[1]
+ block_states = block_data['states']
+
+ default_property_variants = {}
+ for state in block_states:
+ if state.get('default'):
+ default_property_variants = state.get('properties', {})
+
+ # TODO: use burger to generate the blockbehavior
+ new_make_block_states_macro_code.append(
+ f' {block_id} => BlockBehavior::default(), {{')
+ for property in block_data.get('properties', {}):
+ property_default = default_property_variants.get(property)
+ new_make_block_states_macro_code.append(
+ f' {to_camel_case(property)}={to_camel_case(property_default)},')
+ new_make_block_states_macro_code.append(' },')
+ new_make_block_states_macro_code.append(' },')
+
+ print('\n'.join(new_make_block_states_macro_code))
diff --git a/codegen/lib/utils.py b/codegen/lib/utils.py
index 77a7b2d4..fb43af21 100644
--- a/codegen/lib/utils.py
+++ b/codegen/lib/utils.py
@@ -11,7 +11,12 @@ def to_snake_case(name: str):
def to_camel_case(name: str):
s = re.sub('_([a-z])', lambda m: m.group(1).upper(), name)
- return s[0].upper() + s[1:]
+ s = s[0].upper() + s[1:]
+ # if the first character is a number, we need to add an underscore
+ # maybe we could convert it to the number name (like 2 would become "two")?
+ if s[0].isdigit():
+ s = f'_{s}'
+ return s
def padded_hex(n: int):