diff --git a/prefabs/Interactables/inventory_dependent_interactable_test.tscn b/prefabs/Interactables/inventory_dependent_interactable_test.tscn index ae82d35..357b7f2 100644 --- a/prefabs/Interactables/inventory_dependent_interactable_test.tscn +++ b/prefabs/Interactables/inventory_dependent_interactable_test.tscn @@ -10,9 +10,8 @@ script = ExtResource("1_cu47d") _interactionArea = NodePath("InteractionArea") _itemsToReactTo = Array[Object]([ExtResource("2_s5peo")]) -[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("3_wsetd")] -_active = false -_spriteToOutline = NodePath("../Sprite2D") +[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("3_wsetd")] +_spritesToOutline = [NodePath("../Sprite2D")] [node name="Sprite2D" type="Sprite2D" parent="."] scale = Vector2(0.5, 0.5) diff --git a/prefabs/Interactables/trash_object.tscn b/prefabs/Interactables/trash_object.tscn index fc5f532..a5fc1bf 100644 --- a/prefabs/Interactables/trash_object.tscn +++ b/prefabs/Interactables/trash_object.tscn @@ -37,9 +37,9 @@ offset = Vector2(1, -215) region_enabled = true region_rect = Rect2(44, 479, 356, 503) -[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("2_gcgfd")] +[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("2_gcgfd")] position = Vector2(0, -172) -_spriteToOutline = NodePath("..") +_spritesToOutline = [NodePath("..")] [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] stream = SubResource("AudioStreamRandomizer_dich4") diff --git a/prefabs/characters/Chugar.tscn b/prefabs/characters/Chugar.tscn index 6bf8903..581e735 100644 --- a/prefabs/characters/Chugar.tscn +++ b/prefabs/characters/Chugar.tscn @@ -1,9 +1,8 @@ -[gd_scene load_steps=9 format=3 uid="uid://ddpl8cbck7e6s"] +[gd_scene load_steps=8 format=3 uid="uid://ddpl8cbck7e6s"] [ext_resource type="Script" uid="uid://d0kgxh4ykuv23" path="res://scripts/CSharp/Common/NPC/TalkingCharacter.cs" id="1_xix7p"] [ext_resource type="PackedScene" uid="uid://cqc72e4hq6bcd" path="res://prefabs/interactions/interaction_area_2d.tscn" id="2_udjjv"] [ext_resource type="Texture2D" uid="uid://bgba1uv0muxat" path="res://art/characters/chugeist_tmp.png" id="3_42og6"] -[ext_resource type="Material" uid="uid://blch5kdhkbj75" path="res://art/materials/simple_interactable_outline.tres" id="3_kd44q"] [ext_resource type="Script" uid="uid://d2486x6upmwqq" path="res://scripts/GdScript/dialogic_starter.gd" id="43_xooq4"] [ext_resource type="Script" uid="uid://cvkw4qd2hxksi" path="res://scripts/GdScript/dialogic_toggle.gd" id="44_v6w16"] @@ -21,11 +20,10 @@ z_index = 1 y_sort_enabled = true script = ExtResource("1_xix7p") -[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("2_udjjv")] +[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("2_udjjv")] position = Vector2(0, -450) scale = Vector2(2.805, 2.805) -_outlineMaterial = ExtResource("3_kd44q") -_spriteToOutline = NodePath("../TalkingControl/Visual") +_spritesToOutline = [NodePath("../TalkingControl/Visual")] [node name="CollisionShape3D" parent="InteractionArea/Area2D" index="0"] position = Vector2(-4.99109, 63.4581) diff --git a/prefabs/characters/Player2D.tscn b/prefabs/characters/Player2D.tscn index bcb282b..3388b8a 100644 --- a/prefabs/characters/Player2D.tscn +++ b/prefabs/characters/Player2D.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=485 format=3 uid="uid://c25udixd5m6l0"] +[gd_scene load_steps=486 format=3 uid="uid://c25udixd5m6l0"] [ext_resource type="Script" uid="uid://b05uyj001ehwi" path="res://scripts/CSharp/Common/Farming/VesnaBehaviour2D.cs" id="1_yd5ep"] [ext_resource type="Script" uid="uid://cjbclkxesh3hc" path="res://scripts/CSharp/Common/CharacterControls/PlayerMovement.cs" id="2_1vqmv"] @@ -280,6 +280,7 @@ [ext_resource type="Texture2D" uid="uid://dsjj23763pej5" path="res://art/animation/Vesna2D/Vesna Anims Tools/F01-Idle-Gießkanne/0014.png" id="470_bmmei"] [ext_resource type="AudioStream" uid="uid://ce5mxs2yrwgrh" path="res://audio/sfx/Footsteps/Single/Gravel/Reverb/SFX_Footstep_Gravel_01_R.wav" id="470_dnm27"] [ext_resource type="Script" uid="uid://dx25g14a7xi4w" path="res://scripts/CSharp/Common/Audio/AudioPlayer.cs" id="471_2f15g"] +[ext_resource type="Resource" uid="uid://tt3d166mntmi" path="res://resources/low code/farming/var_sceneNameProvider.tres" id="471_83c4i"] [ext_resource type="AudioStream" uid="uid://fihv17va3r58" path="res://audio/sfx/Footsteps/Single/Gravel/Reverb/SFX_Footstep_Gravel_02_R.wav" id="471_e04c3"] [ext_resource type="AudioStream" uid="uid://cvvjd2i6x047n" path="res://audio/sfx/Footsteps/Single/Gravel/Reverb/SFX_Footstep_Gravel_03_R.wav" id="472_g32y8"] [ext_resource type="Texture2D" uid="uid://blh0t2ofqj2uq" path="res://art/animation/Vesna2D/Vesna Anims Tools/F01-Idle-Gießkanne/0016.png" id="472_wdxsr"] @@ -2155,6 +2156,7 @@ _eventResources = Array[Object]([ExtResource("469_t1d6r")]) [node name="FarmingControls" type="Node2D" parent="." node_paths=PackedStringArray("_movingPlayer", "_wateringParticles")] script = ExtResource("817_6nrw3") +_sceneKeyProvider = ExtResource("471_83c4i") _fieldPrefab = ExtResource("818_16w6h") _movingPlayer = NodePath("../CharacterBody2D") _wateringParticles = NodePath("../pouring water vfx") diff --git a/prefabs/characters/Yeli.tscn b/prefabs/characters/Yeli.tscn index 2e4ac29..d32fd51 100644 --- a/prefabs/characters/Yeli.tscn +++ b/prefabs/characters/Yeli.tscn @@ -206,9 +206,9 @@ y_sort_enabled = true script = ExtResource("1_hn8at") _sprite = NodePath("TalkingControl/AnimatedSprite") -[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("42_ahrat")] +[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("42_ahrat")] position = Vector2(0, -450) -_spriteToOutline = NodePath("../TalkingControl/AnimatedSprite") +_spritesToOutline = [NodePath("../TalkingControl/AnimatedSprite")] [node name="CollisionShape3D" parent="InteractionArea/Area2D" index="0"] shape = SubResource("CircleShape2D_at1n1") diff --git a/prefabs/farm/animals/duck.tscn b/prefabs/farm/animals/duck.tscn index 042f9e0..d3c0ff5 100644 --- a/prefabs/farm/animals/duck.tscn +++ b/prefabs/farm/animals/duck.tscn @@ -160,9 +160,9 @@ libraries = { &"": SubResource("AnimationLibrary_54k4r") } -[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("15_uo3dh")] +[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("15_uo3dh")] position = Vector2(18, -250) -_spriteToOutline = NodePath("../Duck rendered") +_spritesToOutline = [NodePath("../Duck rendered")] [node name="CollisionShape3D" parent="InteractionArea/Area2D" index="0"] shape = SubResource("CircleShape2D_uo3dh") diff --git a/prefabs/farm/base_field.tscn b/prefabs/farm/base_field.tscn index 43b27a3..1234b5e 100644 --- a/prefabs/farm/base_field.tscn +++ b/prefabs/farm/base_field.tscn @@ -36,10 +36,11 @@ texture = ExtResource("5_wx561") [node name="PlantPlaceholder" type="Node2D" parent="FieldBehaviour"] -[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("7_2eegd")] +[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("7_2eegd")] position = Vector2(-16, -54) -_active = false -_spriteToOutline = NodePath("../FieldBehaviour/MaskedField/FieldTexture") +_useOutline = false +_outlineMaterial = null +_spritesToOutline = [NodePath("../FieldBehaviour/MaskedField")] [node name="PlantCreationEventRaiser" type="Node" parent="."] script = ExtResource("9_teirr") diff --git a/prefabs/interactions/generic_item_on_ground_2d.tscn b/prefabs/interactions/generic_item_on_ground_2d.tscn index 5282bd1..17b25e2 100644 --- a/prefabs/interactions/generic_item_on_ground_2d.tscn +++ b/prefabs/interactions/generic_item_on_ground_2d.tscn @@ -57,9 +57,9 @@ theme = SubResource("Theme_harr4") text = "thewe waf a pwoblem wiph picking up te item UWU" autowrap_mode = 3 -[node name="PickupInteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("4_xu8me")] +[node name="PickupInteractionArea" parent="." node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("4_xu8me")] _outlineMaterial = ExtResource("4_harr4") -_spriteToOutline = NodePath("../Icon") +_spritesToOutline = [NodePath("../Icon")] [node name="CollisionShape3D" parent="PickupInteractionArea/Area2D" index="0"] shape = SubResource("CircleShape2D_tlhp6") diff --git a/project.godot b/project.godot index 742ff84..3a9b375 100644 --- a/project.godot +++ b/project.godot @@ -32,6 +32,7 @@ InputService="*res://scripts/CSharp/Common/Services/InputService.cs" QuestManager="*res://prefabs/quests/quest_manager_autoload.tscn" Signal_Debugger="*res://addons/SignalVisualizer/Debugger/SignalDebugger.gd" FightWorldAutoload="*res://prefabs/fight/fight_world_autoload.tscn" +FieldService="*res://scripts/CSharp/Common/Farming/FieldService.cs" [dialogic] @@ -172,6 +173,7 @@ directories/tres_directory={ "unselected_stylebox": "res://addons/dialogic/Editor/Events/styles/unselected_stylebox.tres", "var_ColorTestValue": "res://resources/low code/test/var_ColorTestValue.tres", "var_Counter": "res://resources/low code/test/var_Counter.tres", +"var_sceneNameProvider": "res://resources/low code/farming/var_sceneNameProvider.tres", "vesna_style": "res://addons/dialogic/vesna_style.tres", "vn_textbox_default_panel": "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_default_panel.tres", "vn_textbox_name_label_panel": "res://addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_name_label_panel.tres", @@ -207,11 +209,11 @@ folder_colors={ "res://audio/": "yellow", "res://dialog/": "green", "res://fonts/": "green", -"res://logos/": "green", -"res://prefabs/": "teal", -"res://resources/": "teal", -"res://scenes/": "blue", -"res://scripts/": "purple", +"res://logos/": "blue", +"res://prefabs/": "purple", +"res://resources/": "purple", +"res://scenes/": "purple", +"res://scripts/": "pink", "res://shader/": "pink" } diff --git a/scenes/Babushka_scene_farm_outside_2d.tscn b/scenes/Babushka_scene_farm_outside_2d.tscn index 250ec57..8490cee 100644 --- a/scenes/Babushka_scene_farm_outside_2d.tscn +++ b/scenes/Babushka_scene_farm_outside_2d.tscn @@ -1036,10 +1036,9 @@ position = Vector2(6403, 3362) _timelinesToPlay = PackedStringArray("yeli_quest_select") _retriggerSameTimeline = true -[node name="Vesna" parent="YSorted" node_paths=PackedStringArray("_fieldParent") instance=ExtResource("1_7wfwe")] +[node name="Vesna" parent="YSorted" instance=ExtResource("1_7wfwe")] z_index = 1 position = Vector2(9322, 2018) -_fieldParent = NodePath("../Farm visuals/FieldParent") _hoe = ExtResource("28_6b2nr") [node name="FarmingControls" parent="YSorted/Vesna" index="1" node_paths=PackedStringArray("_camera")] @@ -1064,10 +1063,8 @@ collision_mask = 4 position = Vector2(145.5, -224) shape = SubResource("RectangleShape2D_0sfl7") -[node name="InteractionArea" parent="YSorted/Brünnen" node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("27_klb81")] -_active = false -_spriteToOutline = NodePath("..") -_id = 1 +[node name="InteractionArea" parent="YSorted/Brünnen" node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("27_klb81")] +_spritesToOutline = [NodePath("..")] [node name="CollisionShape3D" parent="YSorted/Brünnen/InteractionArea/Area2D" index="0"] position = Vector2(146, -130) @@ -1146,10 +1143,10 @@ collision_mask = 6 position = Vector2(-252.56, 231.32) polygon = PackedVector2Array(247.227, 43.5123, 44.7822, 43.5123, -87.2178, 45.123, -104.329, -55.2797, -154.107, -73.5347, -160.107, -380.38, -175.44, -400.783, -63.44, -512.461, 97.8934, -541.991, 261.671, -599.172, 374.782, -526.421, 502.338, -526.421, 637.893, -396.488, 598.56, -360.783, 596.338, -58.2327, 528.782, -58.2327, 501.449, 45.9283) -[node name="EnterHouseInteraction" parent="YSorted/Farm visuals/Static" node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("27_klb81")] +[node name="EnterHouseInteraction" parent="YSorted/Farm visuals/Static" node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("27_klb81")] position = Vector2(5834, 2354) scale = Vector2(2.425, 2.425) -_spriteToOutline = NodePath("DoorSprite") +_spritesToOutline = [NodePath("DoorSprite")] _id = 0 [node name="DoorSprite" type="Sprite2D" parent="YSorted/Farm visuals/Static/EnterHouseInteraction"] @@ -2139,9 +2136,9 @@ collision_mask = 4 position = Vector2(-106.663, 182.891) shape = SubResource("RectangleShape2D_ycj14") -[node name="InteractionArea" parent="YSorted/Blocker" node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("27_klb81")] +[node name="InteractionArea" parent="YSorted/Blocker" node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("27_klb81")] position = Vector2(11234, 1850) -_spriteToOutline = NodePath("Fence Door") +_spritesToOutline = [NodePath("Fence Door")] _id = 1 [node name="CollisionShape3D" parent="YSorted/Blocker/InteractionArea/Area2D" index="0"] diff --git a/scenes/Babushka_scene_indoor_common_room.tscn b/scenes/Babushka_scene_indoor_common_room.tscn index 5014960..a2023a6 100644 --- a/scenes/Babushka_scene_indoor_common_room.tscn +++ b/scenes/Babushka_scene_indoor_common_room.tscn @@ -309,10 +309,10 @@ texture = ExtResource("6_blyw3") region_enabled = true region_rect = Rect2(3161, 313, 679, 1050) -[node name="OutsideDoor" parent="BackWall/Room01DorrR" node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("11_gpagp")] +[node name="OutsideDoor" parent="BackWall/Room01DorrR" node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("11_gpagp")] position = Vector2(-7, 248) scale = Vector2(1.5, 1.5) -_spriteToOutline = NodePath("..") +_spritesToOutline = [NodePath("..")] _id = 1 [node name="Room01DoorL" type="Sprite2D" parent="BackWall"] @@ -322,9 +322,9 @@ texture = ExtResource("7_yd2gv") region_enabled = true region_rect = Rect2(0, 0, 3840, 2160) -[node name="VesnasRoomDoor" parent="BackWall/Room01DoorL" node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("11_gpagp")] +[node name="VesnasRoomDoor" parent="BackWall/Room01DoorL" node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("11_gpagp")] position = Vector2(-1559, -16) -_spriteToOutline = NodePath("..") +_spritesToOutline = [NodePath("..")] _id = 0 [node name="CollisionShape3D" parent="BackWall/Room01DoorL/VesnasRoomDoor/Area2D" index="0"] @@ -358,9 +358,9 @@ texture = ExtResource("10_xcryd") region_enabled = true region_rect = Rect2(2360, 864, 356, 251) -[node name="InteractionArea" parent="BackWall/Room01PechkaDoor" node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("11_gpagp")] +[node name="InteractionArea" parent="BackWall/Room01PechkaDoor" node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("11_gpagp")] position = Vector2(0, -3) -_spriteToOutline = NodePath("..") +_spritesToOutline = [NodePath("..")] [node name="CollisionShape3D" parent="BackWall/Room01PechkaDoor/InteractionArea/Area2D" index="0"] shape = SubResource("CircleShape2D_gpagp") @@ -407,10 +407,10 @@ stream = SubResource("AudioStreamRandomizer_b6vf7") bus = &"SFX" script = ExtResource("22_tggq2") -[node name="InteractionArea" parent="BackWall/Katze" node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("11_gpagp")] +[node name="InteractionArea" parent="BackWall/Katze" node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("11_gpagp")] position = Vector2(-6.5, -44) scale = Vector2(0.5, 0.5) -_spriteToOutline = NodePath("..") +_spritesToOutline = [NodePath("..")] [node name="Room assets" type="Node" parent="BackWall"] diff --git a/scenes/Babushka_scene_indoor_vesnas_room.tscn b/scenes/Babushka_scene_indoor_vesnas_room.tscn index c2b4f8d..565e89e 100644 --- a/scenes/Babushka_scene_indoor_vesnas_room.tscn +++ b/scenes/Babushka_scene_indoor_vesnas_room.tscn @@ -98,7 +98,7 @@ _followNode = NodePath("../Vesna/CharacterBody2D") [node name="BedInteraction" parent="." instance=ExtResource("8_phqdf")] position = Vector2(-1429, 487) -_useSprite = false +_useOutline = false _id = 1 [node name="QuestCompleter" type="Node" parent="BedInteraction"] @@ -108,7 +108,7 @@ toStatus = 2 [node name="DoorInteraction" parent="." instance=ExtResource("8_phqdf")] position = Vector2(777, 201) -_useSprite = false +_useOutline = false _id = 0 [node name="CollisionShape3D" parent="DoorInteraction/Area2D" index="0"] diff --git a/scenes/Babushka_scene_outside_beets.tscn b/scenes/Babushka_scene_outside_beets.tscn index bbd17ac..527a852 100644 --- a/scenes/Babushka_scene_outside_beets.tscn +++ b/scenes/Babushka_scene_outside_beets.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=85 format=3 uid="uid://b3ibx4resa1f3"] +[gd_scene load_steps=86 format=3 uid="uid://b3ibx4resa1f3"] [ext_resource type="Script" uid="uid://cssdu8viimwm6" path="res://scripts/CSharp/Common/SceneTransition.cs" id="1_6krrk"] [ext_resource type="Script" uid="uid://bqomwxclsbhd3" path="res://scripts/CSharp/Common/Camera/CameraController.cs" id="2_4ktoi"] @@ -41,6 +41,7 @@ [ext_resource type="Texture2D" uid="uid://badnnid7dgnpk" path="res://art/nature/grass/grass-4.png" id="42_7jeth"] [ext_resource type="PackedScene" uid="uid://dpbbroif2tnil" path="res://prefabs/interactions/generic_item_on_ground_2d.tscn" id="43_dr6bm"] [ext_resource type="Texture2D" uid="uid://ct7ea8ikor5rf" path="res://art/nature/grass/grass-3.png" id="43_g8k4k"] +[ext_resource type="Material" uid="uid://blch5kdhkbj75" path="res://art/materials/simple_interactable_outline.tres" id="44_34r5t"] [ext_resource type="Texture2D" uid="uid://d3dwl6ph0pu1d" path="res://art/nature/grass/grass-6.png" id="44_jgrpl"] [ext_resource type="Script" uid="uid://dhxtdhfqx3bte" path="res://scripts/CSharp/Common/Farming/FieldService2D.cs" id="46_xkmgh"] [ext_resource type="Texture2D" uid="uid://blb3agipyxnal" path="res://art/farm/farming/farmobjekte/zaun/fence_door.png" id="47_xfjh2"] @@ -918,10 +919,9 @@ shape = SubResource("RectangleShape2D_0qu0h") z_index = 1 y_sort_enabled = true -[node name="Vesna" parent="YSorted" node_paths=PackedStringArray("_fieldParent") instance=ExtResource("27_qtaxr")] +[node name="Vesna" parent="YSorted" instance=ExtResource("27_qtaxr")] z_index = 1 position = Vector2(2693, 1876) -_fieldParent = NodePath("../Farm visuals/FieldParent") _hoe = ExtResource("28_le48k") [node name="Animated Sprites" parent="YSorted/Vesna/CharacterBody2D/visuals" index="0"] @@ -956,9 +956,8 @@ collision_mask = 4 position = Vector2(145.5, -224) shape = SubResource("RectangleShape2D_0sfl7") -[node name="InteractionArea" parent="YSorted/Brünnen" node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("31_xcb8u")] -_spriteToOutline = NodePath("..") -_id = 1 +[node name="InteractionArea" parent="YSorted/Brünnen" node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("31_xcb8u")] +_spritesToOutline = [NodePath("..")] [node name="CollisionShape3D" parent="YSorted/Brünnen/InteractionArea/Area2D" index="0"] position = Vector2(146, -130) @@ -1717,6 +1716,9 @@ scale = Vector2(1, 1.00622) _state = 2 _field = NodePath("../..") +[node name="InteractionArea" parent="YSorted/Farm visuals/FieldParent/BaseField" index="1"] +_outlineMaterial = ExtResource("44_34r5t") + [node name="BaseField2" parent="YSorted/Farm visuals/FieldParent" instance=ExtResource("40_efblm")] position = Vector2(1226, 3098.15) scale = Vector2(1, 1.00622) @@ -1728,6 +1730,9 @@ FieldState = 3 _state = 1 _field = NodePath("../..") +[node name="InteractionArea" parent="YSorted/Farm visuals/FieldParent/BaseField2" index="1"] +_outlineMaterial = ExtResource("44_34r5t") + [node name="BaseField3" parent="YSorted/Farm visuals/FieldParent" instance=ExtResource("40_efblm")] position = Vector2(1782, 2606.11) scale = Vector2(1, 1.00622) @@ -1739,6 +1744,9 @@ FieldState = 3 _state = 2 _field = NodePath("../..") +[node name="InteractionArea" parent="YSorted/Farm visuals/FieldParent/BaseField3" index="1"] +_outlineMaterial = ExtResource("44_34r5t") + [node name="BaseField4" parent="YSorted/Farm visuals/FieldParent" instance=ExtResource("40_efblm")] position = Vector2(2559, 2624.22) scale = Vector2(1, 1.00622) @@ -1750,6 +1758,9 @@ FieldState = 3 _state = 2 _field = NodePath("../..") +[node name="InteractionArea" parent="YSorted/Farm visuals/FieldParent/BaseField4" index="1"] +_outlineMaterial = ExtResource("44_34r5t") + [node name="BaseField5" parent="YSorted/Farm visuals/FieldParent" instance=ExtResource("40_efblm")] position = Vector2(3305, 2624.22) scale = Vector2(1, 1.00622) @@ -1761,6 +1772,9 @@ FieldState = 3 _state = 2 _field = NodePath("../..") +[node name="InteractionArea" parent="YSorted/Farm visuals/FieldParent/BaseField5" index="1"] +_outlineMaterial = ExtResource("44_34r5t") + [node name="BaseField6" parent="YSorted/Farm visuals/FieldParent" instance=ExtResource("40_efblm")] position = Vector2(4033, 2618.18) scale = Vector2(1, 1.00622) @@ -1772,6 +1786,9 @@ FieldState = 3 _state = 1 _field = NodePath("../..") +[node name="InteractionArea" parent="YSorted/Farm visuals/FieldParent/BaseField6" index="1"] +_outlineMaterial = ExtResource("44_34r5t") + [node name="BaseField7" parent="YSorted/Farm visuals/FieldParent" instance=ExtResource("40_efblm")] position = Vector2(4755, 2630.26) scale = Vector2(1, 1.00622) @@ -1783,6 +1800,9 @@ FieldState = 3 _state = 2 _field = NodePath("../..") +[node name="InteractionArea" parent="YSorted/Farm visuals/FieldParent/BaseField7" index="1"] +_outlineMaterial = ExtResource("44_34r5t") + [node name="BaseField8" parent="YSorted/Farm visuals/FieldParent" instance=ExtResource("40_efblm")] position = Vector2(4418, 3226.95) scale = Vector2(1, 1.00622) @@ -1794,6 +1814,9 @@ FieldState = 3 _state = 2 _field = NodePath("../..") +[node name="InteractionArea" parent="YSorted/Farm visuals/FieldParent/BaseField8" index="1"] +_outlineMaterial = ExtResource("44_34r5t") + [node name="BaseField9" parent="YSorted/Farm visuals/FieldParent" instance=ExtResource("40_efblm")] position = Vector2(5317, 3208.83) scale = Vector2(1, 1.00622) @@ -1805,11 +1828,14 @@ FieldState = 3 _state = 1 _field = NodePath("../..") +[node name="InteractionArea" parent="YSorted/Farm visuals/FieldParent/BaseField9" index="1"] +_outlineMaterial = ExtResource("44_34r5t") + [node name="Blocker" type="Node2D" parent="YSorted"] -[node name="BackToFarm" parent="YSorted/Blocker" node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("31_xcb8u")] +[node name="BackToFarm" parent="YSorted/Blocker" node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("31_xcb8u")] position = Vector2(3774, 2025) -_spriteToOutline = NodePath("Fence Door2") +_spritesToOutline = [NodePath("Fence Door2")] _id = 0 [node name="CollisionShape3D" parent="YSorted/Blocker/BackToFarm/Area2D" index="0"] diff --git a/scripts/CSharp/Common/CharacterControls/InteractionArea2D.cs b/scripts/CSharp/Common/CharacterControls/InteractionArea2D.cs index 6fcf84f..664cbb8 100644 --- a/scripts/CSharp/Common/CharacterControls/InteractionArea2D.cs +++ b/scripts/CSharp/Common/CharacterControls/InteractionArea2D.cs @@ -7,13 +7,13 @@ namespace Babushka.scripts.CSharp.Common.CharacterControls; public partial class InteractionArea2D : Node2D { + [Export] private Area2D _area; [Export] private Label _label; [Export] private bool _active = true; [Export] private bool _useOutline = true; [Export] private ShaderMaterial _outlineMaterial; - [Export] private CanvasItem? _spriteToOutline; // keep to not break old usages. TODO: remove later - [Export] private CanvasItem[] _spritesToOutline; + [Export] private CanvasItem[] _spritesToOutline = []; [Export] private bool _showLabel = true; [Export] private int _id = -1; // TODO: remove @@ -38,21 +38,7 @@ public partial class InteractionArea2D : Node2D { if (_useOutline) { - try - { - // support old implementations of the script. If the sprite to outline is set, add it to the array - if (_spriteToOutline != null) - { - Array.Resize(ref _spritesToOutline, _spritesToOutline.Length + 1); - _spritesToOutline[^1] = _spriteToOutline; - } - - _backupMaterials = _spritesToOutline.Select(s => s.Material).ToArray(); - } - catch (Exception exception) - { - GD.PrintErr($"No sprite to outline found on: {GetParent().Name}" + exception.Message); - } + _backupMaterials = _spritesToOutline.Select(s => s.Material).ToArray(); } } diff --git a/scripts/CSharp/Common/Util/NodeExtension.cs b/scripts/CSharp/Common/Util/NodeExtension.cs index 07eaa81..52e8477 100644 --- a/scripts/CSharp/Common/Util/NodeExtension.cs +++ b/scripts/CSharp/Common/Util/NodeExtension.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Godot; namespace Babushka.scripts.CSharp.Common.Util; @@ -23,4 +24,54 @@ public static class NodeExtension } throw new Exception($"Parent of type {typeof(T)} not found for node {self.Name}"); } + + //acts like Unity's GetComponent / GetComponentInChildren + // only works with Godot's built-in types. + public static T GetChildByType(this Node node, bool recursive = true) + where T : Node + { + int childCount = node.GetChildCount(); + + for (int i = 0; i < childCount; i++) + { + Node child = node.GetChild(i); + if (child is T childT) + return childT; + + if (recursive && child.GetChildCount() > 0) + { + T recursiveResult = child.GetChildByType(true); + if (recursiveResult != null) + return recursiveResult; + } + } + + return null; + } + + /// + /// Another reimplementation of Unity's GetComponent. + /// Verified to work with all types, also derived ones, but only when used from within a scene and at runtime. + /// + /// + /// + /// + public static T GetComponent(Node node) + { + if (node is T) + { + return (T)(object)node; + } + + foreach (Node child in node.GetChildren()) + { + if (child is T) + { + return (T)(object)child; + } + } + + return (T)(object)null; + } + }