diff --git a/art/animals/duck_flapFlap.res b/art/animals/duck_flapFlap.res index 89792f7..80916bd 100644 Binary files a/art/animals/duck_flapFlap.res and b/art/animals/duck_flapFlap.res differ diff --git a/art/materials/intaractable_outline.tres b/art/materials/intaractable_outline.tres new file mode 100644 index 0000000..fe3cc01 --- /dev/null +++ b/art/materials/intaractable_outline.tres @@ -0,0 +1,9 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://blch5kdhkbj75"] + +[ext_resource type="Shader" uid="uid://dsa3lv2as7q3b" path="res://shader/outline.gdshader" id="1_awyqf"] + +[resource] +shader = ExtResource("1_awyqf") +shader_parameter/allow_out_of_bounds = true +shader_parameter/outline_thickness = 8.0 +shader_parameter/outline_color = Color(0.88, 0.81664, 0.4576, 1) diff --git a/prefabs/Interactables/trash_object.tscn b/prefabs/Interactables/trash_object.tscn index aba551a..3a3133c 100644 --- a/prefabs/Interactables/trash_object.tscn +++ b/prefabs/Interactables/trash_object.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=15 format=3 uid="uid://sbf12hin4kes"] +[gd_scene load_steps=16 format=3 uid="uid://sbf12hin4kes"] [ext_resource type="Texture2D" uid="uid://bylgmr0skwtrs" path="res://art/farm/farming/farmobjekte/broken tools atlas.png" id="1_k4ca3"] [ext_resource type="PackedScene" uid="uid://cqc72e4hq6bcd" path="res://prefabs/interactions/interaction_area_2d.tscn" id="2_gcgfd"] +[ext_resource type="Material" uid="uid://blch5kdhkbj75" path="res://art/materials/intaractable_outline.tres" id="3_ic616"] [ext_resource type="AudioStream" uid="uid://be6g8b3v3u1ai" path="res://audio/sfx/Kitchen/SFX_Cooking_Knife_PickUp_01.wav" id="3_ktmp7"] [ext_resource type="AudioStream" uid="uid://cgjsajsdrrn0j" path="res://audio/sfx/Kitchen/SFX_Cooking_Knife_PutDown_01.wav" id="4_ic616"] [ext_resource type="AudioStream" uid="uid://br4drgupled6c" path="res://audio/sfx/Kitchen/SFX_Cooking_Pot_01.wav" id="5_dx175"] @@ -33,10 +34,12 @@ y_sort_enabled = true texture = ExtResource("1_k4ca3") offset = Vector2(1, -215) region_enabled = true -region_rect = Rect2(57, 493, 334, 475) +region_rect = Rect2(44, 479, 356, 503) -[node name="InteractionArea" parent="." instance=ExtResource("2_gcgfd")] +[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("2_gcgfd")] position = Vector2(0, -172) +_outlineMaterial = ExtResource("3_ic616") +_spriteToOutline = NodePath("..") [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] stream = SubResource("AudioStreamRandomizer_dich4") diff --git a/prefabs/characters/Yeli.tscn b/prefabs/characters/Yeli.tscn index bae482c..63e6254 100644 --- a/prefabs/characters/Yeli.tscn +++ b/prefabs/characters/Yeli.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=48 format=3 uid="uid://dfvgp1my5rydh"] +[gd_scene load_steps=49 format=3 uid="uid://dfvgp1my5rydh"] [ext_resource type="Texture2D" uid="uid://c34012j5ukiuf" path="res://art/animation/Yeli2D/F01-Yeli_Idle/0001.png" id="1_03m0b"] [ext_resource type="Script" uid="uid://d2486x6upmwqq" path="res://scripts/GdScript/dialogic_starter.gd" id="1_at1n1"] [ext_resource type="Script" uid="uid://d0kgxh4ykuv23" path="res://scripts/CSharp/Common/NPC/TalkingCharacter.cs" id="1_hn8at"] [ext_resource type="Texture2D" uid="uid://cksf38vypfsae" path="res://art/animation/Yeli2D/F01-Yeli_Idle/0002.png" id="2_hn8at"] [ext_resource type="Texture2D" uid="uid://e8dj27qcpuoo" path="res://art/animation/Yeli2D/F01-Yeli_Idle/0003.png" id="3_ahrat"] +[ext_resource type="Material" uid="uid://blch5kdhkbj75" path="res://art/materials/intaractable_outline.tres" id="3_pfk7p"] [ext_resource type="Texture2D" uid="uid://c5k63jgxqr0do" path="res://art/animation/Yeli2D/F01-Yeli_Idle/0004.png" id="4_at1n1"] [ext_resource type="Texture2D" uid="uid://b8lkbpi220b5h" path="res://art/animation/Yeli2D/F01-Yeli_Idle/0005.png" id="5_aqu1t"] [ext_resource type="Texture2D" uid="uid://bv5bxpx6vf2h0" path="res://art/animation/Yeli2D/F01-Yeli_Idle/0006.png" id="6_pfk7p"] @@ -192,22 +193,15 @@ y_sort_enabled = true script = ExtResource("1_hn8at") _sprite = NodePath("TalkingControl/AnimatedSprite") -[node name="InteractionArea" parent="." instance=ExtResource("42_ahrat")] +[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("42_ahrat")] position = Vector2(0, -450) scale = Vector2(2.805, 2.805) +_outlineMaterial = ExtResource("3_pfk7p") +_spriteToOutline = NodePath("../TalkingControl/AnimatedSprite") [node name="CollisionShape3D" parent="InteractionArea/Area2D" index="0"] shape = SubResource("CircleShape2D_at1n1") -[node name="Label" parent="InteractionArea" index="1"] -custom_minimum_size = Vector2(10, 10) -offset_left = -127.273 -offset_top = -245.633 -offset_right = 119.727 -offset_bottom = -142.633 -theme_override_font_sizes/font_size = 60 -text = "[E] talk" - [node name="TalkingControl" type="Node2D" parent="."] [node name="AnimatedSprite" type="AnimatedSprite2D" parent="TalkingControl"] diff --git a/prefabs/farm/duck.tscn b/prefabs/farm/duck.tscn index 0756d6f..ab54305 100644 --- a/prefabs/farm/duck.tscn +++ b/prefabs/farm/duck.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=23 format=3 uid="uid://muuxxgvx33fp"] +[gd_scene load_steps=25 format=3 uid="uid://muuxxgvx33fp"] [ext_resource type="Script" uid="uid://7m1rt7agb6rm" path="res://scripts/CSharp/Common/Temp/MVPDuck.cs" id="1_54k4r"] [ext_resource type="Texture2D" uid="uid://hvchk6t0xe7j" path="res://art/animals/Ente.png" id="1_cgxhx"] @@ -16,6 +16,7 @@ [ext_resource type="Animation" uid="uid://b3dwd88uvfk1k" path="res://art/animals/duck_flapFlap.res" id="14_uo3dh"] [ext_resource type="AudioStream" uid="uid://bsr5m8u2sle5k" path="res://audio/sfx/Animals/SFX_Duck_Wings_07.wav" id="14_xhefb"] [ext_resource type="PackedScene" uid="uid://cqc72e4hq6bcd" path="res://prefabs/interactions/interaction_area_2d.tscn" id="15_uo3dh"] +[ext_resource type="Material" uid="uid://blch5kdhkbj75" path="res://art/materials/intaractable_outline.tres" id="16_nxoeu"] [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_sot7i"] streams_count = 4 @@ -39,7 +40,7 @@ length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("bodyLookingRight/wingR:rotation") +tracks/0/path = NodePath("SubViewport/bodyLookingRight/wingR:rotation") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -51,7 +52,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("bodyLookingRight/wingL:rotation") +tracks/1/path = NodePath("SubViewport/bodyLookingRight/wingL:rotation") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -63,7 +64,7 @@ tracks/1/keys = { tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("bodyLookingRight/head:rotation") +tracks/2/path = NodePath("SubViewport/bodyLookingRight/head:rotation") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { @@ -75,7 +76,7 @@ tracks/2/keys = { tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = true -tracks/3/path = NodePath("bodyLookingRight/head/beak upper:rotation") +tracks/3/path = NodePath("SubViewport/bodyLookingRight/head/beak upper:rotation") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { @@ -87,7 +88,7 @@ tracks/3/keys = { tracks/4/type = "value" tracks/4/imported = false tracks/4/enabled = true -tracks/4/path = NodePath("bodyLookingRight/head/beak lower:rotation") +tracks/4/path = NodePath("SubViewport/bodyLookingRight/head/beak lower:rotation") tracks/4/interp = 1 tracks/4/loop_wrap = true tracks/4/keys = { @@ -135,6 +136,9 @@ _data = { resource_local_to_scene = true radius = 443.041 +[sub_resource type="ViewportTexture" id="ViewportTexture_4830j"] +viewport_path = NodePath("SubViewport") + [node name="Duck" type="Node2D" node_paths=PackedStringArray("_animationPlayer")] z_index = 1 y_sort_enabled = true @@ -157,11 +161,28 @@ libraries = { &"": SubResource("AnimationLibrary_54k4r") } -[node name="bodyLookingRight" type="Node2D" parent="."] -position = Vector2(9.53674e-07, 0) +[node name="InteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("15_uo3dh")] +position = Vector2(18, -250) +_outlineMaterial = ExtResource("16_nxoeu") +_spriteToOutline = NodePath("../Duck rendered") + +[node name="CollisionShape3D" parent="InteractionArea/Area2D" index="0"] +shape = SubResource("CircleShape2D_uo3dh") + +[node name="Duck rendered" type="Sprite2D" parent="."] +position = Vector2(0, -250) +texture = SubResource("ViewportTexture_4830j") + +[node name="SubViewport" type="SubViewport" parent="."] +transparent_bg = true +size = Vector2i(400, 600) + +[node name="bodyLookingRight" type="Node2D" parent="SubViewport"] +position = Vector2(200, 550) rotation = 0.0135349 +scale = Vector2(1, 1) -[node name="head" type="Sprite2D" parent="bodyLookingRight"] +[node name="head" type="Sprite2D" parent="SubViewport/bodyLookingRight"] position = Vector2(45.706, -451.714) rotation = 0.284615 scale = Vector2(1, 0.997) @@ -171,7 +192,8 @@ offset = Vector2(25.2328, -23.0689) region_enabled = true region_rect = Rect2(45, 24, 87, 82) -[node name="beak upper" type="Sprite2D" parent="bodyLookingRight/head"] +[node name="beak upper" type="Sprite2D" parent="SubViewport/bodyLookingRight/head"] +z_index = 1 position = Vector2(50.669, -7.16257) rotation = -0.0427724 scale = Vector2(0.62715, 0.62715) @@ -180,7 +202,7 @@ offset = Vector2(57.1263, -7.47815) region_enabled = true region_rect = Rect2(292, 37, 152, 98) -[node name="beak lower" type="Sprite2D" parent="bodyLookingRight/head"] +[node name="beak lower" type="Sprite2D" parent="SubViewport/bodyLookingRight/head"] position = Vector2(47.9076, -15.7341) rotation = 0.0364142 scale = Vector2(0.58615, 0.58615) @@ -189,7 +211,7 @@ offset = Vector2(60.4601, 37.8134) region_enabled = true region_rect = Rect2(295, 170, 145, 39) -[node name="torso" type="Sprite2D" parent="bodyLookingRight"] +[node name="torso" type="Sprite2D" parent="SubViewport/bodyLookingRight"] position = Vector2(4.65357, -172.523) scale = Vector2(1.07526, 1.01724) texture = ExtResource("1_cgxhx") @@ -197,7 +219,7 @@ offset = Vector2(2.87376, -131.092) region_enabled = true region_rect = Rect2(30, 168, 125, 326) -[node name="wingR" type="Sprite2D" parent="bodyLookingRight"] +[node name="wingR" type="Sprite2D" parent="SubViewport/bodyLookingRight"] position = Vector2(-29.2564, -265.875) rotation = -0.371117 texture = ExtResource("1_cgxhx") @@ -205,7 +227,7 @@ offset = Vector2(-50, 50) region_enabled = true region_rect = Rect2(196, 231, 180, 164) -[node name="wingL" type="Sprite2D" parent="bodyLookingRight"] +[node name="wingL" type="Sprite2D" parent="SubViewport/bodyLookingRight"] position = Vector2(45.8131, -281.97) rotation = -0.0925884 skew = -0.0345086 @@ -214,7 +236,7 @@ offset = Vector2(-59.5924, 55.37) region_enabled = true region_rect = Rect2(196, 231, 180, 164) -[node name="underbelly" type="Sprite2D" parent="bodyLookingRight"] +[node name="underbelly" type="Sprite2D" parent="SubViewport/bodyLookingRight"] position = Vector2(-12.6602, -88.6718) rotation = -2.98225 scale = Vector2(0.672245, 0.955267) @@ -224,7 +246,7 @@ offset = Vector2(26.4135, 70.6083) region_enabled = true region_rect = Rect2(196, 231, 180, 164) -[node name="leg left" type="Sprite2D" parent="bodyLookingRight"] +[node name="leg left" type="Sprite2D" parent="SubViewport/bodyLookingRight"] position = Vector2(35.0323, -227.23) rotation = 2.42655 scale = Vector2(1.05221, 1.04106) @@ -233,7 +255,7 @@ texture = ExtResource("1_cgxhx") region_enabled = true region_rect = Rect2(196, 231, 177, 161) -[node name="left thigh" type="Sprite2D" parent="bodyLookingRight/leg left"] +[node name="left thigh" type="Sprite2D" parent="SubViewport/bodyLookingRight/leg left"] z_index = 1 y_sort_enabled = true position = Vector2(73.353, -69.771) @@ -243,7 +265,7 @@ texture = ExtResource("1_cgxhx") region_enabled = true region_rect = Rect2(368, 263, 81, 89) -[node name="left shin" type="Sprite2D" parent="bodyLookingRight/leg left/left thigh"] +[node name="left shin" type="Sprite2D" parent="SubViewport/bodyLookingRight/leg left/left thigh"] z_index = 1 y_sort_enabled = true position = Vector2(-5.71882, 19.9984) @@ -255,7 +277,7 @@ offset = Vector2(10, -50) region_enabled = true region_rect = Rect2(360, 361, 68, 126) -[node name="left foot" type="Sprite2D" parent="bodyLookingRight/leg left/left thigh/left shin"] +[node name="left foot" type="Sprite2D" parent="SubViewport/bodyLookingRight/leg left/left thigh/left shin"] z_index = 1 y_sort_enabled = true position = Vector2(15.1289, -77.6075) @@ -266,7 +288,7 @@ offset = Vector2(40, 40) region_enabled = true region_rect = Rect2(246, 393, 111, 111) -[node name="right leg" type="Sprite2D" parent="bodyLookingRight"] +[node name="right leg" type="Sprite2D" parent="SubViewport/bodyLookingRight"] position = Vector2(-25.2564, -163.875) rotation = -0.463741 scale = Vector2(1.07492, 1.01762) @@ -274,7 +296,7 @@ texture = ExtResource("1_cgxhx") region_enabled = true region_rect = Rect2(196, 231, 177, 161) -[node name="right thigh" type="Sprite2D" parent="bodyLookingRight/right leg"] +[node name="right thigh" type="Sprite2D" parent="SubViewport/bodyLookingRight/right leg"] position = Vector2(-29.7603, 44.2374) rotation = 0.249342 scale = Vector2(0.625107, 0.655894) @@ -283,7 +305,7 @@ texture = ExtResource("1_cgxhx") region_enabled = true region_rect = Rect2(368, 263, 81, 89) -[node name="right shin" type="Sprite2D" parent="bodyLookingRight/right leg/right thigh"] +[node name="right shin" type="Sprite2D" parent="SubViewport/bodyLookingRight/right leg/right thigh"] position = Vector2(-2.78734, 11.5692) rotation = 0.0689206 scale = Vector2(1.12016, 1.07128) @@ -293,7 +315,7 @@ offset = Vector2(-14.163, 37.0936) region_enabled = true region_rect = Rect2(360, 361, 68, 126) -[node name="right foot" type="Sprite2D" parent="bodyLookingRight/right leg/right thigh/right shin"] +[node name="right foot" type="Sprite2D" parent="SubViewport/bodyLookingRight/right leg/right thigh/right shin"] position = Vector2(-20.0986, 67.7507) rotation = 0.14855 scale = Vector2(1.212, 1.212) @@ -302,17 +324,6 @@ offset = Vector2(40, 40) region_enabled = true region_rect = Rect2(246, 393, 111, 111) -[node name="InteractionArea" parent="." instance=ExtResource("15_uo3dh")] -position = Vector2(18, -205) - -[node name="CollisionShape3D" parent="InteractionArea/Area2D" index="0"] -shape = SubResource("CircleShape2D_uo3dh") - -[node name="Label" parent="InteractionArea" index="1"] -modulate = Color(0, 0, 0, 1) -z_index = 1 -y_sort_enabled = true - [connection signal="Interacted" from="InteractionArea" to="." method="TransferToTargetAfterDelay"] [connection signal="Interacted" from="InteractionArea" to="Audio/NakNak" method="PlayOneShot"] diff --git a/prefabs/interactions/generic_item_on_ground_2d.tscn b/prefabs/interactions/generic_item_on_ground_2d.tscn index 472bd23..452c748 100644 --- a/prefabs/interactions/generic_item_on_ground_2d.tscn +++ b/prefabs/interactions/generic_item_on_ground_2d.tscn @@ -2,6 +2,7 @@ [ext_resource type="Script" uid="uid://btusf04xnywhm" path="res://scripts/CSharp/Common/Inventory/ItemOnGround2D.cs" id="1_tlhp6"] [ext_resource type="Script" uid="uid://c8suoi3i6kqai" path="res://scripts/CSharp/Common/Inventory/ItemOnGroundSpawnWith.cs" id="3_xu8me"] +[ext_resource type="Material" uid="uid://blch5kdhkbj75" path="res://art/materials/intaractable_outline.tres" id="4_harr4"] [ext_resource type="PackedScene" uid="uid://cqc72e4hq6bcd" path="res://prefabs/interactions/interaction_area_2d.tscn" id="4_xu8me"] [ext_resource type="Texture2D" uid="uid://cfxibry711o16" path="res://art/ui/UI/icons/icon-scythe.png" id="5_harr4"] @@ -15,9 +16,6 @@ default_font_size = 40 resource_local_to_scene = true radius = 300.0 -[sub_resource type="Theme" id="Theme_xu8me"] -default_font_size = 75 - [node name="GenericItemOnGround" type="Node2D"] script = ExtResource("1_tlhp6") @@ -43,20 +41,13 @@ theme = SubResource("Theme_harr4") text = "thewe waf a pwoblem wiph picking up te item UWU" autowrap_mode = 3 -[node name="PickupInteractionArea" parent="." instance=ExtResource("4_xu8me")] +[node name="PickupInteractionArea" parent="." node_paths=PackedStringArray("_spriteToOutline") instance=ExtResource("4_xu8me")] +_outlineMaterial = ExtResource("4_harr4") +_spriteToOutline = NodePath("../Icon") [node name="CollisionShape3D" parent="PickupInteractionArea/Area2D" index="0"] shape = SubResource("CircleShape2D_tlhp6") -[node name="Label" parent="PickupInteractionArea" index="1"] -z_index = 5 -offset_left = -68.0 -offset_top = -111.0 -offset_right = 75.0 -offset_bottom = -3.0 -theme = SubResource("Theme_xu8me") -vertical_alignment = 1 - [node name="Icon" type="Sprite2D" parent="."] position = Vector2(5, -300) scale = Vector2(0.868852, 0.868852) diff --git a/prefabs/interactions/interaction_area_2d.tscn b/prefabs/interactions/interaction_area_2d.tscn index 4796490..aabd043 100644 --- a/prefabs/interactions/interaction_area_2d.tscn +++ b/prefabs/interactions/interaction_area_2d.tscn @@ -7,12 +7,12 @@ resource_local_to_scene = true radius = 300.0 [sub_resource type="Theme" id="Theme_5ajrf"] -default_font_size = 75 +default_font_size = 30 [node name="InteractionArea" type="Node2D" node_paths=PackedStringArray("_area", "_label")] script = ExtResource("1_5ajrf") _area = NodePath("Area2D") -_label = NodePath("Label") +_label = NodePath("Area2D/CanvasLayer/MarginContainer/Label") [node name="Area2D" type="Area2D" parent="."] collision_mask = 4 @@ -20,15 +20,32 @@ collision_mask = 4 [node name="CollisionShape3D" type="CollisionShape2D" parent="Area2D"] shape = SubResource("CircleShape2D_npluf") -[node name="Label" type="Label" parent="."] +[node name="CanvasLayer" type="CanvasLayer" parent="Area2D"] + +[node name="MarginContainer" type="MarginContainer" parent="Area2D/CanvasLayer"] +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -88.0 +offset_top = -100.0 +offset_right = 3.0 +offset_bottom = 3.0 +grow_horizontal = 0 +grow_vertical = 0 +theme_override_constants/margin_right = 20 +theme_override_constants/margin_bottom = 20 + +[node name="Label" type="Label" parent="Area2D/CanvasLayer/MarginContainer"] visible = false -offset_left = -46.0 -offset_top = -55.0 -offset_right = 45.0 -offset_bottom = 48.0 +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 8 theme = SubResource("Theme_5ajrf") text = "[E]" -horizontal_alignment = 1 +horizontal_alignment = 2 +vertical_alignment = 2 [connection signal="body_entered" from="Area2D" to="." method="OnPlayerEntered"] [connection signal="body_exited" from="Area2D" to="." method="OnPlayerExited"] diff --git a/scenes/Babushka_scene_farm_outside_2d.tscn b/scenes/Babushka_scene_farm_outside_2d.tscn index 9f70580..a788d7f 100644 --- a/scenes/Babushka_scene_farm_outside_2d.tscn +++ b/scenes/Babushka_scene_farm_outside_2d.tscn @@ -1127,6 +1127,8 @@ polygon = PackedVector2Array(247.227, 43.5123, 44.7822, 43.5123, -87.2178, 45.12 [node name="EnterHouseInteraction" parent="YSorted/Farm visuals/Static" instance=ExtResource("27_klb81")] position = Vector2(5839, 2349) scale = Vector2(2.425, 2.425) +_useOutline = false +_useSprite = false _id = 0 [node name="greenery" type="Node2D" parent="YSorted/Farm visuals/Static"] @@ -2221,30 +2223,35 @@ position = Vector2(1269, 3170) z_index = 0 y_sort_enabled = false position = Vector2(3183, 2369) +offset = Vector2(1, -50) region_rect = Rect2(207, 1184, 149, 142) [node name="trashObject3" parent="YSorted/trash" instance=ExtResource("53_ycj14")] z_index = 0 y_sort_enabled = false position = Vector2(4724, 3519) +offset = Vector2(1, -50) region_rect = Rect2(400, 1053, 163, 141) [node name="trashObject4" parent="YSorted/trash" instance=ExtResource("53_ycj14")] z_index = 0 y_sort_enabled = false position = Vector2(5385, 3391) +offset = Vector2(1, -50) region_rect = Rect2(1048, 1092, 348, 106) [node name="trashObject5" parent="YSorted/trash" instance=ExtResource("53_ycj14")] z_index = 0 y_sort_enabled = false position = Vector2(8051, 2541) +offset = Vector2(1, -50) region_rect = Rect2(531, 1207, 176, 167) [node name="trashObject6" parent="YSorted/trash" instance=ExtResource("53_ycj14")] z_index = 0 y_sort_enabled = false position = Vector2(9629, 3312) +offset = Vector2(1, -50) region_rect = Rect2(207, 1184, 149, 142) [node name="trashObject7" parent="YSorted/trash" instance=ExtResource("53_ycj14")] @@ -2257,15 +2264,14 @@ z_index = 0 y_sort_enabled = false position = Vector2(14589, 2505) rotation = 1.77025 -scale = Vector2(1, 1) region_rect = Rect2(629, 81, 227, 829) [node name="trashObject9" parent="YSorted/trash" instance=ExtResource("53_ycj14")] z_index = 0 y_sort_enabled = false -position = Vector2(15197, 3447) +position = Vector2(15322, 3472) rotation = 1.77025 -scale = Vector2(1, 1) +offset = Vector2(0, 0) region_rect = Rect2(1048, 1092, 348, 106) [node name="CanvasLayer" parent="." instance=ExtResource("32_2nee2")] diff --git a/scenes/Babushka_scene_indoor_common_room.tscn b/scenes/Babushka_scene_indoor_common_room.tscn index 5b5a308..2947cb4 100644 --- a/scenes/Babushka_scene_indoor_common_room.tscn +++ b/scenes/Babushka_scene_indoor_common_room.tscn @@ -529,12 +529,6 @@ _timelinesToPlay = PackedStringArray("yeli_intro_05") position = Vector2(-207.487, 136.185) shape = SubResource("CircleShape2D_wuntg") -[node name="Label" parent="Yeli/InteractionArea" index="1"] -offset_left = -332.62 -offset_top = -99.8217 -offset_right = -85.6204 -offset_bottom = 3.17825 - [node name="AnimatedSprite" parent="Yeli/TalkingControl" index="0"] position = Vector2(-576, 368) diff --git a/scripts/CSharp/Common/CharacterControls/InteractionArea2D.cs b/scripts/CSharp/Common/CharacterControls/InteractionArea2D.cs index 5c741fe..6e5187f 100644 --- a/scripts/CSharp/Common/CharacterControls/InteractionArea2D.cs +++ b/scripts/CSharp/Common/CharacterControls/InteractionArea2D.cs @@ -6,15 +6,25 @@ public partial class InteractionArea2D : Node2D { [Export] private Area2D _area; [Export] private Label _label; - [Export] private SpriteSwitcher2D _sprites; // TODO: remove + [Export] private bool _useOutline = true; + [Export] private ShaderMaterial _outlineMaterial; + [Export] private bool _useSprite = true; + [Export] private CanvasItem _spriteToOutline; [Export] private bool _showLabel = true; [Export] private int _id = -1; // TODO: remove + private Material _backupMaterial; [Signal] public delegate void InteractedToolEventHandler(int id); // TODO: remove [Signal] public delegate void InteractedEventHandler(); public bool IsActive { get; set; } = true; + public override void _Ready() + { + if(_useSprite && _useOutline) + _backupMaterial = _spriteToOutline.Material; + } + public void OnPlayerEntered(Node2D player) { if (!IsActive) @@ -22,6 +32,11 @@ public partial class InteractionArea2D : Node2D if(_showLabel) _label.Show(); + + if (!_useSprite || !_useOutline) + return; + + _spriteToOutline.Material = _outlineMaterial; } public void OnPlayerExited(Node2D player) @@ -30,6 +45,11 @@ public partial class InteractionArea2D : Node2D return; _label.Hide(); + + if (!_useSprite || !_useOutline) + return; + + _spriteToOutline.Material = _backupMaterial; } public override void _Input(InputEvent @event) @@ -40,6 +60,10 @@ public partial class InteractionArea2D : Node2D if (@event.IsAction("interact") && @event.IsPressed() && _area.HasOverlappingBodies()) { _label.Hide(); + + if (_useSprite && _useOutline) + _spriteToOutline.Material = _backupMaterial; + EmitSignal(SignalName.InteractedTool, _id); EmitSignal(SignalName.Interacted); } @@ -47,13 +71,9 @@ public partial class InteractionArea2D : Node2D public void SetSpriteActiveState(bool success, int id) // TODO: remove { + GD.PrintErr("SetSpriteActiveState is being called."); if(!IsActive) return; - - if (_id == id) - { - _sprites.SwitchState(!success); - } } public void ToggleActive() diff --git a/shader/outline.gdshader b/shader/outline.gdshader new file mode 100644 index 0000000..356dea2 --- /dev/null +++ b/shader/outline.gdshader @@ -0,0 +1,73 @@ +shader_type canvas_item; + +uniform bool allow_out_of_bounds = true; +uniform float outline_thickness: hint_range(0.0, 16.0, 1.0) = 1.0; +uniform vec4 outline_color: source_color = vec4(1.0); + +bool is_inside_usquare(vec2 x) { + return x == clamp(x, vec2(0.0), vec2(1.0)); +} + +vec4 blend(vec4 bottom, vec4 top) { + float alpha = top.a + bottom.a * (1.0 - top.a); + if (alpha < 0.0001) return vec4(0.0); + + vec3 color = mix(bottom.rgb * bottom.a, top.rgb, top.a) / alpha; + return vec4(color, alpha); +} + +void vertex() { + if (allow_out_of_bounds) VERTEX += (UV * 2.0 - 1.0) * outline_thickness; +} + +void fragment() { + if (outline_thickness > 0.0 && outline_color.a > 0.0) { + vec2 uv = UV; + vec4 texture_color = texture(TEXTURE, UV); + + if (allow_out_of_bounds) { + vec2 texture_pixel_size = vec2(1.0) / (vec2(1.0) / TEXTURE_PIXEL_SIZE + vec2(outline_thickness * 2.0)); + uv = (uv - texture_pixel_size * outline_thickness) * TEXTURE_PIXEL_SIZE / texture_pixel_size; + + if (is_inside_usquare(uv)) { + texture_color = texture(TEXTURE, uv); + } else { + texture_color = vec4(0.0); + } + } + + float alpha = 0.0; + + for (float y = 1.0; y <= outline_thickness; y++) { + for (float x = 0.0; x <= y; x++) { + if (length(vec2(x, y - 0.5)) > outline_thickness) break; + + float look_at_alpha; + vec2 look_at_uv[8] = { + uv + vec2(x, y) * TEXTURE_PIXEL_SIZE, + uv + vec2(-x, y) * TEXTURE_PIXEL_SIZE, + uv + vec2(x, -y) * TEXTURE_PIXEL_SIZE, + uv + vec2(-x, -y) * TEXTURE_PIXEL_SIZE, + uv + vec2(y, x) * TEXTURE_PIXEL_SIZE, + uv + vec2(-y, x) * TEXTURE_PIXEL_SIZE, + uv + vec2(y, -x) * TEXTURE_PIXEL_SIZE, + uv + vec2(-y, -x) * TEXTURE_PIXEL_SIZE + }; + + for (int i = 0; i < 8; i++) { + if (is_inside_usquare(look_at_uv[i])) { + look_at_alpha = texture(TEXTURE, look_at_uv[i]).a; + if (look_at_alpha > alpha) alpha = look_at_alpha; + if (1.0 - alpha < 0.0001) break; + } + } + + if (1.0 - alpha < 0.0001) break; + } + + if (1.0 - alpha < 0.0001) break; + } + + COLOR = blend(vec4(outline_color.rgb, alpha * outline_color.a), texture_color); + } +} diff --git a/shader/outline.gdshader.uid b/shader/outline.gdshader.uid new file mode 100644 index 0000000..a195e00 --- /dev/null +++ b/shader/outline.gdshader.uid @@ -0,0 +1 @@ +uid://dsa3lv2as7q3b