From 3ba3a9241a984e559fd3717964cc576213dea7b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Fri, 14 Jun 2024 22:17:13 -0300 Subject: [PATCH] WIP --- .../simple_character/simple_character.gd | 4 + addons/block_code/ui/picker/picker.gd | 20 +++- pong_game/paddle.gd | 36 ++++++ pong_game/paddle.png | Bin 0 -> 27089 bytes pong_game/paddle.png.import | 34 ++++++ pong_game/paddle.tscn | 19 +++ pong_game/pong_game.tscn | 110 ++++++++++++++++++ project.godot | 4 + 8 files changed, 223 insertions(+), 4 deletions(-) create mode 100644 pong_game/paddle.gd create mode 100644 pong_game/paddle.png create mode 100644 pong_game/paddle.png.import create mode 100644 pong_game/paddle.tscn create mode 100644 pong_game/pong_game.tscn 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 4c560ad4..6ed3d6dc 100644 --- a/addons/block_code/simple_nodes/simple_character/simple_character.gd +++ b/addons/block_code/simple_nodes/simple_character/simple_character.gd @@ -13,6 +13,10 @@ func get_class(): return "SimpleCharacter" +static func get_base_class(): + return "CharacterBody2D" + + static func get_exposed_properties() -> Array[String]: return ["position"] diff --git a/addons/block_code/ui/picker/picker.gd b/addons/block_code/ui/picker/picker.gd index 02c32268..16589657 100644 --- a/addons/block_code/ui/picker/picker.gd +++ b/addons/block_code/ui/picker/picker.gd @@ -8,15 +8,27 @@ signal block_picked(block: Block) func bsd_selected(bsd: BlockScriptData): + var categories_to_add: Array[BlockCategory] = [] + + var custom_script = null for class_dict in ProjectSettings.get_global_class_list(): + prints("MANUQ", bsd.script_inherits) if class_dict.class == bsd.script_inherits: var script = load(class_dict.path) if script.has_method("get_custom_blocks"): - init_picker(script.get_custom_blocks()) - return + categories_to_add = script.get_custom_blocks() + custom_script = script + break + + var parent_class: String + if custom_script: + parent_class = custom_script.get_base_class() + else: # Built in + parent_class = bsd.script_inherits + + categories_to_add.append_array(CategoryFactory.get_inherited_categories(parent_class)) - # Should be built-in class - init_picker(CategoryFactory.get_inherited_categories(bsd.script_inherits)) + init_picker(categories_to_add) func init_picker(extra_blocks: Array[BlockCategory] = []): diff --git a/pong_game/paddle.gd b/pong_game/paddle.gd new file mode 100644 index 00000000..7f03cffe --- /dev/null +++ b/pong_game/paddle.gd @@ -0,0 +1,36 @@ +@tool +class_name Paddle +extends CharacterBody2D + + +func get_class(): + return "Paddle" + +static func get_base_class(): + return "CharacterBody2D" + + +static func get_exposed_properties() -> Array[String]: + return ["position"] + + +static func get_custom_blocks() -> Array[BlockCategory]: + var b: Block + + # Movement + var movement_list: Array[Block] = [] + b = CategoryFactory.BLOCKS["statement_block"].instantiate() + b.block_type = Types.BlockType.EXECUTE + b.block_format = "Move with player 1 buttons, speed {speed: INT}" + b.statement = 'velocity = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")*{speed}\n' + "move_and_slide()" + movement_list.append(b) + + b = CategoryFactory.BLOCKS["statement_block"].instantiate() + b.block_type = Types.BlockType.EXECUTE + b.block_format = "Move with player 2 buttons, speed {speed: INT}" + b.statement = 'velocity = Input.get_vector("player_2_left", "player_2_right", "player_2_up", "player_2_down")*{speed}\n' + "move_and_slide()" + movement_list.append(b) + + var movement_cat: BlockCategory = BlockCategory.new("Movement", movement_list, Color("4a86d5")) + + return [movement_cat] diff --git a/pong_game/paddle.png b/pong_game/paddle.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd1c62ad70df5b65175771e7ca8a3536aae51d7 GIT binary patch literal 27089 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 M07*qoM6N<$f+4|>W&i*H literal 0 HcmV?d00001 diff --git a/pong_game/paddle.png.import b/pong_game/paddle.png.import new file mode 100644 index 00000000..e7956273 --- /dev/null +++ b/pong_game/paddle.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://tplpgtnfeda0" +path="res://.godot/imported/paddle.png-2fbcaaf37bbbddd482a4ad5b20dde0a2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://pong_game/paddle.png" +dest_files=["res://.godot/imported/paddle.png-2fbcaaf37bbbddd482a4ad5b20dde0a2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/pong_game/paddle.tscn b/pong_game/paddle.tscn new file mode 100644 index 00000000..b5ed8a81 --- /dev/null +++ b/pong_game/paddle.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=4 format=3 uid="uid://s7enbp56f256"] + +[ext_resource type="Script" path="res://pong_game/paddle.gd" id="1_74lee"] +[ext_resource type="Texture2D" uid="uid://tplpgtnfeda0" path="res://pong_game/paddle.png" id="1_eucti"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_bbbjr"] +size = Vector2(128, 384) + +[node name="Paddle" type="CharacterBody2D" groups=["paddles"]] +collision_mask = 68 +motion_mode = 1 +script = ExtResource("1_74lee") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_bbbjr") + +[node name="Sprite2D" type="Sprite2D" parent="."] +unique_name_in_owner = true +texture = ExtResource("1_eucti") diff --git a/pong_game/pong_game.tscn b/pong_game/pong_game.tscn new file mode 100644 index 00000000..2d0059a2 --- /dev/null +++ b/pong_game/pong_game.tscn @@ -0,0 +1,110 @@ +[gd_scene load_steps=19 format=3 uid="uid://tf7b8c64ecc0"] + +[ext_resource type="PackedScene" uid="uid://s7enbp56f256" path="res://pong_game/paddle.tscn" id="1_1k5k2"] +[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/ui/block_canvas/serialized_block_tree_node.gd" id="4_qtggh"] +[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/block_script_data/block_script_data.gd" id="7_uuuue"] + +[sub_resource type="Resource" id="Resource_3ils6"] +script = ExtResource("5_wr38c") +block_class = &"StatementBlock" +serialized_props = [["block_name", "statement_block"], ["label", "StatementBlock"], ["color", Color(0.290196, 0.52549, 0.835294, 1)], ["block_type", 2], ["position", Vector2(0, 0)], ["block_format", "Move with player 2 buttons, speed {speed: INT}"], ["statement", "velocity = Input.get_vector(\"player_2_left\", \"player_2_right\", \"player_2_up\", \"player_2_down\")*{speed} +move_and_slide()"], ["param_input_strings", { +"speed": "500" +}]] + +[sub_resource type="Resource" id="Resource_qd5oi"] +script = ExtResource("4_qtggh") +serialized_block = SubResource("Resource_3ils6") +path_child_pairs = [] + +[sub_resource type="Resource" id="Resource_vjq0g"] +script = ExtResource("5_wr38c") +block_class = &"EntryBlock" +serialized_props = [["block_name", "process_block"], ["label", "EntryBlock"], ["color", Color(0.980392, 0.34902, 0.337255, 1)], ["block_type", 1], ["position", Vector2(53, 164)], ["block_format", "On Process"], ["statement", "func _process(delta):"], ["param_input_strings", {}]] + +[sub_resource type="Resource" id="Resource_dkmie"] +script = ExtResource("4_qtggh") +serialized_block = SubResource("Resource_vjq0g") +path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_qd5oi")]] + +[sub_resource type="Resource" id="Resource_1q8dn"] +script = ExtResource("6_ppdc3") +array = Array[ExtResource("4_qtggh")]([SubResource("Resource_dkmie")]) + +[sub_resource type="Resource" id="Resource_t7nl4"] +script = ExtResource("7_uuuue") +script_inherits = "Paddle" +block_trees = SubResource("Resource_1q8dn") +generated_script = "extends Paddle + +var VAR_DICT := {} + +func _process(delta): + velocity = Input.get_vector(\"player_2_left\", \"player_2_right\", \"player_2_up\", \"player_2_down\")*500 + move_and_slide() + +" + +[sub_resource type="Resource" id="Resource_xj1ks"] +script = ExtResource("5_wr38c") +block_class = &"StatementBlock" +serialized_props = [["block_name", "statement_block"], ["label", "StatementBlock"], ["color", Color(0.290196, 0.52549, 0.835294, 1)], ["block_type", 2], ["position", Vector2(0, 0)], ["block_format", "Move with player 1 buttons, speed {speed: INT}"], ["statement", "velocity = Input.get_vector(\"ui_left\", \"ui_right\", \"ui_up\", \"ui_down\")*{speed} +move_and_slide()"], ["param_input_strings", { +"speed": "500" +}]] + +[sub_resource type="Resource" id="Resource_r1oo8"] +script = ExtResource("4_qtggh") +serialized_block = SubResource("Resource_xj1ks") +path_child_pairs = [] + +[sub_resource type="Resource" id="Resource_3hvmm"] +script = ExtResource("5_wr38c") +block_class = &"EntryBlock" +serialized_props = [["block_name", "process_block"], ["label", "EntryBlock"], ["color", Color(0.980392, 0.34902, 0.337255, 1)], ["block_type", 1], ["position", Vector2(90, 95)], ["block_format", "On Process"], ["statement", "func _process(delta):"], ["param_input_strings", {}]] + +[sub_resource type="Resource" id="Resource_owydw"] +script = ExtResource("4_qtggh") +serialized_block = SubResource("Resource_3hvmm") +path_child_pairs = [[NodePath("VBoxContainer/SnapPoint"), SubResource("Resource_r1oo8")]] + +[sub_resource type="Resource" id="Resource_4hv2q"] +script = ExtResource("6_ppdc3") +array = Array[ExtResource("4_qtggh")]([SubResource("Resource_owydw")]) + +[sub_resource type="Resource" id="Resource_52r02"] +script = ExtResource("7_uuuue") +script_inherits = "Paddle" +block_trees = SubResource("Resource_4hv2q") +generated_script = "extends Paddle + +var VAR_DICT := {} + +func _process(delta): + velocity = Input.get_vector(\"ui_left\", \"ui_right\", \"ui_up\", \"ui_down\")*500 + move_and_slide() + +" + +[node name="Node2D" type="Node2D"] + +[node name="Paddle" parent="." instance=ExtResource("1_1k5k2")] +modulate = Color(1, 0.653955, 0.477429, 1) +position = Vector2(326, 313) +scale = Vector2(0.603749, 0.603749) + +[node name="BlockCode" type="Node" parent="Paddle"] +script = ExtResource("3_6jaq8") +bsd = SubResource("Resource_t7nl4") + +[node name="Paddle2" parent="." instance=ExtResource("1_1k5k2")] +modulate = Color(0.681415, 0.928494, 0.956385, 1) +position = Vector2(875, 313) +scale = Vector2(0.603749, 0.603749) + +[node name="BlockCode" type="Node" parent="Paddle2"] +script = ExtResource("3_6jaq8") +bsd = SubResource("Resource_52r02") diff --git a/project.godot b/project.godot index 9386eb3a..96fe0f40 100644 --- a/project.godot +++ b/project.godot @@ -19,6 +19,10 @@ config/icon="res://icon.svg" SignalManager="*res://addons/block_code/block_code_node/utilities/signal_manager.gd" +[debug] + +gdscript/warnings/native_method_override=1 + [editor_plugins] enabled=PackedStringArray("res://addons/block_code/plugin.cfg", "res://addons/gut/plugin.cfg", "res://addons/plugin_refresher/plugin.cfg")