diff --git a/addons/block_code/block_code_node/block_code.gd b/addons/block_code/block_code_node/block_code.gd index eaafb088..97f81e7d 100644 --- a/addons/block_code/block_code_node/block_code.gd +++ b/addons/block_code/block_code_node/block_code.gd @@ -3,7 +3,7 @@ class_name BlockCode extends Node -@export var block_script: BlockScriptData = null +@export var block_script: BlockScriptSerialization = null func _ready(): @@ -25,10 +25,10 @@ func _enter_tree(): # Create script if block_script == null: - var new_bsd: BlockScriptData = load("res://addons/block_code/ui/bsd_templates/default_bsd.tres").duplicate(true) - new_bsd.script_inherits = _get_custom_or_native_class(get_parent()) - new_bsd.generated_script = new_bsd.generated_script.replace("INHERIT_DEFAULT", new_bsd.script_inherits) - block_script = new_bsd + var new_block_script: BlockScriptSerialization = load("res://addons/block_code/serialization/default_block_script.tres").duplicate(true) + new_block_script.script_inherits = _get_custom_or_native_class(get_parent()) + new_block_script.generated_script = new_block_script.generated_script.replace("INHERIT_DEFAULT", new_block_script.script_inherits) + block_script = new_block_script func _update_parent_script(): diff --git a/addons/block_code/block_code_plugin.gd b/addons/block_code/block_code_plugin.gd index 4a4f9b3d..f7e0ac8a 100644 --- a/addons/block_code/block_code_plugin.gd +++ b/addons/block_code/block_code_plugin.gd @@ -19,15 +19,14 @@ var _selected_block_code: BlockCode var old_feature_profile: String = "" const DISABLED_CLASSES := [ - "BlockScriptData", "Block", "ControlBlock", "ParameterBlock", "StatementBlock", "SnapPoint", - "SerializedBlockTreeNodeArray", - "SerializedBlockTreeNode", - "SerializedBlock", + "BlockSerialization", + "BlockSerializedProperties", + "BlockScriptSerialization", "CategoryFactory", ] diff --git a/addons/block_code/block_definition.gd b/addons/block_code/code_generation/block_definition.gd similarity index 100% rename from addons/block_code/block_definition.gd rename to addons/block_code/code_generation/block_definition.gd diff --git a/addons/block_code/blocks_catalog.gd b/addons/block_code/code_generation/blocks_catalog.gd similarity index 90% rename from addons/block_code/blocks_catalog.gd rename to addons/block_code/code_generation/blocks_catalog.gd index 8593ff71..ec961c71 100644 --- a/addons/block_code/blocks_catalog.gd +++ b/addons/block_code/code_generation/blocks_catalog.gd @@ -1,6 +1,6 @@ extends Object -const BlockDefinition = preload("res://addons/block_code/block_definition.gd") +const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd") const Types = preload("res://addons/block_code/types/types.gd") static var _catalog: Dictionary @@ -18,7 +18,7 @@ static func setup(): block_definition.category = "Lifecycle" _catalog[&"ready_block"] = block_definition - block_definition = BlockDefinition.new(&"print", Types.BlockType.EXECUTE) + block_definition = BlockDefinition.new(&"print", Types.BlockType.STATEMENT) block_definition.label_template = "print {text: STRING}" block_definition.code_template = "print({text})" block_definition.defaults = {"text": "Hello"} diff --git a/addons/block_code/examples/pong_game/pong_game.tscn b/addons/block_code/examples/pong_game/pong_game.tscn index fb71cd4f..17654396 100644 --- a/addons/block_code/examples/pong_game/pong_game.tscn +++ b/addons/block_code/examples/pong_game/pong_game.tscn @@ -1,14 +1,13 @@ -[gd_scene load_steps=129 format=3 uid="uid://tf7b8c64ecc0"] +[gd_scene load_steps=122 format=3 uid="uid://tf7b8c64ecc0"] [ext_resource type="PackedScene" uid="uid://cg8ibi18um3vg" path="res://addons/block_code/examples/pong_game/space.tscn" id="1_y56ac"] [ext_resource type="Script" path="res://addons/block_code/block_code_node/block_code.gd" id="3_6jaq8"] [ext_resource type="Script" path="res://addons/block_code/simple_nodes/simple_character/simple_character.gd" id="3_mdrcv"] -[ext_resource type="Script" path="res://addons/block_code/ui/block_canvas/serialized_block_tree_node.gd" id="4_qtggh"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_serialization.gd" id="4_qtggh"] [ext_resource type="Texture2D" uid="uid://tplpgtnfeda0" path="res://addons/block_code/examples/pong_game/assets/paddle.png" id="4_ra7bh"] -[ext_resource type="Script" path="res://addons/block_code/ui/block_canvas/serialized_block.gd" id="5_wr38c"] -[ext_resource type="Script" path="res://addons/block_code/ui/block_canvas/serialized_block_tree_node_array.gd" id="6_ppdc3"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_serialized_properties.gd" id="5_wr38c"] [ext_resource type="Script" path="res://addons/block_code/ui/block_canvas/option_data.gd" id="7_3q6bj"] -[ext_resource type="Script" path="res://addons/block_code/block_script_data/block_script_data.gd" id="7_uuuue"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_script_serialization.gd" id="7_uuuue"] [ext_resource type="PackedScene" uid="uid://c7l70grmkauij" path="res://addons/block_code/examples/pong_game/ball.tscn" id="9_xrqll"] [ext_resource type="PackedScene" uid="uid://fhoapg3anjsu" path="res://addons/block_code/examples/pong_game/goal_area.tscn" id="12_nqmxu"] [ext_resource type="Script" path="res://addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd" id="13_tg3yk"] @@ -27,7 +26,7 @@ script = ExtResource("4_qtggh") name = &"set_prop_speed" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_860cl") +block_serialized_properties = SubResource("Resource_860cl") [sub_resource type="Resource" id="Resource_q1vhx"] script = ExtResource("5_wr38c") @@ -39,7 +38,7 @@ script = ExtResource("4_qtggh") name = &"ready_block" position = Vector2(75, 175) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_q65fe")]] -serialized_block = SubResource("Resource_q1vhx") +block_serialized_properties = SubResource("Resource_q1vhx") [sub_resource type="Resource" id="Resource_a45un"] script = ExtResource("7_3q6bj") @@ -77,7 +76,7 @@ script = ExtResource("4_qtggh") name = &"simplecharacter_move" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_d3xtc") +block_serialized_properties = SubResource("Resource_d3xtc") [sub_resource type="Resource" id="Resource_x6ddv"] script = ExtResource("5_wr38c") @@ -89,16 +88,12 @@ script = ExtResource("4_qtggh") name = &"process_block" position = Vector2(75, 300) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_7x3sw")]] -serialized_block = SubResource("Resource_x6ddv") - -[sub_resource type="Resource" id="Resource_a04yd"] -script = ExtResource("6_ppdc3") -array = Array[ExtResource("4_qtggh")]([SubResource("Resource_yiq7s"), SubResource("Resource_0m462")]) +block_serialized_properties = SubResource("Resource_x6ddv") [sub_resource type="Resource" id="Resource_m2svk"] script = ExtResource("7_uuuue") script_inherits = "SimpleCharacter" -block_trees = SubResource("Resource_a04yd") +block_trees = Array[ExtResource("4_qtggh")]([SubResource("Resource_yiq7s"), SubResource("Resource_0m462")]) variables = Array[Resource("res://addons/block_code/ui/block_canvas/variable_resource.gd")]([]) generated_script = "extends SimpleCharacter @@ -126,7 +121,7 @@ script = ExtResource("4_qtggh") name = &"set_prop_speed" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_isc56") +block_serialized_properties = SubResource("Resource_isc56") [sub_resource type="Resource" id="Resource_06s7w"] script = ExtResource("5_wr38c") @@ -138,7 +133,7 @@ script = ExtResource("4_qtggh") name = &"ready_block" position = Vector2(50, 175) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_ttkrd")]] -serialized_block = SubResource("Resource_06s7w") +block_serialized_properties = SubResource("Resource_06s7w") [sub_resource type="Resource" id="Resource_y2msu"] script = ExtResource("7_3q6bj") @@ -176,7 +171,7 @@ script = ExtResource("4_qtggh") name = &"simplecharacter_move" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_bl8w1") +block_serialized_properties = SubResource("Resource_bl8w1") [sub_resource type="Resource" id="Resource_3wgnl"] script = ExtResource("5_wr38c") @@ -188,16 +183,12 @@ script = ExtResource("4_qtggh") name = &"process_block" position = Vector2(50, 300) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_enqe8")]] -serialized_block = SubResource("Resource_3wgnl") - -[sub_resource type="Resource" id="Resource_y05sx"] -script = ExtResource("6_ppdc3") -array = Array[ExtResource("4_qtggh")]([SubResource("Resource_hrubs"), SubResource("Resource_s8vl4")]) +block_serialized_properties = SubResource("Resource_3wgnl") [sub_resource type="Resource" id="Resource_ysbi4"] script = ExtResource("7_uuuue") script_inherits = "SimpleCharacter" -block_trees = SubResource("Resource_y05sx") +block_trees = Array[ExtResource("4_qtggh")]([SubResource("Resource_hrubs"), SubResource("Resource_s8vl4")]) variables = Array[Resource("res://addons/block_code/ui/block_canvas/variable_resource.gd")]([]) generated_script = "extends SimpleCharacter @@ -229,7 +220,7 @@ script = ExtResource("4_qtggh") name = &"load_sound" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_rf047") +block_serialized_properties = SubResource("Resource_rf047") [sub_resource type="Resource" id="Resource_md4i5"] script = ExtResource("5_wr38c") @@ -249,7 +240,7 @@ script = ExtResource("4_qtggh") name = &"load_sound" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_d34ke")]] -serialized_block = SubResource("Resource_md4i5") +block_serialized_properties = SubResource("Resource_md4i5") [sub_resource type="Resource" id="Resource_4luvu"] script = ExtResource("5_wr38c") @@ -269,7 +260,7 @@ script = ExtResource("4_qtggh") name = &"load_sound" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_roxh4")]] -serialized_block = SubResource("Resource_4luvu") +block_serialized_properties = SubResource("Resource_4luvu") [sub_resource type="Resource" id="Resource_b0aen"] script = ExtResource("5_wr38c") @@ -281,7 +272,7 @@ script = ExtResource("4_qtggh") name = &"ready_block" position = Vector2(54, 47) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_gywyt")]] -serialized_block = SubResource("Resource_b0aen") +block_serialized_properties = SubResource("Resource_b0aen") [sub_resource type="Resource" id="Resource_05cdj"] script = ExtResource("5_wr38c") @@ -293,7 +284,7 @@ script = ExtResource("4_qtggh") name = &"viewport_center" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_05cdj") +block_serialized_properties = SubResource("Resource_05cdj") [sub_resource type="Resource" id="Resource_uob83"] script = ExtResource("5_wr38c") @@ -317,7 +308,7 @@ script = ExtResource("4_qtggh") name = &"play_sound" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_uob83") +block_serialized_properties = SubResource("Resource_uob83") [sub_resource type="Resource" id="Resource_5x1be"] script = ExtResource("5_wr38c") @@ -337,7 +328,7 @@ script = ExtResource("4_qtggh") name = &"rigidbody2d_physics_position" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/TopMarginContainer/MarginContainer/HBoxContainer/ParameterInput0/SnapPoint"), SubResource("Resource_kt3qw")], [NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_oawyp")]] -serialized_block = SubResource("Resource_5x1be") +block_serialized_properties = SubResource("Resource_5x1be") [sub_resource type="Resource" id="Resource_sp3a4"] script = ExtResource("5_wr38c") @@ -351,7 +342,7 @@ script = ExtResource("4_qtggh") name = &"define_method" position = Vector2(50, 275) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_ftveg")]] -serialized_block = SubResource("Resource_sp3a4") +block_serialized_properties = SubResource("Resource_sp3a4") [sub_resource type="Resource" id="Resource_r1gqk"] script = ExtResource("5_wr38c") @@ -366,7 +357,7 @@ script = ExtResource("4_qtggh") name = &"parameter_block" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_r1gqk") +block_serialized_properties = SubResource("Resource_r1gqk") [sub_resource type="Resource" id="Resource_ri33r"] script = ExtResource("5_wr38c") @@ -381,7 +372,7 @@ script = ExtResource("4_qtggh") name = &"parameter_block" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_ri33r") +block_serialized_properties = SubResource("Resource_ri33r") [sub_resource type="Resource" id="Resource_s7b4y"] script = ExtResource("5_wr38c") @@ -396,7 +387,7 @@ script = ExtResource("4_qtggh") name = &"is_node_in_group" position = Vector2(0, 0) path_child_pairs = [[NodePath("MarginContainer/HBoxContainer/ParameterInput0/SnapPoint"), SubResource("Resource_7qpii")]] -serialized_block = SubResource("Resource_s7b4y") +block_serialized_properties = SubResource("Resource_s7b4y") [sub_resource type="Resource" id="Resource_bh5jo"] script = ExtResource("5_wr38c") @@ -420,7 +411,7 @@ script = ExtResource("4_qtggh") name = &"play_sound" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_bh5jo") +block_serialized_properties = SubResource("Resource_bh5jo") [sub_resource type="Resource" id="Resource_mgvpf"] script = ExtResource("5_wr38c") @@ -435,7 +426,7 @@ script = ExtResource("4_qtggh") name = &"parameter_block" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_mgvpf") +block_serialized_properties = SubResource("Resource_mgvpf") [sub_resource type="Resource" id="Resource_rc730"] script = ExtResource("5_wr38c") @@ -450,7 +441,7 @@ script = ExtResource("4_qtggh") name = &"is_node_in_group" position = Vector2(0, 0) path_child_pairs = [[NodePath("MarginContainer/HBoxContainer/ParameterInput0/SnapPoint"), SubResource("Resource_mbuv7")]] -serialized_block = SubResource("Resource_rc730") +block_serialized_properties = SubResource("Resource_rc730") [sub_resource type="Resource" id="Resource_71yrt"] script = ExtResource("5_wr38c") @@ -474,7 +465,7 @@ script = ExtResource("4_qtggh") name = &"play_sound" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_71yrt") +block_serialized_properties = SubResource("Resource_71yrt") [sub_resource type="Resource" id="Resource_wkj8h"] script = ExtResource("5_wr38c") @@ -488,7 +479,7 @@ script = ExtResource("4_qtggh") name = &"if" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/MarginContainer/Rows/Row0/RowHBoxContainer/RowHBox/ParameterInput0/SnapPoint"), SubResource("Resource_fgryt")], [NodePath("VBoxContainer/MarginContainer/Rows/SnapContainer0/SnapPoint"), SubResource("Resource_f3xwp")]] -serialized_block = SubResource("Resource_wkj8h") +block_serialized_properties = SubResource("Resource_wkj8h") [sub_resource type="Resource" id="Resource_dwd2k"] script = ExtResource("5_wr38c") @@ -502,7 +493,7 @@ script = ExtResource("4_qtggh") name = &"if" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/MarginContainer/Rows/Row0/RowHBoxContainer/RowHBox/ParameterInput0/SnapPoint"), SubResource("Resource_xsgv2")], [NodePath("VBoxContainer/MarginContainer/Rows/SnapContainer0/SnapPoint"), SubResource("Resource_ic2jq")], [NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_qmdbv")]] -serialized_block = SubResource("Resource_dwd2k") +block_serialized_properties = SubResource("Resource_dwd2k") [sub_resource type="Resource" id="Resource_7mdg3"] script = ExtResource("5_wr38c") @@ -517,16 +508,12 @@ script = ExtResource("4_qtggh") name = &"rigidbody2d_on_entered" position = Vector2(50, 475) path_child_pairs = [[NodePath("VBoxContainer/TopMarginContainer/MarginContainer/HBoxContainer/ParameterOutput0/SnapPoint"), SubResource("Resource_gj1nu")], [NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_rs6a0")]] -serialized_block = SubResource("Resource_7mdg3") - -[sub_resource type="Resource" id="Resource_t48yv"] -script = ExtResource("6_ppdc3") -array = Array[ExtResource("4_qtggh")]([SubResource("Resource_1h6wi"), SubResource("Resource_gmlt0"), SubResource("Resource_tyrtu")]) +block_serialized_properties = SubResource("Resource_7mdg3") [sub_resource type="Resource" id="Resource_6m2mk"] script = ExtResource("7_uuuue") script_inherits = "RigidBody2D" -block_trees = SubResource("Resource_t48yv") +block_trees = Array[ExtResource("4_qtggh")]([SubResource("Resource_1h6wi"), SubResource("Resource_gmlt0"), SubResource("Resource_tyrtu")]) variables = Array[Resource("res://addons/block_code/ui/block_canvas/variable_resource.gd")]([]) generated_script = "extends RigidBody2D @@ -589,7 +576,7 @@ script = ExtResource("4_qtggh") name = &"parameter_block" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_itmch") +block_serialized_properties = SubResource("Resource_itmch") [sub_resource type="Resource" id="Resource_wo02o"] script = ExtResource("5_wr38c") @@ -604,7 +591,7 @@ script = ExtResource("4_qtggh") name = &"parameter_block" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_wo02o") +block_serialized_properties = SubResource("Resource_wo02o") [sub_resource type="Resource" id="Resource_ma3m2"] script = ExtResource("5_wr38c") @@ -619,7 +606,7 @@ script = ExtResource("4_qtggh") name = &"is_node_in_group" position = Vector2(0, 0) path_child_pairs = [[NodePath("MarginContainer/HBoxContainer/ParameterInput0/SnapPoint"), SubResource("Resource_dcwek")]] -serialized_block = SubResource("Resource_ma3m2") +block_serialized_properties = SubResource("Resource_ma3m2") [sub_resource type="Resource" id="Resource_dkm1h"] script = ExtResource("5_wr38c") @@ -634,7 +621,7 @@ script = ExtResource("4_qtggh") name = &"call_group_method" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_dkm1h") +block_serialized_properties = SubResource("Resource_dkm1h") [sub_resource type="Resource" id="Resource_lm5iy"] script = ExtResource("5_wr38c") @@ -649,7 +636,7 @@ script = ExtResource("4_qtggh") name = &"call_group_method" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_57tvt")]] -serialized_block = SubResource("Resource_lm5iy") +block_serialized_properties = SubResource("Resource_lm5iy") [sub_resource type="Resource" id="Resource_yd7xk"] script = ExtResource("5_wr38c") @@ -663,7 +650,7 @@ script = ExtResource("4_qtggh") name = &"if" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/MarginContainer/Rows/Row0/RowHBoxContainer/RowHBox/ParameterInput0/SnapPoint"), SubResource("Resource_bny5u")], [NodePath("VBoxContainer/MarginContainer/Rows/SnapContainer0/SnapPoint"), SubResource("Resource_26pqe")]] -serialized_block = SubResource("Resource_yd7xk") +block_serialized_properties = SubResource("Resource_yd7xk") [sub_resource type="Resource" id="Resource_fufky"] script = ExtResource("5_wr38c") @@ -678,16 +665,12 @@ script = ExtResource("4_qtggh") name = &"area2d_on_entered" position = Vector2(100, 50) path_child_pairs = [[NodePath("VBoxContainer/TopMarginContainer/MarginContainer/HBoxContainer/ParameterOutput0/SnapPoint"), SubResource("Resource_3wodo")], [NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_wva5q")]] -serialized_block = SubResource("Resource_fufky") - -[sub_resource type="Resource" id="Resource_v6too"] -script = ExtResource("6_ppdc3") -array = Array[ExtResource("4_qtggh")]([SubResource("Resource_fkj3e")]) +block_serialized_properties = SubResource("Resource_fufky") [sub_resource type="Resource" id="Resource_4xylj"] script = ExtResource("7_uuuue") script_inherits = "Area2D" -block_trees = SubResource("Resource_v6too") +block_trees = Array[ExtResource("4_qtggh")]([SubResource("Resource_fkj3e")]) variables = Array[Resource("res://addons/block_code/ui/block_canvas/variable_resource.gd")]([]) generated_script = "extends Area2D @@ -718,7 +701,7 @@ script = ExtResource("4_qtggh") name = &"parameter_block" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_8h48s") +block_serialized_properties = SubResource("Resource_8h48s") [sub_resource type="Resource" id="Resource_n8f73"] script = ExtResource("5_wr38c") @@ -733,7 +716,7 @@ script = ExtResource("4_qtggh") name = &"parameter_block" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_n8f73") +block_serialized_properties = SubResource("Resource_n8f73") [sub_resource type="Resource" id="Resource_lurjo"] script = ExtResource("5_wr38c") @@ -748,7 +731,7 @@ script = ExtResource("4_qtggh") name = &"is_node_in_group" position = Vector2(0, 0) path_child_pairs = [[NodePath("MarginContainer/HBoxContainer/ParameterInput0/SnapPoint"), SubResource("Resource_tnwiy")]] -serialized_block = SubResource("Resource_lurjo") +block_serialized_properties = SubResource("Resource_lurjo") [sub_resource type="Resource" id="Resource_y2wc6"] script = ExtResource("5_wr38c") @@ -763,7 +746,7 @@ script = ExtResource("4_qtggh") name = &"call_group_method" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_y2wc6") +block_serialized_properties = SubResource("Resource_y2wc6") [sub_resource type="Resource" id="Resource_daagb"] script = ExtResource("5_wr38c") @@ -778,7 +761,7 @@ script = ExtResource("4_qtggh") name = &"call_group_method" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_krykp")]] -serialized_block = SubResource("Resource_daagb") +block_serialized_properties = SubResource("Resource_daagb") [sub_resource type="Resource" id="Resource_twkoi"] script = ExtResource("5_wr38c") @@ -792,7 +775,7 @@ script = ExtResource("4_qtggh") name = &"if" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/MarginContainer/Rows/Row0/RowHBoxContainer/RowHBox/ParameterInput0/SnapPoint"), SubResource("Resource_j6idn")], [NodePath("VBoxContainer/MarginContainer/Rows/SnapContainer0/SnapPoint"), SubResource("Resource_klxbs")]] -serialized_block = SubResource("Resource_twkoi") +block_serialized_properties = SubResource("Resource_twkoi") [sub_resource type="Resource" id="Resource_c4had"] script = ExtResource("5_wr38c") @@ -807,16 +790,12 @@ script = ExtResource("4_qtggh") name = &"area2d_on_entered" position = Vector2(75, 50) path_child_pairs = [[NodePath("VBoxContainer/TopMarginContainer/MarginContainer/HBoxContainer/ParameterOutput0/SnapPoint"), SubResource("Resource_0x61c")], [NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_1a3km")]] -serialized_block = SubResource("Resource_c4had") - -[sub_resource type="Resource" id="Resource_14gac"] -script = ExtResource("6_ppdc3") -array = Array[ExtResource("4_qtggh")]([SubResource("Resource_qtw4n")]) +block_serialized_properties = SubResource("Resource_c4had") [sub_resource type="Resource" id="Resource_xoc8a"] script = ExtResource("7_uuuue") script_inherits = "Area2D" -block_trees = SubResource("Resource_14gac") +block_trees = Array[ExtResource("4_qtggh")]([SubResource("Resource_qtw4n")]) variables = Array[Resource("res://addons/block_code/ui/block_canvas/variable_resource.gd")]([]) generated_script = "extends Area2D @@ -846,7 +825,7 @@ script = ExtResource("4_qtggh") name = &"add_to_group" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_tqdqf") +block_serialized_properties = SubResource("Resource_tqdqf") [sub_resource type="Resource" id="Resource_yuj6e"] script = ExtResource("5_wr38c") @@ -860,7 +839,7 @@ script = ExtResource("4_qtggh") name = &"simplescoring_set_score" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_uxpim")]] -serialized_block = SubResource("Resource_yuj6e") +block_serialized_properties = SubResource("Resource_yuj6e") [sub_resource type="Resource" id="Resource_gkoq3"] script = ExtResource("5_wr38c") @@ -874,7 +853,7 @@ script = ExtResource("4_qtggh") name = &"simplescoring_set_score" position = Vector2(0, 0) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_oar78")]] -serialized_block = SubResource("Resource_gkoq3") +block_serialized_properties = SubResource("Resource_gkoq3") [sub_resource type="Resource" id="Resource_g3mty"] script = ExtResource("5_wr38c") @@ -886,7 +865,7 @@ script = ExtResource("4_qtggh") name = &"ready_block" position = Vector2(54, 47) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_8xxm3")]] -serialized_block = SubResource("Resource_g3mty") +block_serialized_properties = SubResource("Resource_g3mty") [sub_resource type="Resource" id="Resource_3j7i4"] script = ExtResource("5_wr38c") @@ -900,7 +879,7 @@ script = ExtResource("4_qtggh") name = &"simplescoring_change_score" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_3j7i4") +block_serialized_properties = SubResource("Resource_3j7i4") [sub_resource type="Resource" id="Resource_2e0ed"] script = ExtResource("5_wr38c") @@ -914,7 +893,7 @@ script = ExtResource("4_qtggh") name = &"define_method" position = Vector2(50, 300) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_ntjp0")]] -serialized_block = SubResource("Resource_2e0ed") +block_serialized_properties = SubResource("Resource_2e0ed") [sub_resource type="Resource" id="Resource_cxj82"] script = ExtResource("5_wr38c") @@ -928,7 +907,7 @@ script = ExtResource("4_qtggh") name = &"simplescoring_change_score" position = Vector2(0, 0) path_child_pairs = [] -serialized_block = SubResource("Resource_cxj82") +block_serialized_properties = SubResource("Resource_cxj82") [sub_resource type="Resource" id="Resource_udc68"] script = ExtResource("5_wr38c") @@ -942,16 +921,12 @@ script = ExtResource("4_qtggh") name = &"define_method" position = Vector2(50, 450) path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_c17ry")]] -serialized_block = SubResource("Resource_udc68") - -[sub_resource type="Resource" id="Resource_cu24c"] -script = ExtResource("6_ppdc3") -array = Array[ExtResource("4_qtggh")]([SubResource("Resource_njwj4"), SubResource("Resource_t8g7r"), SubResource("Resource_v2aur")]) +block_serialized_properties = SubResource("Resource_udc68") [sub_resource type="Resource" id="Resource_q418f"] script = ExtResource("7_uuuue") script_inherits = "SimpleScoring" -block_trees = SubResource("Resource_cu24c") +block_trees = Array[ExtResource("4_qtggh")]([SubResource("Resource_njwj4"), SubResource("Resource_t8g7r"), SubResource("Resource_v2aur")]) variables = Array[Resource("res://addons/block_code/ui/block_canvas/variable_resource.gd")]([]) generated_script = "extends SimpleScoring diff --git a/addons/block_code/block_script_data/block_script_data.gd b/addons/block_code/serialization/block_script_serialization.gd similarity index 54% rename from addons/block_code/block_script_data/block_script_data.gd rename to addons/block_code/serialization/block_script_serialization.gd index 3502ca73..74be0856 100644 --- a/addons/block_code/block_script_data/block_script_data.gd +++ b/addons/block_code/serialization/block_script_serialization.gd @@ -1,14 +1,14 @@ -class_name BlockScriptData +class_name BlockScriptSerialization extends Resource @export var script_inherits: String -@export var block_trees: SerializedBlockTreeNodeArray +@export var block_trees: Array[BlockSerialization] @export var variables: Array[VariableResource] @export var generated_script: String @export var version: int -func _init(p_script_inherits: String = "", p_block_trees: SerializedBlockTreeNodeArray = null, p_variables: Array[VariableResource] = [], p_generated_script: String = "", p_version = 0): +func _init(p_script_inherits: String = "", p_block_trees: Array[BlockSerialization] = [], p_variables: Array[VariableResource] = [], p_generated_script: String = "", p_version = 0): script_inherits = p_script_inherits block_trees = p_block_trees generated_script = p_generated_script diff --git a/addons/block_code/ui/block_canvas/serialized_block_tree_node.gd b/addons/block_code/serialization/block_serialization.gd similarity index 54% rename from addons/block_code/ui/block_canvas/serialized_block_tree_node.gd rename to addons/block_code/serialization/block_serialization.gd index 9f4b95fd..433ca567 100644 --- a/addons/block_code/ui/block_canvas/serialized_block_tree_node.gd +++ b/addons/block_code/serialization/block_serialization.gd @@ -1,4 +1,4 @@ -class_name SerializedBlockTreeNode +class_name BlockSerialization extends Resource @export var name: StringName @@ -6,11 +6,11 @@ extends Resource @export var path_child_pairs: Array # TODO: Remove once the data/UI decouple is done. -@export var serialized_block: SerializedBlock +@export var block_serialized_properties: BlockSerializedProperties -func _init(p_name: StringName, p_position: Vector2 = Vector2.ZERO, p_serialized_block: SerializedBlock = null, p_path_child_pairs: Array = []): +func _init(p_name: StringName, p_position: Vector2 = Vector2.ZERO, p_block_serialized_properties: BlockSerializedProperties = null, p_path_child_pairs: Array = []): name = p_name position = p_position - serialized_block = p_serialized_block + block_serialized_properties = p_block_serialized_properties path_child_pairs = p_path_child_pairs diff --git a/addons/block_code/ui/block_canvas/serialized_block.gd b/addons/block_code/serialization/block_serialized_properties.gd similarity index 68% rename from addons/block_code/ui/block_canvas/serialized_block.gd rename to addons/block_code/serialization/block_serialized_properties.gd index 30a54349..2841c6ca 100644 --- a/addons/block_code/ui/block_canvas/serialized_block.gd +++ b/addons/block_code/serialization/block_serialized_properties.gd @@ -1,6 +1,8 @@ -class_name SerializedBlock +class_name BlockSerializedProperties extends Resource +# TODO: Remove this class after removing the remaining serialization. + @export var block_class: StringName @export var serialized_props: Array diff --git a/addons/block_code/serialization/default_block_script.tres b/addons/block_code/serialization/default_block_script.tres new file mode 100644 index 00000000..ca5ee151 --- /dev/null +++ b/addons/block_code/serialization/default_block_script.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="BlockScriptSerialization" load_steps=6 format=3 uid="uid://dit7fykhl3h48"] + +[ext_resource type="Script" path="res://addons/block_code/serialization/block_serialization.gd" id="1_barc5"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_serialized_properties.gd" id="2_cgfpx"] +[ext_resource type="Script" path="res://addons/block_code/serialization/block_script_serialization.gd" id="4_cqq7x"] + +[sub_resource type="Resource" id="Resource_b0aen"] +script = ExtResource("2_cgfpx") +block_class = &"EntryBlock" +serialized_props = [["color", Color(0.92549, 0.231373, 0.34902, 1)], ["scope", ""], ["param_input_strings", {}]] + +[sub_resource type="Resource" id="Resource_1h6wi"] +script = ExtResource("1_barc5") +name = &"ready_block" +position = Vector2(54, 47) +path_child_pairs = [] +block_serialized_properties = SubResource("Resource_b0aen") + +[resource] +script = ExtResource("4_cqq7x") +script_inherits = "INHERIT_DEFAULT" +block_trees = Array[ExtResource("1_barc5")]([SubResource("Resource_1h6wi")]) +variables = Array[Resource("res://addons/block_code/ui/block_canvas/variable_resource.gd")]([]) +generated_script = "extends INHERIT_DEFAULT" +version = 0 diff --git a/addons/block_code/simple_nodes/simple_character/simple_character.gd b/addons/block_code/simple_nodes/simple_character/simple_character.gd index d62913a3..73ca8925 100644 --- a/addons/block_code/simple_nodes/simple_character/simple_character.gd +++ b/addons/block_code/simple_nodes/simple_character/simple_character.gd @@ -118,7 +118,7 @@ static func get_custom_blocks() -> Array[Block]: # Movement b = CategoryFactory.BLOCKS["statement_block"].instantiate() b.block_name = "simplecharacter_move" - b.block_type = Types.BlockType.EXECUTE + b.block_type = Types.BlockType.STATEMENT b.block_format = "Move with {player: OPTION} buttons as {kind: OPTION}" # TODO: delta here is assumed to be the parameter name of # the _process or _physics_process method: diff --git a/addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd b/addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd index 8bee47cc..0dd88609 100644 --- a/addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd +++ b/addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd @@ -70,7 +70,7 @@ static func get_custom_blocks() -> Array[Block]: for player in _POSITIONS_FOR_PLAYER: b = CategoryFactory.BLOCKS["statement_block"].instantiate() b.block_name = "simplescoring_set_score" - b.block_type = Types.BlockType.EXECUTE + b.block_type = Types.BlockType.STATEMENT b.block_format = "Set player %s score to {score: INT}" % player b.statement = "score_%s = {score}" % _POSITIONS_FOR_PLAYER[player] b.category = "Info | Score" @@ -78,7 +78,7 @@ static func get_custom_blocks() -> Array[Block]: b = CategoryFactory.BLOCKS["statement_block"].instantiate() b.block_name = "simplescoring_change_score" - b.block_type = Types.BlockType.EXECUTE + b.block_type = Types.BlockType.STATEMENT b.block_format = "Change player %s score by {score: INT}" % player b.statement = "score_%s += {score}" % _POSITIONS_FOR_PLAYER[player] b.category = "Info | Score" diff --git a/addons/block_code/types/types.gd b/addons/block_code/types/types.gd index d9f2b59c..fe73e757 100644 --- a/addons/block_code/types/types.gd +++ b/addons/block_code/types/types.gd @@ -3,8 +3,9 @@ extends Node enum BlockType { NONE, ENTRY, - EXECUTE, + STATEMENT, VALUE, + CONTROL, } const VARIANT_TYPE_TO_STRING: Dictionary = { diff --git a/addons/block_code/ui/block_canvas/block_canvas.gd b/addons/block_code/ui/block_canvas/block_canvas.gd index d34c4139..bb7ae4ec 100644 --- a/addons/block_code/ui/block_canvas/block_canvas.gd +++ b/addons/block_code/ui/block_canvas/block_canvas.gd @@ -33,7 +33,7 @@ const ZOOM_FACTOR: float = 1.1 @onready var _mouse_override: Control = %MouseOverride @onready var _zoom_label: Label = %ZoomLabel -var _current_bsd: BlockScriptData +var _current_block_script: BlockScriptSerialization var _block_scenes_by_class = {} var _panning := false var zoom: float: @@ -96,12 +96,12 @@ func set_child(n: Node): set_child(c) -func bsd_selected(bsd: BlockScriptData): +func block_script_selected(block_script: BlockScriptSerialization): clear_canvas() var edited_node = EditorInterface.get_inspector().get_edited_object() as Node - if bsd != _current_bsd: + if block_script != _current_block_script: _window.position = Vector2(0, 0) zoom = 1 @@ -115,18 +115,18 @@ func bsd_selected(bsd: BlockScriptData): _open_scene_button.disabled = true _replace_block_code_button.disabled = true - if bsd != null: - _load_bsd(bsd) + if block_script != null: + _load_block_script(block_script) _window.visible = true _zoom_label.visible = true - if bsd != _current_bsd: + if block_script != _current_block_script: reset_window_position() elif edited_node == null: _empty_box.visible = true elif BlockCodePlugin.node_has_block_code(edited_node): # If the selected node has a block code node, but BlockCodePlugin didn't - # provide it to bsd_selected, we assume the block code itself is not + # provide it to block_script_selected, we assume the block code itself is not # editable. In that case, provide options to either edit the node's # scene file, or override the BlockCode node. This is mostly to avoid # creating a situation where a node has multiple BlockCode nodes. @@ -139,35 +139,28 @@ func bsd_selected(bsd: BlockScriptData): _selected_node_label.text = _selected_node_label_format.format({"node": edited_node.name}) _add_block_code_button.disabled = false - _current_bsd = bsd + _current_block_script = block_script -func _load_bsd(bsd: BlockScriptData): - for tree in bsd.block_trees.array: +func _load_block_script(block_script: BlockScriptSerialization): + for tree in block_script.block_trees: load_tree(_window, tree) -func scene_has_bsd_nodes() -> bool: - var scene_root = EditorInterface.get_edited_scene_root() - if not scene_root: - return false - return scene_root.find_children("*", "BlockCode").size() > 0 - - func clear_canvas(): for child in _window.get_children(): _window.remove_child(child) child.queue_free() -func load_tree(parent: Node, node: SerializedBlockTreeNode): +func load_tree(parent: Node, node: BlockSerialization): var scene: Block = Util.instantiate_block(node.name) # TODO: Remove once the data/UI decouple is done. if scene == null: - var _block_scene_path = _block_scenes_by_class[node.serialized_block.block_class] + var _block_scene_path = _block_scenes_by_class[node.block_serialized_properties.block_class] scene = load(_block_scene_path).instantiate() - for prop_pair in node.serialized_block.serialized_props: + for prop_pair in node.block_serialized_properties.serialized_props: scene.set(prop_pair[0], prop_pair[1]) scene.position = node.position @@ -182,14 +175,14 @@ func load_tree(parent: Node, node: SerializedBlockTreeNode): func rebuild_block_trees(undo_redo): - var block_trees_array: Array[SerializedBlockTreeNode] + var block_trees: Array[BlockSerialization] for c in _window.get_children(): - block_trees_array.append(build_tree(c, undo_redo)) - undo_redo.add_undo_property(_current_bsd.block_trees, "array", _current_bsd.block_trees.array) - undo_redo.add_do_property(_current_bsd.block_trees, "array", block_trees_array) + block_trees.append(build_tree(c, undo_redo)) + undo_redo.add_undo_property(_current_block_script, "block_trees", _current_block_script.block_trees) + undo_redo.add_do_property(_current_block_script, "block_trees", block_trees) -func build_tree(block: Block, undo_redo: EditorUndoRedoManager) -> SerializedBlockTreeNode: +func build_tree(block: Block, undo_redo: EditorUndoRedoManager) -> BlockSerialization: var path_child_pairs = [] block.update_resources(undo_redo) @@ -326,6 +319,6 @@ func set_mouse_override(override: bool): _mouse_override.mouse_default_cursor_shape = Control.CURSOR_ARROW -func generate_script_from_current_window(bsd: BlockScriptData) -> String: +func generate_script_from_current_window(block_script: BlockScriptSerialization) -> String: # TODO: implement multiple windows - return BlockTreeUtil.generate_script_from_nodes(_window.get_children(), bsd) + return BlockTreeUtil.generate_script_from_nodes(_window.get_children(), block_script) diff --git a/addons/block_code/ui/block_canvas/serialized_block_tree_node_array.gd b/addons/block_code/ui/block_canvas/serialized_block_tree_node_array.gd deleted file mode 100644 index 7d78cfb2..00000000 --- a/addons/block_code/ui/block_canvas/serialized_block_tree_node_array.gd +++ /dev/null @@ -1,8 +0,0 @@ -class_name SerializedBlockTreeNodeArray -extends Resource - -@export var array: Array[SerializedBlockTreeNode] - - -func _init(p_array: Array[SerializedBlockTreeNode] = []): - array = p_array diff --git a/addons/block_code/ui/block_tree_util.gd b/addons/block_code/ui/block_tree_util.gd index acd1a3da..d5ebf718 100644 --- a/addons/block_code/ui/block_tree_util.gd +++ b/addons/block_code/ui/block_tree_util.gd @@ -3,7 +3,7 @@ extends Object const InstructionTree = preload("res://addons/block_code/instruction_tree/instruction_tree.gd") -static func generate_script_from_nodes(nodes: Array[Node], bsd: BlockScriptData) -> String: +static func generate_script_from_nodes(nodes: Array[Node], block_script: BlockScriptSerialization) -> String: var entry_blocks_by_entry_statement: Dictionary = {} for block in nodes: @@ -18,9 +18,9 @@ static func generate_script_from_nodes(nodes: Array[Node], bsd: BlockScriptData) var script: String = "" - script += "extends %s\n\n" % bsd.script_inherits + script += "extends %s\n\n" % block_script.script_inherits - for variable in bsd.variables: + for variable in block_script.variables: script += "var %s: %s\n\n" % [variable.var_name, type_string(variable.var_type)] script += "\n" diff --git a/addons/block_code/ui/blocks/block/block.gd b/addons/block_code/ui/blocks/block/block.gd index 53bbb467..6d97c605 100644 --- a/addons/block_code/ui/blocks/block/block.gd +++ b/addons/block_code/ui/blocks/block/block.gd @@ -2,7 +2,7 @@ class_name Block extends MarginContainer -const BlocksCatalog = preload("res://addons/block_code/blocks_catalog.gd") +const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_catalog.gd") const InstructionTree = preload("res://addons/block_code/instruction_tree/instruction_tree.gd") const Types = preload("res://addons/block_code/types/types.gd") @@ -19,7 +19,7 @@ signal modified @export var color: Color = Color(1., 1., 1.) ## Type of block to check if can be attached to snap point -@export var block_type: Types.BlockType = Types.BlockType.EXECUTE +@export var block_type: Types.BlockType = Types.BlockType.STATEMENT ## Category to add the block to @export var category: String @@ -32,7 +32,7 @@ signal modified @export var scope: String = "" ## The resource containing the block properties and the snapped blocks -@export var resource: SerializedBlockTreeNode +@export var resource: BlockSerialization # FIXME: Add export to this variable and remove bottom_snap_path above. # There is a bug in Godot 4.2 that prevents using SnapPoint directly: @@ -117,8 +117,8 @@ func get_instruction_node() -> InstructionTree.TreeNode: func update_resources(undo_redo: EditorUndoRedoManager): if resource == null: - var serialized_block = SerializedBlock.new(get_block_class(), get_serialized_props()) - resource = SerializedBlockTreeNode.new(block_name, position, serialized_block) + var block_serialized_properties = BlockSerializedProperties.new(get_block_class(), get_serialized_props()) + resource = BlockSerialization.new(block_name, position, block_serialized_properties) return if resource.position != position: @@ -127,9 +127,9 @@ func update_resources(undo_redo: EditorUndoRedoManager): var serialized_props = get_serialized_props() - if serialized_props != resource.serialized_block.serialized_props: - undo_redo.add_undo_property(resource.serialized_block, "serialized_props", resource.serialized_block.serialized_props) - undo_redo.add_do_property(resource.serialized_block, "serialized_props", serialized_props) + if serialized_props != resource.block_serialized_properties.serialized_props: + undo_redo.add_undo_property(resource.block_serialized_properties, "serialized_props", resource.block_serialized_properties.serialized_props) + undo_redo.add_do_property(resource.block_serialized_properties, "serialized_props", serialized_props) # Override this method to add more serialized properties diff --git a/addons/block_code/ui/blocks/statement_block/statement_block.gd b/addons/block_code/ui/blocks/statement_block/statement_block.gd index fb920108..a39ce705 100644 --- a/addons/block_code/ui/blocks/statement_block/statement_block.gd +++ b/addons/block_code/ui/blocks/statement_block/statement_block.gd @@ -19,7 +19,7 @@ var param_input_strings: Dictionary # Only loaded from serialized func _ready(): super() - if block_type != Types.BlockType.EXECUTE: + if block_type != Types.BlockType.STATEMENT: _background.show_top = false _background.color = color diff --git a/addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd b/addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd index 8b39f4b5..6b80f786 100644 --- a/addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd +++ b/addons/block_code/ui/blocks/utilities/snap_point/snap_point.gd @@ -4,7 +4,7 @@ extends MarginContainer const Types = preload("res://addons/block_code/types/types.gd") -@export var block_type: Types.BlockType = Types.BlockType.EXECUTE +@export var block_type: Types.BlockType = Types.BlockType.STATEMENT @export var snapped_block: Block: get: diff --git a/addons/block_code/ui/bsd_templates/default_bsd.tres b/addons/block_code/ui/bsd_templates/default_bsd.tres deleted file mode 100644 index 5bfa7671..00000000 --- a/addons/block_code/ui/bsd_templates/default_bsd.tres +++ /dev/null @@ -1,30 +0,0 @@ -[gd_resource type="Resource" script_class="BlockScriptData" load_steps=8 format=3 uid="uid://dit7fykhl3h48"] - -[ext_resource type="Script" path="res://addons/block_code/ui/block_canvas/serialized_block_tree_node.gd" id="1_barc5"] -[ext_resource type="Script" path="res://addons/block_code/ui/block_canvas/serialized_block.gd" id="2_cgfpx"] -[ext_resource type="Script" path="res://addons/block_code/ui/block_canvas/serialized_block_tree_node_array.gd" id="3_gx4d7"] -[ext_resource type="Script" path="res://addons/block_code/block_script_data/block_script_data.gd" id="4_cqq7x"] - -[sub_resource type="Resource" id="Resource_b0aen"] -script = ExtResource("2_cgfpx") -block_class = &"EntryBlock" -serialized_props = [["color", Color(0.92549, 0.231373, 0.34902, 1)], ["scope", ""], ["param_input_strings", {}]] - -[sub_resource type="Resource" id="Resource_1h6wi"] -script = ExtResource("1_barc5") -name = &"ready_block" -position = Vector2(54, 47) -path_child_pairs = [] -serialized_block = SubResource("Resource_b0aen") - -[sub_resource type="Resource" id="Resource_nkub8"] -script = ExtResource("3_gx4d7") -array = Array[ExtResource("1_barc5")]([SubResource("Resource_1h6wi")]) - -[resource] -script = ExtResource("4_cqq7x") -script_inherits = "INHERIT_DEFAULT" -block_trees = SubResource("Resource_nkub8") -variables = Array[Resource("res://addons/block_code/ui/block_canvas/variable_resource.gd")]([]) -generated_script = "extends INHERIT_DEFAULT" -version = 0 diff --git a/addons/block_code/ui/main_panel.gd b/addons/block_code/ui/main_panel.gd index 4807b95e..810f378e 100644 --- a/addons/block_code/ui/main_panel.gd +++ b/addons/block_code/ui/main_panel.gd @@ -54,14 +54,14 @@ func _on_undo_redo_version_changed(): if _current_block_code_node == null: return - var block_script: BlockScriptData = _current_block_code_node.block_script - _picker.bsd_selected(block_script) - _title_bar.bsd_selected(block_script) - _block_canvas.bsd_selected(block_script) + var block_script: BlockScriptSerialization = _current_block_code_node.block_script + _picker.block_script_selected(block_script) + _title_bar.block_script_selected(block_script) + _block_canvas.block_script_selected(block_script) func _on_show_script_button_pressed(): - var block_script: BlockScriptData = _current_block_code_node.block_script + var block_script: BlockScriptSerialization = _current_block_code_node.block_script var script: String = _block_canvas.generate_script_from_current_window(block_script) script_window_requested.emit(script) @@ -112,14 +112,14 @@ func switch_scene(scene_root: Node): func switch_block_code_node(block_code_node: BlockCode): - var block_script: BlockScriptData = block_code_node.block_script if block_code_node else null + var block_script: BlockScriptSerialization = block_code_node.block_script if block_code_node else null _current_block_code_node = block_code_node _delete_node_button.disabled = _current_block_code_node == null if _current_block_code_node != null: _try_migration() - _picker.bsd_selected(block_script) - _title_bar.bsd_selected(block_script) - _block_canvas.bsd_selected(block_script) + _picker.block_script_selected(block_script) + _title_bar.block_script_selected(block_script) + _block_canvas.block_script_selected(block_script) func save_script(): @@ -133,7 +133,7 @@ func save_script(): print("Block code for {node} is not editable.".format({"node": _current_block_code_node})) return - var block_script: BlockScriptData = _current_block_code_node.block_script + var block_script: BlockScriptSerialization = _current_block_code_node.block_script var resource_path_split = block_script.resource_path.split("::", true, 1) var resource_scene = resource_path_split[0] @@ -180,7 +180,7 @@ func _input(event): func _print_generated_script(): if _current_block_code_node == null: return - var block_script: BlockScriptData = _current_block_code_node.block_script + var block_script: BlockScriptSerialization = _current_block_code_node.block_script var script: String = _block_canvas.generate_script_from_current_window(block_script) print(script) print("Debug script! (not saved)") @@ -266,7 +266,7 @@ func _create_variable(variable: VariableResource): print("No script loaded to add variable to.") return - var block_script: BlockScriptData = _current_block_code_node.block_script + var block_script: BlockScriptSerialization = _current_block_code_node.block_script undo_redo.create_action("Create variable %s in %s's block code script" % [variable.var_name, _current_block_code_node.get_parent().name]) undo_redo.add_undo_property(_current_block_code_node.block_script, "variables", _current_block_code_node.block_script.variables) diff --git a/addons/block_code/ui/picker/categories/category_factory.gd b/addons/block_code/ui/picker/categories/category_factory.gd index 848d5301..d5e06b4e 100644 --- a/addons/block_code/ui/picker/categories/category_factory.gd +++ b/addons/block_code/ui/picker/categories/category_factory.gd @@ -460,7 +460,7 @@ static func get_general_blocks() -> Array[Block]: #region Sounds b = BLOCKS["statement_block"].instantiate() b.block_name = "load_sound" - b.block_type = Types.BlockType.EXECUTE + b.block_type = Types.BlockType.STATEMENT b.block_format = "Load file {file_path: STRING} as sound {name: STRING}" b.statement = ( """ @@ -477,7 +477,7 @@ static func get_general_blocks() -> Array[Block]: b = BLOCKS["statement_block"].instantiate() b.block_name = "play_sound" - b.block_type = Types.BlockType.EXECUTE + b.block_type = Types.BlockType.STATEMENT b.block_format = "Play the sound {name: STRING} with Volume dB {db: FLOAT} and Pitch Scale {pitch: FLOAT}" b.statement = ( """ @@ -495,7 +495,7 @@ static func get_general_blocks() -> Array[Block]: b = BLOCKS["statement_block"].instantiate() b.block_name = "pause_continue_sound" - b.block_type = Types.BlockType.EXECUTE + b.block_type = Types.BlockType.STATEMENT b.block_format = "{pause: OPTION} the sound {name: STRING}" b.statement = ( """ @@ -514,7 +514,7 @@ static func get_general_blocks() -> Array[Block]: b = BLOCKS["statement_block"].instantiate() b.block_name = "stop_sound" - b.block_type = Types.BlockType.EXECUTE + b.block_type = Types.BlockType.STATEMENT b.block_format = "Stop the sound {name: STRING}" b.statement = ( """ @@ -793,7 +793,7 @@ static func get_built_in_blocks(_class_name: String) -> Array[Block]: "CharacterBody2D": var b = BLOCKS["statement_block"].instantiate() b.block_name = "characterbody2d_move" - b.block_type = Types.BlockType.EXECUTE + b.block_type = Types.BlockType.STATEMENT b.block_format = "Move with keys {up: STRING} {down: STRING} {left: STRING} {right: STRING} with speed {speed: VECTOR2}" b.statement = ( "var dir = Vector2()\n" @@ -816,7 +816,7 @@ static func get_built_in_blocks(_class_name: String) -> Array[Block]: b = BLOCKS["statement_block"].instantiate() b.block_name = "characterbody2d_move_and_slide" - b.block_type = Types.BlockType.EXECUTE + b.block_type = Types.BlockType.STATEMENT b.block_format = "Move and slide" b.statement = "move_and_slide()" b.category = "Physics | Velocity" @@ -882,7 +882,7 @@ static func get_variable_blocks(variables: Array[VariableResource]): b = BLOCKS["statement_block"].instantiate() b.block_name = "set_var_%s" % variable.var_name - b.block_type = Types.BlockType.EXECUTE + b.block_type = Types.BlockType.STATEMENT b.block_format = "Set %s to {value: %s}" % [variable.var_name, type_string] b.statement = "%s = {value}" % [variable.var_name] b.color = BUILTIN_PROPS["Variables"].color diff --git a/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd b/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd index 61e5f417..cc3957a2 100644 --- a/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd +++ b/addons/block_code/ui/picker/categories/variable_category/create_variable_dialog.gd @@ -58,9 +58,9 @@ func check_errors(new_var_name: String) -> bool: var duplicate_variable_name := false var current_block_code = BlockCodePlugin.main_panel._current_block_code_node if current_block_code: - var current_bsd = current_block_code.block_script - if current_bsd: - for variable in current_bsd.variables: + var current_block_script = current_block_code.block_script + if current_block_script: + for variable in current_block_script.variables: if variable.var_name == new_var_name: duplicate_variable_name = true break diff --git a/addons/block_code/ui/picker/picker.gd b/addons/block_code/ui/picker/picker.gd index d68d8370..490956e3 100644 --- a/addons/block_code/ui/picker/picker.gd +++ b/addons/block_code/ui/picker/picker.gd @@ -20,8 +20,8 @@ var scroll_tween: Tween var _variable_category_display: VariableCategoryDisplay = null -func bsd_selected(bsd: BlockScriptData): - if not bsd: +func block_script_selected(block_script: BlockScriptSerialization): + if not block_script: reset_picker() return @@ -29,9 +29,9 @@ func bsd_selected(bsd: BlockScriptData): var categories_to_add: Array[BlockCategory] = [] # By default, assume the class is built-in. - var parent_class: String = bsd.script_inherits + var parent_class: String = block_script.script_inherits for class_dict in ProjectSettings.get_global_class_list(): - if class_dict.class == bsd.script_inherits: + if class_dict.class == block_script.script_inherits: var script = load(class_dict.path) if script.has_method("get_custom_categories"): categories_to_add = script.get_custom_categories() @@ -43,7 +43,7 @@ func bsd_selected(bsd: BlockScriptData): blocks_to_add.append_array(CategoryFactory.get_inherited_blocks(parent_class)) init_picker(blocks_to_add, categories_to_add) - reload_variables(bsd.variables) + reload_variables(block_script.variables) func reset_picker(): diff --git a/addons/block_code/ui/title_bar/title_bar.gd b/addons/block_code/ui/title_bar/title_bar.gd index 6f548374..710c4344 100644 --- a/addons/block_code/ui/title_bar/title_bar.gd +++ b/addons/block_code/ui/title_bar/title_bar.gd @@ -19,10 +19,10 @@ func scene_selected(scene_root: Node): _update_node_option_button_items() var current_block_code = _editor_inspector.get_edited_object() as BlockCode if not current_block_code: - bsd_selected(null) + block_script_selected(null) -func bsd_selected(bsd: BlockScriptData): +func block_script_selected(block_script: BlockScriptSerialization): # TODO: We should listen for property changes in all BlockCode nodes and # their parents. As a workaround for the UI displaying stale data, # we'll crudely update the list of BlockCode nodes whenever the @@ -30,7 +30,7 @@ func bsd_selected(bsd: BlockScriptData): _update_node_option_button_items() - var select_index = _get_index_for_bsd(bsd) + var select_index = _get_block_script_index(block_script) if _node_option_button.selected != select_index: _node_option_button.select(select_index) @@ -54,10 +54,10 @@ func _update_node_option_button_items(): _node_option_button.set_item_metadata(node_item_index, block_code) -func _get_index_for_bsd(bsd: BlockScriptData) -> int: +func _get_block_script_index(block_script: BlockScriptSerialization) -> int: for index in range(_node_option_button.item_count): var block_code_node = _node_option_button.get_item_metadata(index) - if block_code_node.block_script == bsd: + if block_code_node.block_script == block_script: return index return -1 diff --git a/addons/block_code/ui/util.gd b/addons/block_code/ui/util.gd index 53dd91d0..dddbe87b 100644 --- a/addons/block_code/ui/util.gd +++ b/addons/block_code/ui/util.gd @@ -1,12 +1,12 @@ extends Object -const BlockDefinition = preload("res://addons/block_code/block_definition.gd") -const BlocksCatalog = preload("res://addons/block_code/blocks_catalog.gd") +const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd") +const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_catalog.gd") const Types = preload("res://addons/block_code/types/types.gd") const SCENE_PER_TYPE = { Types.BlockType.ENTRY: preload("res://addons/block_code/ui/blocks/entry_block/entry_block.tscn"), - Types.BlockType.EXECUTE: preload("res://addons/block_code/ui/blocks/statement_block/statement_block.tscn"), + Types.BlockType.STATEMENT: preload("res://addons/block_code/ui/blocks/statement_block/statement_block.tscn"), } diff --git a/tests/test_instruction_tree.gd b/tests/test_instruction_tree.gd index d715c0b4..680b127d 100644 --- a/tests/test_instruction_tree.gd +++ b/tests/test_instruction_tree.gd @@ -88,10 +88,10 @@ func test_tree_node_text(): func test_script_no_nodes(): - var bsd := BlockScriptData.new("Foo") - var script := BlockTreeUtil.generate_script_from_nodes([], bsd) + var block_script := BlockScriptSerialization.new("Foo") + var text_script := BlockTreeUtil.generate_script_from_nodes([], block_script) assert_eq( - script, + text_script, ( """\ extends Foo @@ -104,11 +104,11 @@ func test_script_no_nodes(): func test_script_no_entry_blocks(): - var bsd := BlockScriptData.new("Foo") + var block_script := BlockScriptSerialization.new("Foo") var nodes: Array[Node] = [Node.new(), Node2D.new(), Control.new()] - var script := BlockTreeUtil.generate_script_from_nodes(nodes, bsd) + var text_script := BlockTreeUtil.generate_script_from_nodes(nodes, block_script) assert_eq( - script, + text_script, ( """\ extends Foo @@ -137,10 +137,10 @@ func test_basic_script(): assert_true(ready_block.bottom_snap.has_snapped_block()) assert_eq(ready_block.bottom_snap.get_snapped_block(), print_block) - var bsd := BlockScriptData.new("Node2D") - var script := BlockTreeUtil.generate_script_from_nodes([ready_block], bsd) + var block_script := BlockScriptSerialization.new("Node2D") + var text_script := BlockTreeUtil.generate_script_from_nodes([ready_block], block_script) assert_eq( - script, + text_script, ( """\ extends Node2D @@ -165,10 +165,10 @@ func test_multiple_entry_script(): var ready_block_2: Block = dup_node(ready_block) - var bsd := BlockScriptData.new("Node2D") - var script := BlockTreeUtil.generate_script_from_nodes([ready_block, ready_block_2], bsd) + var block_script := BlockScriptSerialization.new("Node2D") + var text_script := BlockTreeUtil.generate_script_from_nodes([ready_block, ready_block_2], block_script) assert_eq( - script, + text_script, ( """\ extends Node2D @@ -196,10 +196,10 @@ func test_signal_script(): entered_block.bottom_snap.insert_snapped_block(print_block) entered_block.bottom_snap.snapped_block = print_block - var bsd := BlockScriptData.new("Area2D") - var script = BlockTreeUtil.generate_script_from_nodes([entered_block], bsd) + var block_script := BlockScriptSerialization.new("Area2D") + var text_script = BlockTreeUtil.generate_script_from_nodes([entered_block], block_script) assert_eq( - script, + text_script, ( """\ extends Area2D