From d37c4ec858aa01cf06e3b54355cb9dfc6bcc604d Mon Sep 17 00:00:00 2001 From: Rendo Date: Sat, 11 Oct 2025 09:45:23 +0500 Subject: [PATCH] Placement and platforms --- Samera.tres | 37 ++++++++ generic/constructibles/conveyor.tres | 15 +++ node_2d.gd | 1 - node_2d.gd.uid | 1 - project.godot | 23 +++++ scenes/2d_world.tscn | 87 +++++++++++++++++- scenes/conveyor.tscn | 14 +++ scenes/other_platform.tscn | 13 +++ scenes/player_platform.tscn | 16 +++- scripts/build_zone.gd | 4 + scripts/constructible.gd | 6 ++ scripts/constructible.gd.uid | 1 + scripts/construction.gd | 6 ++ scripts/construction.gd.uid | 1 + scripts/construction_placer.gd | 42 +++++++++ scripts/construction_placer.gd.uid | 1 + scripts/entity_holder.gd | 22 +++++ scripts/entity_holder.gd.uid | 1 + scripts/gui/construction_button.gd | 9 ++ scripts/gui/construction_button.gd.uid | 1 + scripts/gui/gui_event_bus.gd | 6 ++ scripts/gui/gui_event_bus.gd.uid | 1 + scripts/player_state.gd.uid | 1 - scripts/registry.gd | 9 ++ scripts/registry.gd.uid | 1 + ...player_state.gd => runtime_player_data.gd} | 0 scripts/runtime_player_data.gd.uid | 1 + sprites/Uitto.png | Bin 0 -> 1161 bytes sprites/Uitto.png.import | 40 ++++++++ sprites/atlasses/Popekko.png | Bin 823 -> 948 bytes sprites/atlasses/Popekko.png.import | 2 +- 31 files changed, 351 insertions(+), 11 deletions(-) create mode 100644 Samera.tres create mode 100644 generic/constructibles/conveyor.tres delete mode 100644 node_2d.gd delete mode 100644 node_2d.gd.uid create mode 100644 scenes/conveyor.tscn create mode 100644 scenes/other_platform.tscn create mode 100644 scripts/constructible.gd create mode 100644 scripts/constructible.gd.uid create mode 100644 scripts/construction.gd create mode 100644 scripts/construction.gd.uid create mode 100644 scripts/construction_placer.gd create mode 100644 scripts/construction_placer.gd.uid create mode 100644 scripts/entity_holder.gd create mode 100644 scripts/entity_holder.gd.uid create mode 100644 scripts/gui/construction_button.gd create mode 100644 scripts/gui/construction_button.gd.uid create mode 100644 scripts/gui/gui_event_bus.gd create mode 100644 scripts/gui/gui_event_bus.gd.uid delete mode 100644 scripts/player_state.gd.uid create mode 100644 scripts/registry.gd create mode 100644 scripts/registry.gd.uid rename scripts/{player_state.gd => runtime_player_data.gd} (100%) create mode 100644 scripts/runtime_player_data.gd.uid create mode 100644 sprites/Uitto.png create mode 100644 sprites/Uitto.png.import diff --git a/Samera.tres b/Samera.tres new file mode 100644 index 0000000..fa030e3 --- /dev/null +++ b/Samera.tres @@ -0,0 +1,37 @@ +[gd_resource type="Theme" load_steps=6 format=3 uid="uid://csh7en7c4otv6"] + +[ext_resource type="Texture2D" uid="uid://3h6y6jxhf1qp" path="res://sprites/Uitto.png" id="1_cpeo0"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_cpeo0"] +atlas = ExtResource("1_cpeo0") +region = Rect2(16, 0, 16, 16) + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_rknw5"] +texture = SubResource("AtlasTexture_cpeo0") +texture_margin_left = 6.0 +texture_margin_top = 5.0 +texture_margin_right = 6.0 +texture_margin_bottom = 4.0 + +[sub_resource type="AtlasTexture" id="AtlasTexture_rknw5"] +atlas = ExtResource("1_cpeo0") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_jukqe"] +texture = SubResource("AtlasTexture_rknw5") +texture_margin_left = 2.0 +texture_margin_top = 2.0 +texture_margin_right = 2.0 +texture_margin_bottom = 2.0 +axis_stretch_horizontal = 1 +axis_stretch_vertical = 1 + +[resource] +CRT/base_type = &"Button" +CRT/styles/disabled = SubResource("StyleBoxTexture_rknw5") +CRT/styles/focus = SubResource("StyleBoxTexture_rknw5") +CRT/styles/hover = SubResource("StyleBoxTexture_rknw5") +CRT/styles/hover_pressed = SubResource("StyleBoxTexture_rknw5") +CRT/styles/normal = SubResource("StyleBoxTexture_rknw5") +CRT/styles/pressed = SubResource("StyleBoxTexture_rknw5") +Panel/styles/panel = SubResource("StyleBoxTexture_jukqe") diff --git a/generic/constructibles/conveyor.tres b/generic/constructibles/conveyor.tres new file mode 100644 index 0000000..cf8b491 --- /dev/null +++ b/generic/constructibles/conveyor.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="Constructible" load_steps=5 format=3 uid="uid://dj524jjal1f0n"] + +[ext_resource type="Script" uid="uid://c80sp6f77l5ha" path="res://scripts/constructible.gd" id="1_53h7j"] +[ext_resource type="Texture2D" uid="uid://cbtre16ilxte0" path="res://sprites/atlasses/Popekko.png" id="1_x27pp"] +[ext_resource type="PackedScene" uid="uid://b0h8dd82b3ox5" path="res://scenes/conveyor.tscn" id="2_hinjf"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_uvy8r"] +atlas = ExtResource("1_x27pp") +region = Rect2(16, 0, 16, 16) + +[resource] +script = ExtResource("1_53h7j") +scene = ExtResource("2_hinjf") +preview = SubResource("AtlasTexture_uvy8r") +metadata/_custom_type_script = "uid://c80sp6f77l5ha" diff --git a/node_2d.gd b/node_2d.gd deleted file mode 100644 index e251cf8..0000000 --- a/node_2d.gd +++ /dev/null @@ -1 +0,0 @@ -extends Node2D diff --git a/node_2d.gd.uid b/node_2d.gd.uid deleted file mode 100644 index cbbc17e..0000000 --- a/node_2d.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://6q6yvdigdloo diff --git a/project.godot b/project.godot index ab11115..b6648e2 100644 --- a/project.godot +++ b/project.godot @@ -15,12 +15,35 @@ run/main_scene="uid://u7thalwj5742" config/features=PackedStringArray("4.5", "GL Compatibility") config/icon="res://icon.svg" +[autoload] + +GuiEventBus="*res://scripts/gui/gui_event_bus.gd" +RuntimePlayerData="*res://scripts/runtime_player_data.gd" +Registry="*res://scripts/registry.gd" + [display] window/size/viewport_width=512 window/size/viewport_height=288 window/stretch/mode="canvas_items" +[gui] + +theme/custom="uid://csh7en7c4otv6" + +[input] + +plc_place={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(176.91797, 7.2773438),"global_position":Vector2(180.91797, 44.277344),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} +plc_cancel={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(441.39453, 21.890625),"global_position":Vector2(445.39453, 58.890625),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} + [layer_names] 2d_physics/layer_1="Platform" diff --git a/scenes/2d_world.tscn b/scenes/2d_world.tscn index 9836907..5e93434 100644 --- a/scenes/2d_world.tscn +++ b/scenes/2d_world.tscn @@ -1,10 +1,91 @@ -[gd_scene load_steps=2 format=3 uid="uid://u7thalwj5742"] +[gd_scene load_steps=9 format=3 uid="uid://u7thalwj5742"] [ext_resource type="PackedScene" uid="uid://b7du4vul4bmpq" path="res://scenes/player_platform.tscn" id="1_4ia00"] +[ext_resource type="Script" uid="uid://db37xmo8ygwhg" path="res://scripts/gui/construction_button.gd" id="2_27lod"] +[ext_resource type="Resource" uid="uid://dj524jjal1f0n" path="res://generic/constructibles/conveyor.tres" id="3_2crwe"] +[ext_resource type="Script" uid="uid://b4nkk0ndqcto" path="res://scripts/construction_placer.gd" id="4_i7yte"] +[ext_resource type="PackedScene" uid="uid://bac552xgua68e" path="res://scenes/other_platform.tscn" id="5_mnxrb"] + +[sub_resource type="Animation" id="Animation_bq5r8"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("OtherPlatform:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(309, 15)] +} + +[sub_resource type="Animation" id="Animation_ymyc2"] +resource_name = "main" +length = 10.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("OtherPlatform:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 5), +"transitions": PackedFloat32Array(-2, -2), +"update": 0, +"values": [Vector2(309, 15), Vector2(309, 131)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_mogn5"] +_data = { +&"RESET": SubResource("Animation_bq5r8"), +&"main": SubResource("Animation_ymyc2") +} [node name="2D World" type="Node2D"] [node name="PlayerPlatform" parent="." instance=ExtResource("1_4ia00")] position = Vector2(17, 17) -use_kinematic_bodies = true -navigation_enabled = false + +[node name="OtherPlatform" parent="." instance=ExtResource("5_mnxrb")] +position = Vector2(309, 15) + +[node name="GUI" type="CanvasLayer" parent="."] + +[node name="Panel" type="Panel" parent="GUI"] +anchors_preset = -1 +anchor_top = 0.757 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -0.01600647 +grow_horizontal = 2 +grow_vertical = 0 + +[node name="ConveyorButton" type="Button" parent="GUI/Panel"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.008 +anchor_top = 0.086 +anchor_right = 0.1 +anchor_bottom = 0.88600004 +offset_left = -0.096000195 +offset_top = -0.01999998 +offset_right = -0.20000076 +offset_bottom = -0.020004272 +size_flags_horizontal = 3 +theme_type_variation = &"CRT" +icon_alignment = 1 +expand_icon = true +script = ExtResource("2_27lod") +constructible = ExtResource("3_2crwe") + +[node name="Placer" type="Node2D" parent="."] +script = ExtResource("4_i7yte") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_mogn5") +} +autoplay = "main" diff --git a/scenes/conveyor.tscn b/scenes/conveyor.tscn new file mode 100644 index 0000000..dbf0273 --- /dev/null +++ b/scenes/conveyor.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=4 format=3 uid="uid://b0h8dd82b3ox5"] + +[ext_resource type="Texture2D" uid="uid://cbtre16ilxte0" path="res://sprites/atlasses/Popekko.png" id="1_kqxj7"] +[ext_resource type="Script" uid="uid://bbd7o2st8kmgl" path="res://scripts/construction.gd" id="1_y326v"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_uvy8r"] +atlas = ExtResource("1_kqxj7") +region = Rect2(16, 0, 16, 16) + +[node name="Conveyor" type="Node2D" groups=["buildings"]] +script = ExtResource("1_y326v") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = SubResource("AtlasTexture_uvy8r") diff --git a/scenes/other_platform.tscn b/scenes/other_platform.tscn new file mode 100644 index 0000000..125ccab --- /dev/null +++ b/scenes/other_platform.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=4 uid="uid://bac552xgua68e"] + +[ext_resource type="TileSet" uid="uid://bv75bu0af04vs" path="res://generic/platform.tres" id="1_fs1oy"] +[ext_resource type="Script" uid="uid://lw1ya3iu14uf" path="res://scripts/build_zone.gd" id="2_bwire"] + +[node name="OtherPlatform" type="TileMapLayer"] +tile_map_data = PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAEAAAAAAAIAAAAAAAEAAAAAAAMAAAAAAAEAAAAAAAQAAAAAAAEAAAABAAAAAAAAAAEAAAABAAEAAAAAAAEAAAABAAIAAAAAAAEAAAABAAMAAAAAAAAAAAABAAQAAAAAAAEAAAACAAAAAAAAAAAAAAACAAEAAAAAAAEAAAACAAIAAAAAAAEAAAACAAMAAAAAAAAAAAACAAQAAAAAAAAAAAD/////AAACAAEAAAD//wAAAAAEAAIAAAD//wEAAAAEAAIAAAD//wIAAAAEAAIAAAD//wMAAAAEAAIAAAD//wQAAAAEAAIAAAAAAP//AAABAAIAAAABAP//AAABAAIAAAACAP//AAABAAIAAAADAP//AAADAAEAAAD//wUAAAAEAAEAAAADAAUAAAAFAAEAAAAAAAUAAAAGAAEAAAABAAUAAAAGAAEAAAACAAUAAAAGAAEAAAADAAAAAAAFAAIAAAADAAEAAAAFAAIAAAADAAIAAAAFAAIAAAADAAMAAAAFAAIAAAADAAQAAAAFAAIAAAA=") +tile_set = ExtResource("1_fs1oy") + +[node name="BuildZone" type="Marker2D" parent="."] +script = ExtResource("2_bwire") +building_rect = Rect2(0, 0, 48, 80) +metadata/_custom_type_script = "uid://lw1ya3iu14uf" diff --git a/scenes/player_platform.tscn b/scenes/player_platform.tscn index 15970ff..c23ecc3 100644 --- a/scenes/player_platform.tscn +++ b/scenes/player_platform.tscn @@ -1,12 +1,20 @@ -[gd_scene load_steps=3 format=4 uid="uid://b7du4vul4bmpq"] +[gd_scene load_steps=4 format=4 uid="uid://b7du4vul4bmpq"] [ext_resource type="TileSet" uid="uid://bv75bu0af04vs" path="res://generic/platform.tres" id="1_khkq2"] [ext_resource type="Script" uid="uid://lw1ya3iu14uf" path="res://scripts/build_zone.gd" id="2_wpmwa"] +[ext_resource type="Script" uid="uid://x5edy155eg0s" path="res://scripts/entity_holder.gd" id="3_6hjoe"] -[node name="PlayerPlatform" type="TileMapLayer"] -tile_map_data = PackedByteArray("AAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAAADAAAAAAAAAAEAAAAEAAAAAAAAAAEAAAAFAAAAAAAAAAEAAAAGAAAAAAAAAAAAAAAGAAEAAAAAAAAAAAAHAAEAAAAAAAAAAAAHAAIAAAAAAAAAAAAGAAIAAAAAAAEAAAAFAAIAAAAAAAEAAAAEAAIAAAAAAAAAAAADAAIAAAAAAAAAAAACAAIAAAAAAAAAAAACAAEAAAAAAAEAAAABAAEAAAAAAAEAAAAAAAEAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAMAAAAAAAEAAAABAAMAAAAAAAEAAAABAAQAAAAAAAEAAAACAAQAAAAAAAAAAAADAAQAAAAAAAAAAAADAAMAAAAAAAAAAAAEAAMAAAAAAAEAAAAAAAQAAAAAAAEAAAAAAAUAAAAAAAAAAAABAAIAAAAAAAEAAAABAAUAAAAAAAAAAAACAAMAAAAAAAAAAAACAAUAAAAAAAEAAAADAAEAAAAAAAEAAAADAAUAAAAAAAEAAAAEAAEAAAAAAAAAAAAEAAQAAAAAAAEAAAAEAAUAAAAAAAAAAAAFAAEAAAAAAAEAAAAFAAMAAAAAAAAAAAAFAAQAAAAAAAEAAAAFAAUAAAAAAAAAAAAGAAMAAAAAAAEAAAAGAAQAAAAAAAEAAAAGAAUAAAAAAAEAAAAHAAAAAAAAAAEAAAAHAAMAAAAAAAEAAAAHAAQAAAAAAAAAAAAHAAUAAAAAAAAAAAAIAAAAAAAAAAEAAAAIAAEAAAAAAAEAAAAIAAIAAAAAAAAAAAAIAAMAAAAAAAEAAAAIAAQAAAAAAAAAAAAIAAUAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAcAAAAAAAAAAAABAAYAAAAAAAEAAAABAAcAAAAAAAEAAAACAAYAAAAAAAAAAAACAAcAAAAAAAAAAAADAAYAAAAAAAEAAAADAAcAAAAAAAEAAAAEAAYAAAAAAAEAAAAEAAcAAAAAAAEAAAAFAAYAAAAAAAEAAAAFAAcAAAAAAAAAAAAGAAYAAAAAAAEAAAAGAAcAAAAAAAEAAAAHAAYAAAAAAAEAAAAHAAcAAAAAAAAAAAAIAAYAAAAAAAAAAAAIAAcAAAAAAAEAAAAJAAAAAAAAAAEAAAAJAAEAAAAAAAEAAAAJAAIAAAAAAAEAAAAJAAMAAAAAAAAAAAAJAAQAAAAAAAEAAAAJAAUAAAAAAAAAAAAJAAYAAAAAAAEAAAAJAAcAAAAAAAAAAAAKAAAAAAAAAAEAAAAKAAEAAAAAAAAAAAAKAAIAAAAAAAAAAAAKAAMAAAAAAAEAAAAKAAQAAAAAAAAAAAAKAAUAAAAAAAEAAAAKAAYAAAAAAAAAAAAKAAcAAAAAAAEAAAALAAAAAAAAAAEAAAALAAEAAAAAAAAAAAALAAIAAAAAAAEAAAALAAMAAAAAAAEAAAALAAQAAAAAAAAAAAALAAUAAAAAAAAAAAALAAYAAAAAAAAAAAALAAcAAAAAAAAAAAAMAAAAAAAAAAEAAAAMAAEAAAAAAAAAAAAMAAIAAAAAAAEAAAAMAAMAAAAAAAAAAAAMAAQAAAAAAAAAAAAMAAUAAAAAAAEAAAAMAAYAAAAAAAEAAAAMAAcAAAAAAAAAAAANAAAAAAABAAEAAAANAAEAAAABAAEAAAANAAIAAAABAAEAAAANAAMAAAABAAEAAAANAAQAAAABAAEAAAANAAUAAAABAAEAAAANAAYAAAABAAEAAAANAAcAAAABAAEAAAD//wAAAAABAAAAAAD//wEAAAABAAAAAAD//wIAAAABAAAAAAD//wMAAAABAAAAAAD//wQAAAABAAAAAAD//wUAAAABAAAAAAD//wYAAAABAAAAAAD//wcAAAABAAAAAAD//wgAAAADAAAAAAANAAgAAAAEAAAAAAAAAAgAAAACAAAAAAABAAgAAAACAAAAAAACAAgAAAACAAAAAAADAAgAAAACAAAAAAAEAAgAAAACAAAAAAAFAAgAAAACAAAAAAAGAAgAAAACAAAAAAAHAAgAAAACAAAAAAAIAAgAAAACAAAAAAAJAAgAAAACAAAAAAAKAAgAAAACAAAAAAALAAgAAAACAAAAAAAMAAgAAAACAAAAAAAAAP//AAAAAAIAAAABAP//AAAAAAIAAAACAP//AAAAAAIAAAADAP//AAAAAAIAAAAEAP//AAAAAAIAAAAFAP//AAAAAAIAAAAGAP//AAAAAAIAAAAHAP//AAAAAAIAAAAIAP//AAAAAAIAAAAJAP//AAAAAAIAAAAKAP//AAAAAAIAAAALAP//AAAAAAIAAAAMAP//AAAAAAIAAAD/////AAACAAIAAAANAP//AAADAAIAAAA=") +[node name="PlayerPlatform" type="Node2D"] + +[node name="TileMapLayer" type="TileMapLayer" parent="."] +tile_map_data = PackedByteArray("AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAGAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAIAAAAAAAAAAEAAAAJAAAAAAAAAAEAAAAKAAAAAAAAAAEAAAALAAAAAAAAAAAAAAAMAAAAAAAAAAEAAAANAAAAAAAAAAEAAAAOAAAAAAAAAAEAAAAPAAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAQAAEAAAAAAAAAAAAPAAEAAAAAAAAAAAAOAAEAAAAAAAEAAAANAAEAAAAAAAAAAAAMAAEAAAAAAAAAAAALAAEAAAAAAAEAAAAKAAEAAAAAAAEAAAAJAAEAAAAAAAEAAAAIAAEAAAAAAAEAAAAHAAEAAAAAAAAAAAAGAAEAAAAAAAEAAAAFAAEAAAAAAAEAAAAEAAEAAAAAAAAAAAADAAEAAAAAAAAAAAACAAEAAAAAAAEAAAABAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAIAAAAAAAAAAAABAAIAAAAAAAEAAAACAAIAAAAAAAEAAAACAAMAAAAAAAEAAAADAAMAAAAAAAAAAAADAAIAAAAAAAAAAAAEAAIAAAAAAAAAAAAFAAIAAAAAAAEAAAAGAAIAAAAAAAEAAAAHAAIAAAAAAAEAAAAIAAIAAAAAAAEAAAAJAAIAAAAAAAEAAAAKAAIAAAAAAAEAAAALAAIAAAAAAAAAAAAMAAIAAAAAAAEAAAANAAIAAAAAAAEAAAAOAAIAAAAAAAAAAAAPAAIAAAAAAAEAAAAQAAIAAAAAAAEAAAAQAAMAAAAAAAEAAAAPAAMAAAAAAAEAAAAOAAMAAAAAAAEAAAANAAMAAAAAAAAAAAANAAQAAAAAAAAAAAAMAAQAAAAAAAEAAAALAAQAAAAAAAEAAAAKAAQAAAAAAAEAAAAJAAQAAAAAAAAAAAAJAAMAAAAAAAAAAAAIAAMAAAAAAAAAAAAHAAMAAAAAAAEAAAAGAAMAAAAAAAAAAAAFAAMAAAAAAAEAAAAEAAMAAAAAAAEAAAABAAMAAAAAAAEAAAAAAAMAAAAAAAEAAAAAAAQAAAAAAAAAAAABAAQAAAAAAAEAAAACAAQAAAAAAAAAAAADAAQAAAAAAAAAAAAEAAQAAAAAAAEAAAAFAAQAAAAAAAAAAAAGAAQAAAAAAAAAAAAHAAQAAAAAAAAAAAAIAAQAAAAAAAEAAAAOAAQAAAAAAAEAAAAPAAQAAAAAAAEAAAAQAAQAAAAAAAEAAAAMAAMAAAAAAAAAAAALAAMAAAAAAAEAAAAKAAMAAAAAAAEAAAABAAUAAAAAAAEAAAAAAAUAAAAAAAAAAAACAAUAAAAAAAEAAAADAAUAAAAAAAEAAAAEAAUAAAAAAAEAAAAFAAUAAAAAAAEAAAAGAAUAAAAAAAEAAAAHAAUAAAAAAAEAAAAIAAUAAAAAAAEAAAAJAAUAAAAAAAEAAAAKAAUAAAAAAAAAAAALAAUAAAAAAAAAAAAMAAUAAAAAAAAAAAANAAUAAAAAAAAAAAAOAAUAAAAAAAEAAAAPAAUAAAAAAAAAAAAQAAUAAAAAAAAAAAAQAAYAAAAAAAEAAAAPAAYAAAAAAAAAAAAPAAcAAAAAAAAAAAAOAAcAAAAAAAAAAAAOAAYAAAAAAAAAAAANAAYAAAAAAAAAAAAMAAYAAAAAAAAAAAALAAYAAAAAAAEAAAAKAAYAAAAAAAEAAAAJAAYAAAAAAAEAAAAIAAYAAAAAAAEAAAAHAAYAAAAAAAAAAAAGAAYAAAAAAAEAAAAFAAYAAAAAAAAAAAAEAAYAAAAAAAEAAAADAAYAAAAAAAEAAAACAAYAAAAAAAEAAAABAAYAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAcAAAAAAAAAAAABAAcAAAAAAAAAAAACAAcAAAAAAAAAAAADAAcAAAAAAAAAAAAEAAcAAAAAAAEAAAAFAAcAAAAAAAAAAAAGAAcAAAAAAAAAAAAHAAcAAAAAAAAAAAAIAAcAAAAAAAEAAAAJAAcAAAAAAAAAAAAKAAcAAAAAAAEAAAALAAcAAAAAAAAAAAAMAAcAAAAAAAAAAAANAAcAAAAAAAEAAAAQAAcAAAAAAAAAAAARAAAAAAABAAEAAAARAAEAAAABAAEAAAARAAIAAAABAAEAAAARAAMAAAABAAEAAAARAAQAAAABAAEAAAARAAUAAAABAAEAAAARAAYAAAABAAEAAAARAAcAAAABAAEAAAD//wAAAAABAAAAAAD//wEAAAABAAAAAAD//wIAAAABAAAAAAD//wMAAAABAAAAAAD//wQAAAABAAAAAAD//wUAAAABAAAAAAD//wYAAAABAAAAAAD//wcAAAABAAAAAAAAAP//AAAAAAIAAAABAP//AAAAAAIAAAACAP//AAAAAAIAAAADAP//AAAAAAIAAAAEAP//AAAAAAIAAAAFAP//AAAAAAIAAAAGAP//AAAAAAIAAAAHAP//AAAAAAIAAAAIAP//AAAAAAIAAAAJAP//AAAAAAIAAAAKAP//AAAAAAIAAAALAP//AAAAAAIAAAAMAP//AAAAAAIAAAANAP//AAAAAAIAAAAOAP//AAAAAAIAAAAPAP//AAAAAAIAAAAQAP//AAAAAAIAAAD/////AAACAAIAAAARAP//AAADAAIAAAD//wgAAAADAAAAAAARAAgAAAAEAAAAAAAQAAgAAAACAAAAAAAPAAgAAAACAAAAAAAOAAgAAAACAAAAAAANAAgAAAACAAAAAAAMAAgAAAACAAAAAAALAAgAAAACAAAAAAAKAAgAAAACAAAAAAAJAAgAAAACAAAAAAAIAAgAAAACAAAAAAAHAAgAAAACAAAAAAAGAAgAAAACAAAAAAAFAAgAAAACAAAAAAAEAAgAAAACAAAAAAADAAgAAAACAAAAAAACAAgAAAACAAAAAAABAAgAAAACAAAAAAAAAAgAAAACAAAAAAA=") tile_set = ExtResource("1_khkq2") [node name="BuildRect" type="Marker2D" parent="."] script = ExtResource("2_wpmwa") -building_rect = Rect2(0, 0, 208, 128) +building_rect = Rect2(0, 0, 272, 128) + +[node name="EntityHolder" type="Node2D" parent="." node_paths=PackedStringArray("building_zone")] +script = ExtResource("3_6hjoe") +building_zone = NodePath("../BuildRect") +metadata/_custom_type_script = "uid://x5edy155eg0s" diff --git a/scripts/build_zone.gd b/scripts/build_zone.gd index 334ebac..23a16f8 100644 --- a/scripts/build_zone.gd +++ b/scripts/build_zone.gd @@ -17,6 +17,10 @@ const GRID_SIZE : Vector2 = Vector2(16,16) get: return building_rect +func _ready() -> void: + if not Engine.is_editor_hint(): + Registry.build_zones.append(self) + func _draw() -> void: if Engine.is_editor_hint() and EditorInterface.get_inspector().get_edited_object() == self: draw_rect(building_rect,Color.CYAN,false,1) diff --git a/scripts/constructible.gd b/scripts/constructible.gd new file mode 100644 index 0000000..5fbd326 --- /dev/null +++ b/scripts/constructible.gd @@ -0,0 +1,6 @@ +extends Resource + +class_name Constructible + +@export var scene : PackedScene +@export var preview : Texture2D diff --git a/scripts/constructible.gd.uid b/scripts/constructible.gd.uid new file mode 100644 index 0000000..01c18e4 --- /dev/null +++ b/scripts/constructible.gd.uid @@ -0,0 +1 @@ +uid://c80sp6f77l5ha diff --git a/scripts/construction.gd b/scripts/construction.gd new file mode 100644 index 0000000..7d86f32 --- /dev/null +++ b/scripts/construction.gd @@ -0,0 +1,6 @@ +extends Node2D + +class_name Construction + +func get_relative(dv : Vector2) -> Construction: + return get_parent().get_at(global_position+dv) diff --git a/scripts/construction.gd.uid b/scripts/construction.gd.uid new file mode 100644 index 0000000..ae15e42 --- /dev/null +++ b/scripts/construction.gd.uid @@ -0,0 +1 @@ +uid://bbd7o2st8kmgl diff --git a/scripts/construction_placer.gd b/scripts/construction_placer.gd new file mode 100644 index 0000000..bbbdb82 --- /dev/null +++ b/scripts/construction_placer.gd @@ -0,0 +1,42 @@ +extends Node2D + +var held_construction : Construction + +func _ready() -> void: + GuiEventBus.construction_selected.connect(on_construction_selected) + +func _input(event: InputEvent) -> void: + if held_construction == null: + return + if event.is_action_pressed("plc_place"): + var zone = try_get_zone(held_construction.global_position) + if zone == null: + held_construction.queue_free() + else: + if zone.get_parent().get_node("EntityHolder").add_construction(held_construction): + held_construction = null + + if event.is_action_pressed("plc_cancel"): + held_construction.queue_free() + +func on_construction_selected(constructible : Constructible): + if held_construction: + held_construction.queue_free() + held_construction = constructible.scene.instantiate() + add_child(held_construction) + + +func _process(_delta: float) -> void: + if held_construction != null: + var mouse_pos = get_global_mouse_position() + var zone = try_get_zone(mouse_pos) + if zone: + global_position = zone.get_placement_position(mouse_pos) + else: + global_position = mouse_pos + +func try_get_zone(point : Vector2) -> BuildZone: + for zone in Registry.build_zones: + if zone.is_global_point_in_zone(point): + return zone + return null diff --git a/scripts/construction_placer.gd.uid b/scripts/construction_placer.gd.uid new file mode 100644 index 0000000..c3447b2 --- /dev/null +++ b/scripts/construction_placer.gd.uid @@ -0,0 +1 @@ +uid://b4nkk0ndqcto diff --git a/scripts/entity_holder.gd b/scripts/entity_holder.gd new file mode 100644 index 0000000..6b6b129 --- /dev/null +++ b/scripts/entity_holder.gd @@ -0,0 +1,22 @@ +extends Node2D + +class_name EntityHolder + +const GRID_SIZE : Vector2 = Vector2(16,16) + +@export var building_zone : BuildZone +var constructions : Array[Construction] + +func _ready() -> void: + constructions.resize(building_zone.get_capacity()) + +func add_construction(construction : Construction) -> bool: + if constructions[building_zone.indexify_global_point(construction.global_position)]: + return false + construction.reparent(self) + construction.global_position = building_zone.get_placement_position(construction.global_position) + constructions[building_zone.indexify_global_point(construction.global_position)] = construction + return true + +func get_at(point : Vector2): + return constructions[building_zone.indexify_global_point(point)] diff --git a/scripts/entity_holder.gd.uid b/scripts/entity_holder.gd.uid new file mode 100644 index 0000000..bdbbaf2 --- /dev/null +++ b/scripts/entity_holder.gd.uid @@ -0,0 +1 @@ +uid://x5edy155eg0s diff --git a/scripts/gui/construction_button.gd b/scripts/gui/construction_button.gd new file mode 100644 index 0000000..b56e8c8 --- /dev/null +++ b/scripts/gui/construction_button.gd @@ -0,0 +1,9 @@ +extends Button + +@export var constructible : Constructible + +func _ready() -> void: + icon = constructible.preview + +func _pressed() -> void: + GuiEventBus.construction_selected.emit(constructible) diff --git a/scripts/gui/construction_button.gd.uid b/scripts/gui/construction_button.gd.uid new file mode 100644 index 0000000..9a1f1fd --- /dev/null +++ b/scripts/gui/construction_button.gd.uid @@ -0,0 +1 @@ +uid://db37xmo8ygwhg diff --git a/scripts/gui/gui_event_bus.gd b/scripts/gui/gui_event_bus.gd new file mode 100644 index 0000000..a5ab2b0 --- /dev/null +++ b/scripts/gui/gui_event_bus.gd @@ -0,0 +1,6 @@ +extends Node + +@warning_ignore_start("unused_signal") + +signal construction_selected(constructible : Constructible) +signal construction_placed(constructible : Constructible) diff --git a/scripts/gui/gui_event_bus.gd.uid b/scripts/gui/gui_event_bus.gd.uid new file mode 100644 index 0000000..6d15cfc --- /dev/null +++ b/scripts/gui/gui_event_bus.gd.uid @@ -0,0 +1 @@ +uid://x5eghpenp777 diff --git a/scripts/player_state.gd.uid b/scripts/player_state.gd.uid deleted file mode 100644 index 8cdbccd..0000000 --- a/scripts/player_state.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b004eslxx7ylv diff --git a/scripts/registry.gd b/scripts/registry.gd new file mode 100644 index 0000000..e408bfa --- /dev/null +++ b/scripts/registry.gd @@ -0,0 +1,9 @@ +extends Node + +func _ready() -> void: + get_tree().scene_changed.connect(cleanup_runtime_cache) + +func cleanup_runtime_cache(): + build_zones.clear() + +var build_zones : Array[BuildZone] diff --git a/scripts/registry.gd.uid b/scripts/registry.gd.uid new file mode 100644 index 0000000..7622181 --- /dev/null +++ b/scripts/registry.gd.uid @@ -0,0 +1 @@ +uid://coqgbea1uchn4 diff --git a/scripts/player_state.gd b/scripts/runtime_player_data.gd similarity index 100% rename from scripts/player_state.gd rename to scripts/runtime_player_data.gd diff --git a/scripts/runtime_player_data.gd.uid b/scripts/runtime_player_data.gd.uid new file mode 100644 index 0000000..932a60a --- /dev/null +++ b/scripts/runtime_player_data.gd.uid @@ -0,0 +1 @@ +uid://bmowwtsy0f8mf diff --git a/sprites/Uitto.png b/sprites/Uitto.png new file mode 100644 index 0000000000000000000000000000000000000000..27d300f502be63ae98774ef47b390acd3258ff9d GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yU;;836*$;{)FGSGfeZ{R0iG_7Ar*7p-nA{d>>$GM zK>U$l;DqDGWl~&Ts|xt}7>_qQ7qDt^IXQbeGM}l?*_5U(8EmoogrVZbpM^%BYo{)` zxcScB?fK!W_loP!*MG#nr|xT-zS5%1S-o}3b8qjpuhe7Mu-DP$$aDSpM;|X2Lb<*bZ&!2wiB*?(9+pyyIJ7*V{n%`Ev9UUK2MBeHg{ipEg&zn!j zislvfeN5Rh?N7efpX0}m-~D*bP2aPYmknxXR~Xyk_yLRX5~g%DB5`yZv|F&#@zyhvCC_ z-e2lV&&FRb-LiR0QL-l2t6hC1v$oeI?B`%$C`(S|dhjR5@{;~ZyGKP*3)a2v=*URd ze0BKkGDe1m-HB_N3re5FFJnCQb#*s0W5e(CwagQW-?{y@e4f#EdSbot8s+DEwpj=; z?5N+xv_R!oUG@G|tMU%UTYE?EXJlZwqkA{PZmEdn^A722-=EG&wvqYUzMqZZk9I7( z!rW(DkJdgusc~#_;2ZvFvQ4j}{_nl}H!pX#1jB>(5uPt!nv~CGEWIA|D(<&-KGT=` zLJSP==1*l>V7F#hOT2to>?8f#%*R~?FWl#Nk)(a!HD|-l^EGz;FH2rEJ1}feuJ)gA z8)>sj{@C{~$%_vNeg61&`PB7{ao+3QMPhU*b>mS1g6b9gbhOINj?tqA?vW<{7kUozfqWAyzubf4RP#UTpc50DyJMVSm&tS66xS{_J{kzL*xr zRh{`_S|rJGb@e}=5dhe-vK<^(b@E4hzfJy0QdgZsApih-qnymfMO}4LSDhPc`>n}r zT(pV*Z!rMCZeBUctxbJ*sjE)r3mpIe*cauO^UrHH`rWlG008W+GD$wX{kYMud;q|1 zDU;;&yO+M~0pNg?&t5&3`~l#=l=p}M0QQUm000h<0ssIG(8lZk4g&&!-J=5l00&3` gvjG7f0vD|H3l>^yU;SZF$^ZZW07*qoM6N<$f=ge$FaQ7m delta 250 zcmV(>Zm18n z{WAb?yo&UL{qE*A&+l(ZKm5No>s<%{08UHM)NQxkY;*tkuu>~7SM$-htg>9qM@h2Y zY!BHZ0Px3(;V>?%B+2LEW0XDw40ly|kq80+a9V!*+uz>@_}9h&fW!H@7zh9yx!0!` zLmdFlOpzqh$xH|UfOFynvw;B|0+Wyd5EqWtH-9ETk%&|z1^@s607*qoM6N<$f-wel AAOHXW diff --git a/sprites/atlasses/Popekko.png.import b/sprites/atlasses/Popekko.png.import index b8d9bec..e1cba67 100644 --- a/sprites/atlasses/Popekko.png.import +++ b/sprites/atlasses/Popekko.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://416h8gs1f7x0" +uid="uid://cbtre16ilxte0" path="res://.godot/imported/Popekko.png-5c34a5f2a8c85fcf59453310fa6553d9.ctex" metadata={ "vram_texture": false