|
2 | 2 | class_name Block
|
3 | 3 | extends MarginContainer
|
4 | 4 |
|
| 5 | +const BlocksCatalog = preload("res://addons/block_code/blocks_catalog.gd") |
5 | 6 | const InstructionTree = preload("res://addons/block_code/instruction_tree/instruction_tree.gd")
|
6 | 7 | const Types = preload("res://addons/block_code/types/types.gd")
|
7 | 8 |
|
8 | 9 | signal drag_started(block: Block)
|
9 | 10 | signal modified
|
10 | 11 |
|
11 | 12 | ## Name of the block to be referenced by others in search
|
12 |
| -@export var block_name: String = "" |
| 13 | +@export var block_name: StringName |
13 | 14 |
|
14 | 15 | ## Label of block (optionally used to draw block labels)
|
15 | 16 | @export var label: String = ""
|
@@ -83,18 +84,29 @@ func get_instruction_node() -> InstructionTree.TreeNode:
|
83 | 84 | func update_resources(undo_redo: EditorUndoRedoManager):
|
84 | 85 | if resource == null:
|
85 | 86 | var serialized_block = SerializedBlock.new(get_block_class(), get_serialized_props())
|
86 |
| - resource = SerializedBlockTreeNode.new(serialized_block) |
| 87 | + resource = SerializedBlockTreeNode.new(block_name, position, serialized_block) |
87 | 88 | return
|
88 | 89 |
|
| 90 | + if resource.position != position: |
| 91 | + undo_redo.add_undo_property(resource, "position", resource.position) |
| 92 | + undo_redo.add_do_property(resource, "position", position) |
| 93 | + |
89 | 94 | var serialized_props = get_serialized_props()
|
| 95 | + |
90 | 96 | if serialized_props != resource.serialized_block.serialized_props:
|
91 | 97 | undo_redo.add_undo_property(resource.serialized_block, "serialized_props", resource.serialized_block.serialized_props)
|
92 | 98 | undo_redo.add_do_property(resource.serialized_block, "serialized_props", serialized_props)
|
93 | 99 |
|
94 | 100 |
|
95 | 101 | # Override this method to add more serialized properties
|
96 | 102 | func get_serialized_props() -> Array:
|
97 |
| - return serialize_props(["block_name", "label", "color", "block_type", "position", "scope"]) |
| 103 | + if not BlocksCatalog.has_block(block_name): |
| 104 | + return serialize_props(["block_name", "label", "color", "block_type", "position", "scope"]) |
| 105 | + |
| 106 | + # TODO: Remove remaining serialization: |
| 107 | + # - Derive color from category. |
| 108 | + # - Handle scope in a different way? |
| 109 | + return serialize_props(["color", "scope"]) |
98 | 110 |
|
99 | 111 |
|
100 | 112 | func _to_string():
|
|
0 commit comments