From b3b6768996ea85201724ea392e6a42aa3ecea0db Mon Sep 17 00:00:00 2001 From: Prantik-07 Date: Tue, 3 Feb 2026 21:42:46 +0530 Subject: [PATCH 1/2] fix(ui): polish game UI, fix overlapping buttons, and resolve crashes --- Kuack/Frame 10.png.import | 6 ++ Kuack/frame 11.png.import | 6 ++ Kuack/frame 12.png.import | 6 ++ Kuack/new1.png.import | 6 ++ Kuack/new2.png.import | 6 ++ Kuack/new3.png.import | 6 ++ Kuack/new4.png.import | 6 ++ Scenes/ConceptGlossary.tscn | 105 ++++++++++++++++++ Scenes/ConnectorLine.tscn | 15 +++ Scenes/basicEventFlow.tscn | 32 ++---- Scenes/boxClick.tscn | 67 ++++++++---- Scenes/box_b.tscn | 29 ++++- Scenes/dlqPattern.tscn | 43 +++----- Scenes/dls.tscn | 26 ++++- Scenes/draggable_filter_blue.tscn | 22 +++- Scenes/draggable_filter_red.tscn | 22 +++- Scenes/event_box.tscn | 25 ++++- Scenes/message_display.tscn | 140 +++++++++++++++++++++--- Scenes/multiSink.tscn | 119 ++++++++++++++++----- Scenes/sink.tscn | 33 +++++- Scripts/AudioManager.gd | 148 +++++++++++++++++++++++++ Scripts/ConceptGlossary.gd | 140 ++++++++++++++++++++++++ Scripts/ConnectorLine.gd | 129 ++++++++++++++++++++++ Scripts/ConveyerController.gd | 23 ++-- Scripts/HoverLabel.gd | 45 ++++++++ Scripts/SinkClick.gd | 7 +- Scripts/TutorialManager.gd | 74 +++++++++++++ Scripts/TutorialTooltip.gd | 20 ++++ Scripts/blur.gdshader | 9 ++ Scripts/dls.gd | 20 ++++ Scripts/draggable_filter.gd | 5 +- Scripts/event_box.gd | 39 ++++++- Scripts/level.gd | 172 ++++++++++++++++++++++++++++-- Scripts/message_display.gd | 116 ++++++++++++++++++-- Scripts/scrolling_line.gdshader | 10 ++ Scripts/sink.gd | 25 ++++- tutorial_data/basicEventFlow.json | 21 ++++ tutorial_data/boxClick.json | 25 +++++ tutorial_data/dlqPattern.json | 21 ++++ tutorial_data/multiSink.json | 21 ++++ 40 files changed, 1637 insertions(+), 153 deletions(-) create mode 100644 Scenes/ConceptGlossary.tscn create mode 100644 Scenes/ConnectorLine.tscn create mode 100644 Scripts/AudioManager.gd create mode 100644 Scripts/ConceptGlossary.gd create mode 100644 Scripts/ConnectorLine.gd create mode 100644 Scripts/HoverLabel.gd create mode 100644 Scripts/TutorialManager.gd create mode 100644 Scripts/TutorialTooltip.gd create mode 100644 Scripts/blur.gdshader create mode 100644 Scripts/dls.gd create mode 100644 Scripts/scrolling_line.gdshader create mode 100644 tutorial_data/basicEventFlow.json create mode 100644 tutorial_data/boxClick.json create mode 100644 tutorial_data/dlqPattern.json create mode 100644 tutorial_data/multiSink.json diff --git a/Kuack/Frame 10.png.import b/Kuack/Frame 10.png.import index 38f17b3..1e84695 100644 --- a/Kuack/Frame 10.png.import +++ b/Kuack/Frame 10.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Frame 10.png-5fb5b2e4200497db4ebb7d6f8c13bb51 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Kuack/frame 11.png.import b/Kuack/frame 11.png.import index 55ee42d..729b95b 100644 --- a/Kuack/frame 11.png.import +++ b/Kuack/frame 11.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/frame 11.png-ad71b5238c23ea104fd4af980c21faa5 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Kuack/frame 12.png.import b/Kuack/frame 12.png.import index d62c348..08bb812 100644 --- a/Kuack/frame 12.png.import +++ b/Kuack/frame 12.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/frame 12.png-4f87739641898b96405616a3585a1ae5 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Kuack/new1.png.import b/Kuack/new1.png.import index 778b30e..a378b15 100644 --- a/Kuack/new1.png.import +++ b/Kuack/new1.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/new1.png-85ed23fbe40947033ebb6fe411d1fa7d.cte compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Kuack/new2.png.import b/Kuack/new2.png.import index 6aa3b4d..bdc6f41 100644 --- a/Kuack/new2.png.import +++ b/Kuack/new2.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/new2.png-944bcee542164a58457a4e1a1c49e95c.cte compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Kuack/new3.png.import b/Kuack/new3.png.import index 94610e1..f01aed6 100644 --- a/Kuack/new3.png.import +++ b/Kuack/new3.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/new3.png-9c781a766ddaa31c00f394121b8e9d5e.cte compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Kuack/new4.png.import b/Kuack/new4.png.import index 79e055c..272c893 100644 --- a/Kuack/new4.png.import +++ b/Kuack/new4.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/new4.png-af1eeaa165bb675d8e6032da1bed1cbd.cte compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Scenes/ConceptGlossary.tscn b/Scenes/ConceptGlossary.tscn new file mode 100644 index 0000000..d189832 --- /dev/null +++ b/Scenes/ConceptGlossary.tscn @@ -0,0 +1,105 @@ +[gd_scene load_steps=2 format=3 uid="uid://concept_glossary"] + +[ext_resource type="Script" path="res://Scripts/ConceptGlossary.gd" id="1"] + +[node name="ConceptGlossary" type="Control"] +visible = false +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1") + +[node name="CanvasLayer" type="CanvasLayer" parent="."] +layer = 100 +visible = false + +[node name="Background" type="ColorRect" parent="CanvasLayer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 0.7) + +[node name="Panel" type="Panel" parent="CanvasLayer"] +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -400.0 +offset_top = -300.0 +offset_right = 400.0 +offset_bottom = 300.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="MarginContainer" type="MarginContainer" parent="CanvasLayer/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 20 +theme_override_constants/margin_top = 20 +theme_override_constants/margin_right = 20 +theme_override_constants/margin_bottom = 20 + +[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Panel/MarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 10 + +[node name="Title" type="Label" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "📖 Knative Concepts" +horizontal_alignment = 1 +theme_override_font_sizes/font_size = 24 + +[node name="SearchBox" type="LineEdit" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +placeholder_text = "Search concepts..." + +[node name="ScrollContainer" type="ScrollContainer" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="ResultsList" type="ItemList" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="ConceptPanel" type="VBoxContainer" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/separation = 10 + +[node name="ConceptName" type="Label" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel"] +layout_mode = 2 +theme_override_font_sizes/font_size = 20 +horizontal_alignment = 1 + +[node name="Definition" type="Label" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel"] +layout_mode = 2 +autowrap_mode = 3 + +[node name="GameExample" type="Label" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel"] +layout_mode = 2 +autowrap_mode = 3 + +[node name="KnativeExample" type="Label" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel"] +layout_mode = 2 +autowrap_mode = 3 + +[node name="DocsButton" type="Button" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel"] +layout_mode = 2 +text = "📚 Read Official Docs" + +[node name="CloseButton" type="Button" parent="CanvasLayer/Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Close" + +[connection signal="item_selected" from="CanvasLayer/Panel/MarginContainer/VBoxContainer/ScrollContainer/ResultsList" to="." method="_on_results_list_item_selected"] diff --git a/Scenes/ConnectorLine.tscn b/Scenes/ConnectorLine.tscn new file mode 100644 index 0000000..1bfd21b --- /dev/null +++ b/Scenes/ConnectorLine.tscn @@ -0,0 +1,15 @@ +[gd_scene format=3 uid="uid://connectorline"] + +[ext_resource type="Script" path="res://Scripts/ConnectorLine.gd" id="1_script"] +[ext_resource type="Shader" path="res://Scripts/scrolling_line.gdshader" id="2_shader"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_1"] +shader = ExtResource("2_shader") +shader_parameter/speed = 1.0 + +[node name="ConnectorLine" type="Line2D"] +material = SubResource("ShaderMaterial_1") +width = 10.0 +default_color = Color(0, 0.6, 1, 0.5) +texture_mode = 1 +script = ExtResource("1_script") diff --git a/Scenes/basicEventFlow.tscn b/Scenes/basicEventFlow.tscn index 8a9a1cc..2b7bb23 100644 --- a/Scenes/basicEventFlow.tscn +++ b/Scenes/basicEventFlow.tscn @@ -46,9 +46,9 @@ scale = Vector2(0.698, 0.698) layout_mode = 3 anchors_preset = 0 offset_left = 893.0 -offset_top = 398.0 +offset_top = 440.0 offset_right = 933.0 -offset_bottom = 438.0 +offset_bottom = 480.0 scale = Vector2(0.7, 0.7) script = ExtResource("6_xyb5q") @@ -56,24 +56,16 @@ script = ExtResource("6_xyb5q") layout_mode = 0 offset_right = 342.0 offset_bottom = 132.0 - -[node name="RichTextLabel" type="RichTextLabel" parent="Control/Button"] -layout_mode = 0 -offset_top = 37.0 -offset_right = 338.0 -offset_bottom = 110.0 -mouse_filter = 2 -theme_override_font_sizes/normal_font_size = 50 -bbcode_enabled = true -text = "[center]START" +theme_override_font_sizes/font_size = 50 +text = "START" [node name="Control2" type="Control" parent="."] layout_mode = 3 anchors_preset = 0 offset_left = 893.0 -offset_top = 517.0 +offset_top = 540.0 offset_right = 933.0 -offset_bottom = 557.0 +offset_bottom = 580.0 scale = Vector2(0.7, 0.7) script = ExtResource("7_3f2sq") @@ -81,16 +73,8 @@ script = ExtResource("7_3f2sq") layout_mode = 0 offset_right = 342.0 offset_bottom = 132.0 - -[node name="RichTextLabel" type="RichTextLabel" parent="Control2/Button"] -layout_mode = 0 -offset_top = 37.0 -offset_right = 338.0 -offset_bottom = 110.0 -mouse_filter = 2 -theme_override_font_sizes/normal_font_size = 50 -bbcode_enabled = true -text = "[center]RESTART" +theme_override_font_sizes/font_size = 50 +text = "RESTART" [connection signal="pressed" from="Control/Button" to="Control" method="_on_button_pressed"] [connection signal="pressed" from="Control2/Button" to="Control2" method="_on_button_pressed"] diff --git a/Scenes/boxClick.tscn b/Scenes/boxClick.tscn index 3383e33..94cdf79 100644 --- a/Scenes/boxClick.tscn +++ b/Scenes/boxClick.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=13 format=3 uid="uid://c8lin6dur1umi"] +[gd_scene load_steps=15 format=3 uid="uid://c8lin6dur1umi"] [ext_resource type="Texture2D" uid="uid://crbbdu26tlg2k" path="res://2D Assets/background.png" id="1_fdm6s"] [ext_resource type="Texture2D" uid="uid://dlnjpu1sbekqf" path="res://2D Assets/conveyer texture.png" id="2_ocbiy"] @@ -15,6 +15,25 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_e8kq8"] size = Vector2(160, 185) +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qgft8"] +bg_color = Color(0.262745, 0.545098, 0.8, 1) +border_width_top = 7 +border_color = Color(0.254902, 0.537255, 0.792157, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tqu56"] +bg_color = Color(1, 0.423529, 0.47451, 1) +border_width_top = 9 +border_width_bottom = 4 +border_color = Color(1, 0.431373, 0.482353, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + [node name="base" type="Node2D"] scale = Vector2(0.6, 0.6) @@ -55,16 +74,8 @@ script = ExtResource("9_va8kg") layout_mode = 0 offset_right = 342.0 offset_bottom = 132.0 - -[node name="RichTextLabel" type="RichTextLabel" parent="Control/Button"] -layout_mode = 0 -offset_top = 37.0 -offset_right = 338.0 -offset_bottom = 110.0 -mouse_filter = 2 -theme_override_font_sizes/normal_font_size = 50 -bbcode_enabled = true -text = "[center]START" +theme_override_font_sizes/font_size = 50 +text = "START" [node name="Control2" type="Control" parent="."] layout_mode = 3 @@ -79,16 +90,8 @@ script = ExtResource("10_rwca5") layout_mode = 0 offset_right = 342.0 offset_bottom = 132.0 - -[node name="RichTextLabel" type="RichTextLabel" parent="Control2/Button"] -layout_mode = 0 -offset_top = 37.0 -offset_right = 338.0 -offset_bottom = 110.0 -mouse_filter = 2 -theme_override_font_sizes/normal_font_size = 50 -bbcode_enabled = true -text = "[center]RESTART" +theme_override_font_sizes/font_size = 50 +text = "RESTART" [node name="Draggable Filter" type="Area2D" parent="."] position = Vector2(288.333, 205) @@ -103,6 +106,17 @@ shape = SubResource("RectangleShape2D_e8kq8") position = Vector2(0.333374, 0.333313) texture = ExtResource("10_w4xqm") +[node name="hoverlabel" type="RichTextLabel" parent="Draggable Filter"] +visible = false +offset_left = 73.3336 +offset_top = -110.0 +offset_right = 178.334 +offset_bottom = -70.0 +theme_override_styles/normal = SubResource("StyleBoxFlat_qgft8") +bbcode_enabled = true +text = "[center] [b]FILTER B +" + [node name="Draggable Filter2" type="Area2D" parent="."] position = Vector2(286.667, 431.667) script = ExtResource("10_xwwl6") @@ -116,6 +130,17 @@ shape = SubResource("RectangleShape2D_e8kq8") position = Vector2(0.333374, 0.333313) texture = ExtResource("11_2hn41") +[node name="hoverlabel" type="RichTextLabel" parent="Draggable Filter2"] +visible = false +offset_left = 74.9997 +offset_top = -120.0 +offset_right = 182.0 +offset_bottom = -74.0004 +theme_override_styles/normal = SubResource("StyleBoxFlat_tqu56") +bbcode_enabled = true +text = "[center][b]FILTER R +" + [connection signal="pressed" from="Control/Button" to="Control" method="_on_button_pressed"] [connection signal="pressed" from="Control2/Button" to="Control2" method="_on_button_pressed"] [connection signal="area_entered" from="Draggable Filter" to="Draggable Filter" method="_on_area_entered"] diff --git a/Scenes/box_b.tscn b/Scenes/box_b.tscn index 9084576..9e8efd6 100644 --- a/Scenes/box_b.tscn +++ b/Scenes/box_b.tscn @@ -1,12 +1,20 @@ -[gd_scene load_steps=5 format=3 uid="uid://cg1qlr4r42xs6"] +[gd_scene load_steps=6 format=3 uid="uid://cg1qlr4r42xs6"] [ext_resource type="Texture2D" uid="uid://cjn14twvcwa8y" path="res://2D Assets/boxes/blueBox.png" id="1_mjw0e"] -[ext_resource type="Script" path="res://Scripts/event_box.gd" id="2_3md8f"] -[ext_resource type="Script" path="res://Scripts/event_box_clickable.gd" id="2_raetl"] +[ext_resource type="Script" uid="uid://dytl3q2sat4ew" path="res://Scripts/event_box.gd" id="2_3md8f"] +[ext_resource type="Script" uid="uid://5ydkp5vyru6l" path="res://Scripts/event_box_clickable.gd" id="2_raetl"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_6uvdh"] size = Vector2(211.428, 211.429) +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5pura"] +content_margin_top = 9.0 +bg_color = Color(0.431373, 0.564706, 1, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + [node name="BoxB" type="Sprite2D" groups=["Box"]] position = Vector2(947.833, 182.333) texture = ExtResource("1_mjw0e") @@ -20,3 +28,18 @@ script = ExtResource("2_raetl") position = Vector2(0.000366211, 0) scale = Vector2(0.7, 0.7) shape = SubResource("RectangleShape2D_6uvdh") + +[node name="hoverlabel" type="RichTextLabel" parent="."] +visible = false +offset_left = -208.833 +offset_top = -76.333 +offset_right = -101.833 +offset_bottom = -30.333 +mouse_filter = 2 +theme_override_styles/normal = SubResource("StyleBoxFlat_5pura") +bbcode_enabled = true +text = "[center][b]EVENT B +" + +[connection signal="mouse_entered" from="Area2D" to="." method="_on_area_2d_mouse_entered"] +[connection signal="mouse_exited" from="Area2D" to="." method="_on_area_2d_mouse_exited"] diff --git a/Scenes/dlqPattern.tscn b/Scenes/dlqPattern.tscn index 52acb18..619cee0 100644 --- a/Scenes/dlqPattern.tscn +++ b/Scenes/dlqPattern.tscn @@ -64,53 +64,34 @@ scale = Vector2(0.549, 0.45) layout_mode = 3 anchors_preset = 0 offset_left = 825.0 -offset_top = 473.0 +offset_top = 440.0 offset_right = 865.0 -offset_bottom = 513.0 +offset_bottom = 480.0 script = ExtResource("11_fwn7q") [node name="Button" type="Button" parent="Control"] layout_mode = 0 offset_top = 1.0 -offset_right = 151.0 -offset_bottom = 65.0 - -[node name="RichTextLabel2" type="RichTextLabel" parent="Control/Button"] -layout_mode = 0 -offset_left = -10.0 -offset_top = 16.0 -offset_right = 328.0 -offset_bottom = 89.0 -scale = Vector2(0.5, 0.5) -mouse_filter = 2 -theme_override_font_sizes/normal_font_size = 50 -bbcode_enabled = true -text = "[center]START" +offset_right = 200.0 +offset_bottom = 80.0 +theme_override_font_sizes/font_size = 30 +text = "START" [node name="Control2" type="Control" parent="."] layout_mode = 3 anchors_preset = 0 offset_left = 824.0 -offset_top = 559.0 +offset_top = 540.0 offset_right = 864.0 -offset_bottom = 599.0 +offset_bottom = 580.0 script = ExtResource("11_pd3ou") [node name="Button" type="Button" parent="Control2"] layout_mode = 0 -offset_right = 342.0 -offset_bottom = 132.0 -scale = Vector2(0.45, 0.45) - -[node name="RichTextLabel" type="RichTextLabel" parent="Control2/Button"] -layout_mode = 0 -offset_top = 37.0 -offset_right = 338.0 -offset_bottom = 110.0 -mouse_filter = 2 -theme_override_font_sizes/normal_font_size = 50 -bbcode_enabled = true -text = "[center]RESTART" +offset_right = 200.0 +offset_bottom = 80.0 +theme_override_font_sizes/font_size = 30 +text = "RESTART" [node name="Blockage" parent="." instance=ExtResource("13_cjnva")] position = Vector2(516, 270) diff --git a/Scenes/dls.tscn b/Scenes/dls.tscn index 396fff0..b060190 100644 --- a/Scenes/dls.tscn +++ b/Scenes/dls.tscn @@ -1,11 +1,21 @@ -[gd_scene load_steps=3 format=3 uid="uid://cdog2bwjc5gc6"] +[gd_scene load_steps=5 format=3 uid="uid://cdog2bwjc5gc6"] +[ext_resource type="Script" path="res://Scripts/dls.gd" id="1_fmv86"] [ext_resource type="Texture2D" uid="uid://75lnwxj33066" path="res://2D Assets/retryAndDLQ/DLS.png" id="1_lsi3q"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_vt2u7"] size = Vector2(376, 136) +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_op0rl"] +content_margin_top = 23.0 +bg_color = Color(0.833186, 0.613107, 3.08037e-06, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + [node name="dls" type="Area2D"] +script = ExtResource("1_fmv86") metadata/_edit_group_ = true [node name="Sprite2D" type="Sprite2D" parent="."] @@ -14,3 +24,17 @@ texture = ExtResource("1_lsi3q") [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, -2) shape = SubResource("RectangleShape2D_vt2u7") + +[node name="hoverlabel" type="RichTextLabel" parent="."] +visible = false +offset_left = 186.0 +offset_top = -152.0 +offset_right = 351.0 +offset_bottom = -81.0 +mouse_filter = 2 +theme_override_styles/normal = SubResource("StyleBoxFlat_op0rl") +bbcode_enabled = true +text = "[center][b]DEAD LETTER SINK" + +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] diff --git a/Scenes/draggable_filter_blue.tscn b/Scenes/draggable_filter_blue.tscn index b57248b..bf725af 100644 --- a/Scenes/draggable_filter_blue.tscn +++ b/Scenes/draggable_filter_blue.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=4 format=3 uid="uid://bquha0225l1ju"] +[gd_scene load_steps=5 format=3 uid="uid://bquha0225l1ju"] [ext_resource type="Script" path="res://Scripts/draggable_filter.gd" id="1_nmkcu"] [ext_resource type="Texture2D" uid="uid://cs6prh1shv4bh" path="res://2D Assets/funnels/blueFunnel.png" id="2_bv34i"] @@ -6,6 +6,16 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_e8kq8"] size = Vector2(160, 185) +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hhdk1"] +bg_color = Color(0.254902, 0.537255, 0.788235, 1) +border_width_top = 9 +border_width_bottom = 4 +border_color = Color(0.235294, 0.517647, 0.772549, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + [node name="Draggable Filter" type="Area2D"] position = Vector2(288.333, 205) script = ExtResource("1_nmkcu") @@ -19,6 +29,16 @@ shape = SubResource("RectangleShape2D_e8kq8") position = Vector2(0.333374, 0.333313) texture = ExtResource("2_bv34i") +[node name="RichTextLabel" type="RichTextLabel" parent="."] +offset_left = 71.667 +offset_top = -118.0 +offset_right = 178.667 +offset_bottom = -72.0 +theme_override_styles/normal = SubResource("StyleBoxFlat_hhdk1") +bbcode_enabled = true +text = "[center][b]FILTER B +" + [connection signal="area_entered" from="." to="." method="_on_area_entered"] [connection signal="body_shape_exited" from="." to="." method="_on_body_shape_exited"] [connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] diff --git a/Scenes/draggable_filter_red.tscn b/Scenes/draggable_filter_red.tscn index e32dbea..2d9cabe 100644 --- a/Scenes/draggable_filter_red.tscn +++ b/Scenes/draggable_filter_red.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=4 format=3 uid="uid://bi4a6dl8q6rnj"] +[gd_scene load_steps=5 format=3 uid="uid://bi4a6dl8q6rnj"] [ext_resource type="Script" path="res://Scripts/draggable_filter.gd" id="1_rdiht"] [ext_resource type="Texture2D" uid="uid://bpkn0kgyf867u" path="res://2D Assets/funnels/redFunnel.png" id="2_vef61"] @@ -6,6 +6,16 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_e8kq8"] size = Vector2(160, 185) +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_miwhb"] +bg_color = Color(1, 0.423529, 0.47451, 1) +border_width_top = 9 +border_width_bottom = 4 +border_color = Color(1, 0.431373, 0.482353, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + [node name="Draggable Filter" type="Area2D"] position = Vector2(288.333, 205) script = ExtResource("1_rdiht") @@ -19,6 +29,16 @@ shape = SubResource("RectangleShape2D_e8kq8") position = Vector2(0.333374, 0.333313) texture = ExtResource("2_vef61") +[node name="RichTextLabel" type="RichTextLabel" parent="."] +visible = false +offset_left = 70.667 +offset_top = -114.0 +offset_right = 177.667 +offset_bottom = -68.0 +theme_override_styles/normal = SubResource("StyleBoxFlat_miwhb") +bbcode_enabled = true +text = "[center][b]FILTER R" + [connection signal="area_entered" from="." to="." method="_on_area_entered"] [connection signal="body_shape_exited" from="." to="." method="_on_body_shape_exited"] [connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] diff --git a/Scenes/event_box.tscn b/Scenes/event_box.tscn index 08fcb58..54eea94 100644 --- a/Scenes/event_box.tscn +++ b/Scenes/event_box.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=4 format=3 uid="uid://p2kk0a6bpmai"] +[gd_scene load_steps=5 format=3 uid="uid://p2kk0a6bpmai"] [ext_resource type="Texture2D" uid="uid://b00w453hqw7wx" path="res://2D Assets/boxes/redBox.png" id="1_7cv2t"] [ext_resource type="Script" path="res://Scripts/event_box.gd" id="2_3qheb"] @@ -6,6 +6,14 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_6uvdh"] size = Vector2(211.428, 211.429) +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fhd45"] +content_margin_top = 10.0 +bg_color = Color(1, 0.423529, 0.47451, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + [node name="BoxA" type="Sprite2D" groups=["Box"]] position = Vector2(947.833, 182.333) texture = ExtResource("1_7cv2t") @@ -18,3 +26,18 @@ boxType = "Red" position = Vector2(0.000366211, 0) scale = Vector2(0.7, 0.7) shape = SubResource("RectangleShape2D_6uvdh") + +[node name="hoverlabel" type="RichTextLabel" parent="."] +visible = false +offset_left = 73.167 +offset_top = -125.333 +offset_right = 180.167 +offset_bottom = -79.333 +mouse_filter = 2 +theme_override_styles/normal = SubResource("StyleBoxFlat_fhd45") +bbcode_enabled = true +text = "[center][b]EVENT R[/b][/center] +" + +[connection signal="mouse_entered" from="Area2D" to="." method="_on_area_2d_mouse_entered"] +[connection signal="mouse_exited" from="Area2D" to="." method="_on_area_2d_mouse_exited"] diff --git a/Scenes/message_display.tscn b/Scenes/message_display.tscn index aaca9ee..207dab0 100644 --- a/Scenes/message_display.tscn +++ b/Scenes/message_display.tscn @@ -1,23 +1,137 @@ -[gd_scene load_steps=2 format=3 uid="uid://1iif43wyrmkc"] +[gd_scene load_steps=9 format=3 uid="uid://1iif43wyrmkc"] [ext_resource type="Script" path="res://Scripts/message_display.gd" id="1_y0tj3"] +[ext_resource type="Shader" path="res://Scripts/blur.gdshader" id="2_blur"] +[ext_resource type="Texture2D" uid="uid://f4k8e0b0e0e0" path="res://Kuack/new1.png" id="2_quack"] -[node name="MessageDisplay" type="Control"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_blur"] +shader = ExtResource("2_blur") +shader_parameter/blur_amount = 2.5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_panel"] +bg_color = Color(1, 1, 1, 1) +border_width_left = 10 +border_width_top = 10 +border_width_right = 10 +border_width_bottom = 10 +border_color = Color(0.258824, 0.572549, 0.737255, 1) +corner_radius_top_left = 30 +corner_radius_top_right = 30 +corner_radius_bottom_right = 30 +corner_radius_bottom_left = 30 +shadow_color = Color(0, 0, 0, 0.3) +shadow_size = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_continue"] +bg_color = Color(0.258824, 0.572549, 0.737255, 1) +corner_radius_top_left = 15 +corner_radius_top_right = 15 +corner_radius_bottom_right = 15 +corner_radius_bottom_left = 15 +expand_margin_left = 40.0 +expand_margin_top = 10.0 +expand_margin_right = 40.0 +expand_margin_bottom = 10.0 + +[node name="MessageDisplay" type="CanvasLayer"] +script = ExtResource("1_y0tj3") + +[node name="Blur" type="ColorRect" parent="."] +unique_name_in_owner = true +material = SubResource("ShaderMaterial_blur") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Root" type="Control" parent="."] +unique_name_in_owner = true layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -script = ExtResource("1_y0tj3") -[node name="Label" type="Label" parent="."] -layout_mode = 0 -offset_right = 1153.0 -offset_bottom = 649.0 -theme_override_colors/font_color = Color(0, 0.286275, 0.556863, 1) -theme_override_colors/font_shadow_color = Color(1, 0.94902, 0.870588, 1) -theme_override_font_sizes/font_size = 100 -horizontal_alignment = 1 -vertical_alignment = 1 -autowrap_mode = 2 +[node name="BlockingRect" type="ColorRect" parent="Root"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 0.2) + +[node name="CenterContainer" type="CenterContainer" parent="Root"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel" type="Panel" parent="Root/CenterContainer"] +custom_minimum_size = Vector2(1000, 600) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_panel") + +[node name="MarginContainer" type="MarginContainer" parent="Root/CenterContainer/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 40 +theme_override_constants/margin_top = 40 +theme_override_constants/margin_right = 40 +theme_override_constants/margin_bottom = 40 + +[node name="VBoxContainer" type="VBoxContainer" parent="Root/CenterContainer/Panel/MarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 30 + +[node name="HBoxContainer" type="HBoxContainer" parent="Root/CenterContainer/Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/separation = 40 + +[node name="QuackTexture" type="TextureRect" parent="Root/CenterContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 +mouse_filter = 2 +texture = ExtResource("2_quack") +expand_mode = 1 +stretch_mode = 5 + +[node name="Label" type="RichTextLabel" parent="Root/CenterContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 +mouse_filter = 2 +theme_override_colors/default_color = Color(0, 0, 0, 1) +theme_override_font_sizes/normal_font_size = 28 +theme_override_font_sizes/bold_font_size = 42 +bbcode_enabled = true +text = "[center][b]Level Complete![/b] +You did a great job.[/center]" +fit_content = true + +[node name="HBoxContainer2" type="HBoxContainer" parent="Root/CenterContainer/Panel/MarginContainer/VBoxContainer"] +layout_mode = 2 +alignment = 1 + +[node name="ContinueButton" type="Button" parent="Root/CenterContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 0 +theme_override_font_sizes/font_size = 32 +theme_override_styles/hover = SubResource("StyleBoxFlat_continue") +theme_override_styles/pressed = SubResource("StyleBoxFlat_continue") +theme_override_styles/normal = SubResource("StyleBoxFlat_continue") +text = "Continue" + +[connection signal="pressed" from="Root/CenterContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer2/ContinueButton" to="." method="_on_continue_button_pressed"] diff --git a/Scenes/multiSink.tscn b/Scenes/multiSink.tscn index eba6753..bd4f19c 100644 --- a/Scenes/multiSink.tscn +++ b/Scenes/multiSink.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=3 uid="uid://drhixkbg1n4sa"] +[gd_scene load_steps=24 format=3 uid="uid://drhixkbg1n4sa"] [ext_resource type="Script" path="res://Scripts/multi_sink.gd" id="1_x4ymc"] [ext_resource type="Texture2D" uid="uid://crbbdu26tlg2k" path="res://2D Assets/background.png" id="1_x35ji"] @@ -17,12 +17,54 @@ [ext_resource type="Script" path="res://Scripts/multi_sink_start.gd" id="15_2dg66"] [ext_resource type="Script" path="res://Scripts/restart.gd" id="15_hhntj"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_b2e8j"] +content_margin_top = 14.0 +bg_color = Color(0.580392, 0.498039, 0.541176, 1) +border_color = Color(0.258824, 0.572549, 0.737255, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fcsfa"] +content_margin_top = 14.0 +bg_color = Color(0.219608, 0.611765, 0.45098, 1) +border_color = Color(0.258824, 0.572549, 0.737255, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + [sub_resource type="RectangleShape2D" id="RectangleShape2D_sjavo"] size = Vector2(160, 185) +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wwsvk"] +content_margin_top = 8.0 +bg_color = Color(0.235294, 0.517647, 0.772549, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + [sub_resource type="RectangleShape2D" id="RectangleShape2D_o1j7t"] size = Vector2(160, 185) +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qk3t7"] +content_margin_top = 10.0 +bg_color = Color(0.988235, 0.392157, 0.392157, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_4cu8a"] +content_margin_top = 8.0 +bg_color = Color(0.309804, 0.552941, 0.203922, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + [node name="multiSink" type="Node2D"] script = ExtResource("1_x4ymc") @@ -71,12 +113,18 @@ scale = Vector2(0.6, 0.6) texture = ExtResource("3_73ykg") expectedType = "Red" +[node name="hoverlabel" parent="SinkR" index="3"] +theme_override_styles/normal = SubResource("StyleBoxFlat_b2e8j") + [node name="SinkG" parent="." instance=ExtResource("2_bxkek")] position = Vector2(974, 514) scale = Vector2(0.6, 0.6) texture = ExtResource("4_4jj2d") expectedType = "Green" +[node name="hoverlabel" parent="SinkG" index="3"] +theme_override_styles/normal = SubResource("StyleBoxFlat_fcsfa") + [node name="BoxB" parent="." instance=ExtResource("5_2pbu6")] position = Vector2(577, 63) scale = Vector2(0.6, 0.6) @@ -108,6 +156,18 @@ shape = SubResource("RectangleShape2D_sjavo") position = Vector2(0.333374, 0.333313) texture = ExtResource("11_mf5ap") +[node name="hoverlabel" type="RichTextLabel" parent="Draggable Filter"] +visible = false +offset_left = 84.0 +offset_top = -81.0 +offset_right = 211.0 +offset_bottom = -41.0 +mouse_filter = 2 +theme_override_styles/normal = SubResource("StyleBoxFlat_wwsvk") +bbcode_enabled = true +text = "[center][b]FILTER B +" + [node name="Draggable Filter2" type="Area2D" parent="."] position = Vector2(78, 219) scale = Vector2(0.7, 0.7) @@ -123,6 +183,17 @@ shape = SubResource("RectangleShape2D_o1j7t") position = Vector2(0.333374, 0.333313) texture = ExtResource("12_2vchf") +[node name="hoverlabel" type="RichTextLabel" parent="Draggable Filter2"] +visible = false +offset_left = 86.0 +offset_top = -64.0 +offset_right = 196.0 +offset_bottom = -19.0 +mouse_filter = 2 +theme_override_styles/normal = SubResource("StyleBoxFlat_qk3t7") +bbcode_enabled = true +text = "[center] [b]FILTER R" + [node name="Draggable Filter3" type="Area2D" parent="."] position = Vector2(78, 349) scale = Vector2(0.7, 0.7) @@ -138,13 +209,24 @@ shape = SubResource("RectangleShape2D_o1j7t") position = Vector2(0.333374, 0.333313) texture = ExtResource("13_fp6xy") +[node name="hoverlabel" type="RichTextLabel" parent="Draggable Filter3"] +visible = false +offset_left = 85.7143 +offset_top = -85.7143 +offset_right = 187.714 +offset_bottom = -45.7143 +mouse_filter = 2 +theme_override_styles/normal = SubResource("StyleBoxFlat_4cu8a") +bbcode_enabled = true +text = "[center] [b]FILTER G" + [node name="Control" type="Control" parent="."] layout_mode = 3 anchors_preset = 0 offset_left = 895.0 -offset_top = 28.0 +offset_top = 178.0 offset_right = 935.0 -offset_bottom = 68.0 +offset_bottom = 218.0 scale = Vector2(0.7, 0.7) script = ExtResource("15_2dg66") @@ -153,24 +235,16 @@ layout_mode = 0 offset_right = 342.0 offset_bottom = 132.0 scale = Vector2(0.9, 0.9) - -[node name="RichTextLabel" type="RichTextLabel" parent="Control/Button"] -layout_mode = 0 -offset_top = 37.0 -offset_right = 338.0 -offset_bottom = 110.0 -mouse_filter = 2 -theme_override_font_sizes/normal_font_size = 50 -bbcode_enabled = true -text = "[center]START" +theme_override_font_sizes/font_size = 50 +text = "START" [node name="Control2" type="Control" parent="."] layout_mode = 3 anchors_preset = 0 offset_left = 896.0 -offset_top = 137.0 +offset_top = 287.0 offset_right = 936.0 -offset_bottom = 177.0 +offset_bottom = 327.0 scale = Vector2(0.7, 0.7) script = ExtResource("15_hhntj") @@ -179,16 +253,8 @@ layout_mode = 0 offset_right = 342.0 offset_bottom = 132.0 scale = Vector2(0.9, 0.9) - -[node name="RichTextLabel" type="RichTextLabel" parent="Control2/Button"] -layout_mode = 0 -offset_top = 37.0 -offset_right = 338.0 -offset_bottom = 110.0 -mouse_filter = 2 -theme_override_font_sizes/normal_font_size = 50 -bbcode_enabled = true -text = "[center]RESTART" +theme_override_font_sizes/font_size = 50 +text = "RESTART" [connection signal="area_entered" from="Draggable Filter" to="Draggable Filter" method="_on_area_entered"] [connection signal="body_shape_exited" from="Draggable Filter" to="Draggable Filter" method="_on_body_shape_exited"] @@ -205,3 +271,6 @@ text = "[center]RESTART" [connection signal="pressed" from="Control/Button" to="." method="_on_button_pressed"] [connection signal="pressed" from="Control/Button" to="Control" method="_on_button_pressed"] [connection signal="pressed" from="Control2/Button" to="Control2" method="_on_button_pressed"] + +[editable path="SinkR"] +[editable path="SinkG"] diff --git a/Scenes/sink.tscn b/Scenes/sink.tscn index 28c867d..422b0fa 100644 --- a/Scenes/sink.tscn +++ b/Scenes/sink.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=5 format=3 uid="uid://whu4rwgsyl8u"] +[gd_scene load_steps=6 format=3 uid="uid://whu4rwgsyl8u"] [ext_resource type="Texture2D" uid="uid://cgnmmfc1l4d5d" path="res://2D Assets/sinks/sink.png" id="1_0ywo5"] [ext_resource type="Script" path="res://Scripts/SinkClick.gd" id="2_16xt0"] @@ -7,6 +7,15 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_7l3ci"] size = Vector2(443.333, 408.333) +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8wfc3"] +content_margin_top = 14.0 +bg_color = Color(0.258824, 0.572549, 0.737255, 1) +border_color = Color(0.258824, 0.572549, 0.737255, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + [node name="Sink" type="Sprite2D"] position = Vector2(946.667, 863.333) texture = ExtResource("1_0ywo5") @@ -20,4 +29,26 @@ script = ExtResource("2_16xt0") position = Vector2(0, -5.83331) shape = SubResource("RectangleShape2D_7l3ci") +[node name="IndicatorLight" type="ColorRect" parent="."] +offset_left = -10.0 +offset_top = -220.0 +offset_right = 10.0 +offset_bottom = -200.0 +color = Color(0, 1, 0, 1) +z_index = 1 + +[node name="hoverlabel" type="RichTextLabel" parent="."] +visible = false +offset_left = 180.0 +offset_top = -182.0 +offset_right = 309.0 +offset_bottom = -133.0 +mouse_filter = 2 +theme_override_styles/normal = SubResource("StyleBoxFlat_8wfc3") +bbcode_enabled = true +text = "[center][b] SINK +" + [connection signal="area_entered" from="Area2D" to="Area2D" method="_on_area_entered"] +[connection signal="mouse_entered" from="Area2D" to="." method="_on_area_2d_mouse_entered"] +[connection signal="mouse_exited" from="Area2D" to="." method="_on_area_2d_mouse_exited"] diff --git a/Scripts/AudioManager.gd b/Scripts/AudioManager.gd new file mode 100644 index 0000000..f06718b --- /dev/null +++ b/Scripts/AudioManager.gd @@ -0,0 +1,148 @@ +extends Node + +# Audio players for different sound effects +var click_start_player: AudioStreamPlayer +var click_end_player: AudioStreamPlayer +var construction_player: AudioStreamPlayer # Loops continuously! +var poof_player: AudioStreamPlayer +var level_clear_player: AudioStreamPlayer +var level_fail_player: AudioStreamPlayer + +# Sound enabled flag +var sound_enabled = true + +# Volume settings +var construction_normal_volume = -10 +var construction_ducked_volume = -20 +var is_construction_playing = false + +func _ready(): + # Create audio players + click_start_player = AudioStreamPlayer.new() + click_end_player = AudioStreamPlayer.new() + construction_player = AudioStreamPlayer.new() + poof_player = AudioStreamPlayer.new() + level_clear_player = AudioStreamPlayer.new() + level_fail_player = AudioStreamPlayer.new() + + # Add them as children + add_child(click_start_player) + add_child(click_end_player) + add_child(construction_player) + add_child(poof_player) + add_child(level_clear_player) + add_child(level_fail_player) + + # Load sound files + click_start_player.stream = load("res://SoundEffects/sfx_click_start.wav") + click_end_player.stream = load("res://SoundEffects/sfx_click_end.wav") + construction_player.stream = load("res://SoundEffects/sfx_construction.wav") + poof_player.stream = load("res://SoundEffects/sfx_poof.wav") + level_clear_player.stream = load("res://SoundEffects/sfx_level_clear.wav") + level_fail_player.stream = load("res://SoundEffects/sfx_level_fail.wav") + + # Set volume levels + click_start_player.volume_db = -5 + click_end_player.volume_db = -5 + construction_player.volume_db = construction_normal_volume + poof_player.volume_db = 0 + level_clear_player.volume_db = 5 + level_fail_player.volume_db = 5 + + print("AudioManager initialized successfully") + +# Start construction sound loop +func start_construction_loop(): + if sound_enabled and not is_construction_playing and construction_player.stream: + print("Starting construction loop...") + is_construction_playing = true + + # Connect to finished signal to loop manually + if not construction_player.finished.is_connected(_on_construction_finished): + construction_player.finished.connect(_on_construction_finished) + + construction_player.volume_db = construction_normal_volume + construction_player.play() + print("Construction sound should be playing now") + +# Manual loop replay when finished +func _on_construction_finished(): + if is_construction_playing: + construction_player.play() + +# Stop construction sound +func stop_construction_loop(): + if is_construction_playing: + print("Stopping construction loop...") + is_construction_playing = false + + # Fade out + var tween = create_tween() + tween.tween_property(construction_player, "volume_db", -80, 0.5) + await tween.finished + + construction_player.stop() + construction_player.volume_db = construction_normal_volume + +# Duck construction sound (make quieter) +func duck_construction(): + if is_construction_playing: + var tween = create_tween() + tween.tween_property(construction_player, "volume_db", construction_ducked_volume, 0.2) + +# Restore construction sound +func restore_construction(): + if is_construction_playing: + var tween = create_tween() + tween.tween_property(construction_player, "volume_db", construction_normal_volume, 0.3) + +# Play sound functions +func play_click_start(): + if sound_enabled and click_start_player.stream: + duck_construction() + click_start_player.play() + await get_tree().create_timer(0.3).timeout + restore_construction() + +func play_click_end(): + if sound_enabled and click_end_player.stream: + duck_construction() + click_end_player.play() + await get_tree().create_timer(0.3).timeout + restore_construction() + +func play_construction(): + print("play_construction() called") + start_construction_loop() + +func play_poof(): + if sound_enabled and poof_player.stream: + duck_construction() + poof_player.play() + await get_tree().create_timer(0.5).timeout + restore_construction() + +func play_level_clear(): + if sound_enabled and level_clear_player.stream: + stop_construction_loop() + level_clear_player.play() + +func play_level_fail(): + if sound_enabled and level_fail_player.stream: + stop_construction_loop() + level_fail_player.play() + +func toggle_sound(): + sound_enabled = !sound_enabled + if not sound_enabled: + stop_construction_loop() + print("Sound enabled: ", sound_enabled) + +func set_volume(db: float): + click_start_player.volume_db = db - 5 + click_end_player.volume_db = db - 5 + construction_normal_volume = db - 10 + construction_ducked_volume = db - 20 + poof_player.volume_db = db + level_clear_player.volume_db = db + 5 + level_fail_player.volume_db = db + 5 diff --git a/Scripts/ConceptGlossary.gd b/Scripts/ConceptGlossary.gd new file mode 100644 index 0000000..2b33067 --- /dev/null +++ b/Scripts/ConceptGlossary.gd @@ -0,0 +1,140 @@ +extends Control + +@onready var search_box = $CanvasLayer/Panel/MarginContainer/VBoxContainer/SearchBox +@onready var results_list = $CanvasLayer/Panel/MarginContainer/VBoxContainer/ScrollContainer/ResultsList +@onready var concept_panel = $CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel +@onready var concept_name = $CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel/ConceptName +@onready var definition = $CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel/Definition +@onready var game_example = $CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel/GameExample +@onready var knative_example = $CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel/KnativeExample +@onready var docs_button = $CanvasLayer/Panel/MarginContainer/VBoxContainer/ConceptPanel/DocsButton +@onready var close_button = $CanvasLayer/Panel/MarginContainer/VBoxContainer/CloseButton + +var concepts = { + "source": { + "name": "Event Source", + "definition": "A source generates events and sends them to a broker", + "game_example": "The event boxes at the start of each level", + "knative_example": "PingSource, ApiServerSource, KafkaSource", + "docs": "https://knative.dev/docs/eventing/sources/" + }, + "broker": { + "name": "Broker", + "definition": "A broker receives events from sources and delivers them to sinks via triggers", + "game_example": "The invisible routing system that moves events in the game", + "knative_example": "MTChannelBasedBroker, RabbitMQBroker", + "docs": "https://knative.dev/docs/eventing/brokers/" + }, + "trigger": { + "name": "Trigger", + "definition": "A trigger filters events and routes matching ones to a specific sink", + "game_example": "The connection you create from event to sink", + "knative_example": "Trigger with CloudEvents attribute filters", + "docs": "https://knative.dev/docs/eventing/triggers/" + }, + "filter": { + "name": "Filter", + "definition": "Rules that determine which events match a trigger", + "game_example": "The colored filters you drag onto the conveyor", + "knative_example": "CloudEvents attribute filters (type, source, etc.)", + "docs": "https://knative.dev/docs/eventing/triggers/#trigger-filtering" + }, + "sink": { + "name": "Sink", + "definition": "A sink receives and processes events", + "game_example": "The colored boxes where events are delivered", + "knative_example": "Knative Service, Channel, URI endpoint", + "docs": "https://knative.dev/docs/eventing/sinks/" + }, + "dlq": { + "name": "Dead Letter Queue", + "definition": "A special sink that catches events that fail to process", + "game_example": "The DLS that catches blocked events in Level 4", + "knative_example": "DeadLetterSink in delivery spec", + "docs": "https://knative.dev/docs/eventing/event-delivery/" + }, + "cloudevents": { + "name": "CloudEvents", + "definition": "A standard format for describing events", + "game_example": "The event boxes with different colors (types)", + "knative_example": "CloudEvents spec with type, source, id, etc.", + "docs": "https://cloudevents.io/" + }, + "channel": { + "name": "Channel", + "definition": "A messaging channel that can be used as a sink or source", + "game_example": "Not directly shown in current levels", + "knative_example": "InMemoryChannel, KafkaChannel", + "docs": "https://knative.dev/docs/eventing/channels/" + }, + "subscription": { + "name": "Subscription", + "definition": "Routes events from a channel to a sink", + "game_example": "Similar to the trigger concept in the game", + "knative_example": "Subscription connecting Channel to Sink", + "docs": "https://knative.dev/docs/eventing/channels/subscriptions/" + }, + "retry": { + "name": "Retry Policy", + "definition": "Configuration for retrying failed event deliveries", + "game_example": "Related to DLQ pattern in Level 4", + "knative_example": "Retry count and backoff delay in delivery spec", + "docs": "https://knative.dev/docs/eventing/event-delivery/" + } +} + +func _ready(): + add_to_group("Glossary") + search_box.text_changed.connect(_on_search_changed) + close_button.pressed.connect(_on_close_pressed) + docs_button.pressed.connect(_on_docs_pressed) + concept_panel.visible = false + populate_all_concepts() + +func populate_all_concepts(): + results_list.clear() + for key in concepts: + results_list.add_item(concepts[key].name) + +func _on_search_changed(query: String): + if query == "": + populate_all_concepts() + return + + results_list.clear() + for key in concepts: + if key.contains(query.to_lower()) or \ + concepts[key].name.to_lower().contains(query.to_lower()): + results_list.add_item(concepts[key].name) + +func _on_results_list_item_selected(index: int): + var item_text = results_list.get_item_text(index) + for key in concepts: + if concepts[key].name == item_text: + show_concept(key) + break + +func show_concept(concept_id: String): + var concept = concepts.get(concept_id) + if concept: + concept_name.text = concept.name + definition.text = concept.definition + game_example.text = "🎮 In game: " + concept.game_example + knative_example.text = "📦 In Knative: " + concept.knative_example + docs_button.set_meta("url", concept.docs) + concept_panel.visible = true + +func _on_close_pressed(): + $CanvasLayer.visible = false + +func _on_docs_pressed(): + var url = docs_button.get_meta("url") + OS.shell_open(url) + +func open_to_term(term: String): + $CanvasLayer.visible = true + if concepts.has(term): + show_concept(term) + +func open(): + $CanvasLayer.visible = true diff --git a/Scripts/ConnectorLine.gd b/Scripts/ConnectorLine.gd new file mode 100644 index 0000000..4ef2027 --- /dev/null +++ b/Scripts/ConnectorLine.gd @@ -0,0 +1,129 @@ +extends Line2D + +# Nodes to connect +var start_node: Node2D +var end_node: Node2D + +# Animation properties +var packet_timer = 0.0 +var spawn_interval = 0.5 # Spawn a packet every 0.5 seconds +var packet_speed = 200.0 # Pixels per second + +# Array to track active packets (sprites) +var packets = [] +var active = true + +func setup(start: Node2D, end: Node2D): + start_node = start + end_node = end + + # Set line style + width = 3.0 + default_color = Color(1.0, 0.2, 0.2, 0.8) # Vibrant Red + texture_mode = Line2D.LINE_TEXTURE_TILE + _create_dotted_texture() + + _update_line_positions() + +func _ready(): + texture_repeat = CanvasItem.TEXTURE_REPEAT_ENABLED + begin_cap_mode = Line2D.LINE_CAP_ROUND + end_cap_mode = Line2D.LINE_CAP_ROUND + +func fade_out(): + active = false + var tween = create_tween() + # Clear all packets immediately + for p in packets: + if is_instance_valid(p.node): + p.node.queue_free() + packets.clear() + # Fade out the line + tween.tween_property(self, "modulate:a", 0.0, 0.3) + tween.finished.connect(queue_free) + +func _process(delta): + if not active: return + + # Update connection line in case objects move + _update_line_positions() + + # Spawn packets + packet_timer += delta + if packet_timer >= spawn_interval: + packet_timer = 0.0 + _spawn_packet() + + # Move packets + _move_packets(delta) + +func _update_line_positions(): + if is_instance_valid(start_node) and is_instance_valid(end_node): + clear_points() + # Start at bottom of box, End at top of sink + # Small adjustment to Vector2(0, 0) logic might be needed for "middle corner" + var start_p = start_node.global_position + Vector2(0, 70) + var end_p = end_node.global_position - Vector2(0, 110) + add_point(start_p) + add_point(end_p) + else: + queue_free() + +func _spawn_packet(): + if not is_instance_valid(start_node) or not is_instance_valid(end_node): return + + # Create a visual arrow using a Label + var pkt = Label.new() + pkt.text = "v" # Arrow pointing down + pkt.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + + # High-contrast Red Theme + pkt.add_theme_color_override("font_color", Color(1.0, 0.3, 0.3)) # Bright Red + pkt.add_theme_color_override("font_shadow_color", Color(0.5, 0, 0, 1.0)) + pkt.add_theme_constant_override("shadow_offset_x", 0) + pkt.add_theme_constant_override("shadow_offset_y", 0) + pkt.add_theme_constant_override("shadow_outline_size", 14) + pkt.add_theme_font_size_override("font_size", 30) + + # Use the same points as the line + var start_pos = start_node.global_position + Vector2(0, 70) + var end_pos = end_node.global_position - Vector2(0, 110) + + pkt.global_position = start_pos - Vector2(10, 15) # Offset to center + add_child(pkt) + + packets.append({ + "node": pkt, + "progress": 0.0, + "start": start_pos, + "end": end_pos + }) + +func _move_packets(delta): + # Iterate backwards to allow removing items + for i in range(packets.size() - 1, -1, -1): + var p = packets[i] + + var total_dist = p.start.distance_to(p.end) + if total_dist == 0: continue + + p.progress += (packet_speed * delta) / total_dist + + if p.progress >= 1.0: + p.node.queue_free() + packets.remove_at(i) + else: + var current_pos = p.start.lerp(p.end, p.progress) + p.node.global_position = current_pos - Vector2(10, 15) + +func _create_dotted_texture(): + var img = Image.create(16, 16, false, Image.FORMAT_RGBA8) + img.fill(Color(0,0,0,0)) # Transparent + + # Draw a small 4x4 dot in the middle + for x in range(6, 10): + for y in range(6, 10): + img.set_pixel(x, y, Color(1, 1, 1, 1)) + + var tex = ImageTexture.create_from_image(img) + texture = tex diff --git a/Scripts/ConveyerController.gd b/Scripts/ConveyerController.gd index abec8da..303e19d 100644 --- a/Scripts/ConveyerController.gd +++ b/Scripts/ConveyerController.gd @@ -11,12 +11,12 @@ var can_send = false var started = false func initialise(): - self.selected + self.selected = null self.events = [] self.destination = [] self.conveyer = [] self.conveyerInd = 0 - self.dragging + self.dragging = null self.sendingEnd = false self.can_send = false self.started = false @@ -25,8 +25,9 @@ func setup(conveyer) -> void: self.conveyer.append(conveyer) self.can_send = false self.sendingEnd = false - self.started = false self.events = [] + self.started = false + # Called when the node enters the scene tree for the first time. func _ready() -> void: @@ -40,9 +41,19 @@ func _process(delta: float) -> void: pass func create_conveyor(): - conveyer[conveyerInd].set_point_position(0, selected.get_position()) - conveyer[conveyerInd].set_point_position(1, destination[conveyerInd]) - conveyerInd+=1 + if conveyer.size() == 0: + print("ERROR: No conveyor Line2D found in scene!") + return + + # We use min() to ensure we don't go out of bounds of the actual Line2D nodes + # but we let conveyerInd grow so that destination and events indexing works. + var line_idx = min(conveyerInd, conveyer.size() - 1) + + conveyer[line_idx].set_point_position(0, selected.get_position()) + conveyer[line_idx].set_point_position(1, destination[conveyerInd]) + + AudioManager.play_construction() + conveyerInd += 1 func send_event(): print("sending events!") diff --git a/Scripts/HoverLabel.gd b/Scripts/HoverLabel.gd new file mode 100644 index 0000000..d4d4eb5 --- /dev/null +++ b/Scripts/HoverLabel.gd @@ -0,0 +1,45 @@ +extends Label + +var hover_text: String = "" +var element_type: String = "" + +func _ready(): + mouse_entered.connect(_on_mouse_entered) + mouse_exited.connect(_on_mouse_exited) + mouse_filter = Control.MOUSE_FILTER_PASS + +func set_hover_info(type: String, description: String): + element_type = type + hover_text = description + +func _on_mouse_entered(): + if hover_text != "": + var tooltip = create_tooltip() + add_child(tooltip) + +func _on_mouse_exited(): + for child in get_children(): + if child.name == "HoverTooltip": + child.queue_free() + +func create_tooltip() -> Control: + var tooltip = Panel.new() + tooltip.name = "HoverTooltip" + tooltip.custom_minimum_size = Vector2(200, 60) + tooltip.position = Vector2(0, -70) + + var label = Label.new() + label.text = hover_text + label.autowrap_mode = TextServer.AUTOWRAP_WORD + label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER + + var margin = MarginContainer.new() + margin.add_theme_constant_override("margin_left", 10) + margin.add_theme_constant_override("margin_right", 10) + margin.add_theme_constant_override("margin_top", 10) + margin.add_theme_constant_override("margin_bottom", 10) + margin.add_child(label) + + tooltip.add_child(margin) + return tooltip diff --git a/Scripts/SinkClick.gd b/Scripts/SinkClick.gd index 6e5204a..9a178d9 100644 --- a/Scripts/SinkClick.gd +++ b/Scripts/SinkClick.gd @@ -1,11 +1,14 @@ extends Area2D # Called when the node enters the scene tree for the first time. func _input_event(viewport, event, shape_idx): - if event.is_pressed() and ConveyerController.selected != null: - self.on_click() + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: + if ConveyerController.selected != null: + get_viewport().set_input_as_handled() + self.on_click() func on_click(): print("hey") + AudioManager.play_click_end() ConveyerController.destination.append(get_parent().get_position()) transfer_box() diff --git a/Scripts/TutorialManager.gd b/Scripts/TutorialManager.gd new file mode 100644 index 0000000..2830107 --- /dev/null +++ b/Scripts/TutorialManager.gd @@ -0,0 +1,74 @@ +extends Node + +var current_tutorial: Dictionary = {} +var tutorials_completed: Dictionary = {} +var show_tutorials: bool = true +var current_step: int = 0 + +signal tutorial_started(level: String) +signal tutorial_step_completed(step: String) +signal tutorial_finished(level: String) + +func start_level_tutorial(level_name: String): + if tutorials_completed.get(level_name, false): + return + + var tutorial_path = "res://tutorial_data/" + level_name + ".json" + var tutorial_file = FileAccess.open(tutorial_path, FileAccess.READ) + if tutorial_file: + var tutorial_text = tutorial_file.get_as_text() + current_tutorial = JSON.parse_string(tutorial_text) + current_step = 0 + emit_signal("tutorial_started", level_name) + show_current_step() + +func show_current_step(): + if current_step >= current_tutorial.steps.size(): + finish_tutorial() + return + + var step = current_tutorial.steps[current_step] + show_tooltip(step.text, step.get("highlight", "")) + +func show_tooltip(text: String, highlight_target: String = ""): + if not ResourceLoader.exists("res://Scenes/TutorialTooltip.tscn"): + print("TutorialTooltip scene not found - skipping tutorial step") + return + + var tooltip_scene = load("res://Scenes/TutorialTooltip.tscn") + if tooltip_scene: + var tooltip = tooltip_scene.instantiate() + tooltip.set_text(text) + if highlight_target != "": + var target = get_tree().get_first_node_in_group(highlight_target) + if target: + tooltip.point_to(target) + add_child(tooltip) + +func next_step(): + current_step += 1 + show_current_step() + +func skip_tutorial(): + finish_tutorial() + +func finish_tutorial(): + tutorials_completed[current_tutorial.level] = true + emit_signal("tutorial_finished", current_tutorial.level) + current_tutorial = {} + +func open_glossary(term: String = ""): + var glossary = get_tree().get_first_node_in_group("Glossary") + + if not glossary: + # Auto-instantiate if missing + var glossary_scene = load("res://Scenes/ConceptGlossary.tscn") + if glossary_scene: + glossary = glossary_scene.instantiate() + get_tree().root.add_child(glossary) + + if glossary: + if term != "": + glossary.open_to_term(term) + else: + glossary.open() diff --git a/Scripts/TutorialTooltip.gd b/Scripts/TutorialTooltip.gd new file mode 100644 index 0000000..826cccd --- /dev/null +++ b/Scripts/TutorialTooltip.gd @@ -0,0 +1,20 @@ +extends Control + +@onready var label = $Panel/MarginContainer/VBoxContainer/Label +@onready var next_button = $Panel/MarginContainer/VBoxContainer/HBoxContainer/NextButton +@onready var skip_button = $Panel/MarginContainer/VBoxContainer/HBoxContainer/SkipButton + +func set_text(text: String): + label.text = text + +func point_to(target: Node2D): + # Position tooltip near target + global_position = target.global_position + Vector2(50, -100) + +func _on_next_button_pressed(): + TutorialManager.next_step() + queue_free() + +func _on_skip_button_pressed(): + TutorialManager.skip_tutorial() + queue_free() diff --git a/Scripts/blur.gdshader b/Scripts/blur.gdshader new file mode 100644 index 0000000..3069d1d --- /dev/null +++ b/Scripts/blur.gdshader @@ -0,0 +1,9 @@ +shader_type canvas_item; + +uniform float blur_amount : hint_range(0, 5) = 2.5; +uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap; + +void fragment() { + COLOR = textureLod(SCREEN_TEXTURE, SCREEN_UV, blur_amount); + COLOR.rgb *= 0.8; // Suble darkening +} diff --git a/Scripts/dls.gd b/Scripts/dls.gd new file mode 100644 index 0000000..7ef2675 --- /dev/null +++ b/Scripts/dls.gd @@ -0,0 +1,20 @@ +extends Area2D + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass + + + +func _on_mouse_entered(): + $hoverlabel.visible = true + + +func _on_mouse_exited(): + $hoverlabel.visible = false diff --git a/Scripts/draggable_filter.gd b/Scripts/draggable_filter.gd index c0d8bd3..5e6ce1f 100644 --- a/Scripts/draggable_filter.gd +++ b/Scripts/draggable_filter.gd @@ -24,16 +24,19 @@ func _on_mouse_entered() -> void: if not ConveyerController.dragging: draggable = true #scale = Vector2(1.05, 1.05) - + $hoverlabel.visible = true + func _on_mouse_exited() -> void: if not ConveyerController.dragging: draggable = false #scale = Vector2(1, 1) + $hoverlabel.visible = false func _on_area_entered(area: Area2D) -> void: if area.is_in_group("Box"): if area.get_parent().boxType != filterColor and area.get_parent().sending == true: print("kill it") + AudioManager.play_poof() area.get_parent().queue_free() diff --git a/Scripts/event_box.gd b/Scripts/event_box.gd index 94c0f0a..88e9b4b 100644 --- a/Scripts/event_box.gd +++ b/Scripts/event_box.gd @@ -3,16 +3,51 @@ extends Sprite2D @export var boxType: String @export var sending = false + + func _ready() -> void: print("event ready") print("event is color", boxType) ConveyerController.events.append(self) + var stylebox = $hoverlabel.get_theme_stylebox("normal") + if boxType == 'Red': + + if stylebox is StyleBoxFlat: + stylebox = stylebox.duplicate() + stylebox.bg_color = Color(1.0, 0.424, 0.475) + $hoverlabel.add_theme_stylebox_override("normal", stylebox) + $hoverlabel.set_text("[center][b]EVENT R") + + elif boxType == "Blue": + $hoverlabel.position.x += 300 + if stylebox is StyleBoxFlat: + stylebox = stylebox.duplicate() + stylebox.bg_color = Color(0.431, 0.565, 1.0) + $hoverlabel.set_text("[center][b]EVENT B") + $hoverlabel.add_theme_stylebox_override("normal", stylebox) + + elif boxType == "Green": + $hoverlabel.position.x += 300 + $hoverlabel.position.y += 100 + if stylebox is StyleBoxFlat: + stylebox = stylebox.duplicate() + stylebox.bg_color = Color(0.31, 0.553, 0.204) + $hoverlabel.add_theme_stylebox_override("normal", stylebox) + $hoverlabel.set_text("[center][b]EVENT G") + func _input_event(viewport, event, shape_idx) -> void: - print(event) - if event.is_pressed(): + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: + get_viewport().set_input_as_handled() self.on_click() func on_click(): print("hi") ConveyerController.selected = self + AudioManager.play_click_start() + +func _on_area_2d_mouse_entered(): + $hoverlabel.visible = true + +func _on_area_2d_mouse_exited(): + $hoverlabel.visible = false diff --git a/Scripts/level.gd b/Scripts/level.gd index 19b15b6..a53f198 100644 --- a/Scripts/level.gd +++ b/Scripts/level.gd @@ -8,6 +8,8 @@ var totalbox=[2,2,3] var nextLevel var levels=["basicEventFlow","boxClick","multiSink","dlqPattern"] var levelind=0 +var tutorial_lines = [] +var step_labels = [] func initialise(): sinkBoxMatchPresent=true @@ -15,6 +17,126 @@ func initialise(): totalbox=0 nextLevel=false dlsUsed=false + clear_tutorial_lines() + clear_step_labels() + +func _ready(): + _create_help_button() + get_tree().node_added.connect(_on_node_added) + # Check if already loaded (for first run) + var current = get_tree().current_scene + if current and current.name == "basicEventFlow": + _spawn_tutorial_lines(current) + _create_tutorial_steps(current) + +func _process(_delta): + if levelind == 0 and step_labels.size() >= 2: + var lbl1 = step_labels[0] + var lbl2 = step_labels[1] + if is_instance_valid(lbl1) and is_instance_valid(lbl2): + if ConveyerController.selected == null: + lbl1.visible = true + lbl2.visible = false + else: + lbl1.visible = false + lbl2.visible = true + +func _on_node_added(node): + if node.name == "basicEventFlow": + # Wait a frame for children to be ready + await get_tree().process_frame + _spawn_tutorial_lines(node) + _create_tutorial_steps(node) + +func _spawn_tutorial_lines(scene_root): + print("Spawning tutorial lines for Level 1...") + # Load the connector line scene + var line_scene = load("res://Scenes/ConnectorLine.tscn") + if not line_scene: return + + # Find nodes (hardcoded names based on basicEventFlow.tscn) + var box_a = scene_root.get_node_or_null("BoxA") + var box_b = scene_root.get_node_or_null("BoxB") + var sink = scene_root.get_node_or_null("Sink") + + # Connect BoxA -> Sink + if box_a and sink: + var line1 = line_scene.instantiate() + scene_root.add_child(line1) + line1.setup(box_a, sink) + tutorial_lines.append(line1) + + # Connect BoxB -> Sink + if box_b and sink: + var line2 = line_scene.instantiate() + scene_root.add_child(line2) + line2.setup(box_b, sink) + tutorial_lines.append(line2) + +func clear_tutorial_lines(): + for line in tutorial_lines: + if is_instance_valid(line): + line.fade_out() + tutorial_lines.clear() + +func _create_tutorial_steps(scene_root): + var box_a = scene_root.get_node_or_null("BoxA") + var sink = scene_root.get_node_or_null("Sink") + + if not box_a or not sink: return + + var label1 = Label.new() + label1.text = "1. Click a Box to Select" + # Move further left to avoid overlap with the box + label1.position = box_a.global_position + Vector2(-400, -30) + scene_root.add_child(label1) + step_labels.append(label1) + + var label2 = Label.new() + label2.text = "2. Now click the Sink" + # Move much further left to clear the sink graphic (was -350, now -550) + label2.position = sink.global_position + Vector2(-550, 0) + scene_root.add_child(label2) + step_labels.append(label2) + + # Style labels + for lbl in step_labels: + lbl.add_theme_font_size_override("font_size", 28) + lbl.add_theme_color_override("font_color", Color(1, 0.2, 0.2)) # High contrast red + +func clear_step_labels(): + for lbl in step_labels: + if is_instance_valid(lbl): + var tween = create_tween() + tween.tween_property(lbl, "modulate:a", 0.0, 0.3) + tween.finished.connect(lbl.queue_free) + step_labels.clear() + +func _create_help_button(): + # Create a CanvasLayer so button stays on top of everything + var canvas = CanvasLayer.new() + add_child(canvas) + + var help_btn = Button.new() + help_btn.text = "?" + help_btn.name = "GlobalHelpButton" + + # Style the button to look like a circle/help icon + help_btn.custom_minimum_size = Vector2(40, 40) + help_btn.position = Vector2(get_viewport().get_visible_rect().size.x - 60, 20) # Top right + + # Connect signal + help_btn.pressed.connect(_on_help_pressed) + + canvas.add_child(help_btn) + +func _on_help_pressed(): + print("Help button pressed!") + # Try access via singleton name directly first (if autoloaded) + if has_node("/root/TutorialManager"): + get_node("/root/TutorialManager").open_glossary() + else: + print("CRITICAL ERROR: TutorialManager not found in /root. Please add 'Scripts/TutorialManager.gd' to Project Settings -> Autoload as 'TutorialManager'") func next_level(): if sinkUsed: @@ -30,22 +152,56 @@ func next_level(): var message_display = preload("res://Scenes/message_display.tscn").instantiate() add_child(message_display) - message_display.z_index = 999 + message_display.layer = 100 if nextLevel: print("success") + AudioManager.play_level_clear() message_display.show_message("Success") - await message_display.show_message_for_duration(2.0) - message_display.visible = false + await message_display.dismissed levelind+=1 if levelind!=levels.size(): + # CRITICAL FIXInitialize BEFORE changing scene, not after! + ConveyerController.initialise() var next_level_path="res://Scenes/"+levels[levelind]+".tscn" get_tree().change_scene_to_file(next_level_path) - ConveyerController.initialise() else: print("End of Levels.") get_tree().change_scene_to_file("res://Scenes/end_of_all_levels.tscn") else: - print("Failed. Try Again") - message_display.show_message("Failed. Try Again") - await message_display.show_message_for_duration(2.0) - message_display.visible = false + var failure_data = analyze_failure() + show_educational_failure(failure_data, message_display) + AudioManager.play_level_fail() + await message_display.dismissed + +func analyze_failure() -> Dictionary: + var reason = "" + var hint = "" + var lesson = "" + + if not sinkUsed: + reason = "No events were delivered to any sink" + hint = "Click an event to select it, then click a sink to route it" + lesson = "In Knative, events must be routed from sources to sinks through triggers" + + elif sinkBoxMatchNeeded[levelind] and not sinkBoxMatchPresent: + reason = "Wrong event type delivered to sink" + hint = "Use filters to match event colors with sink colors" + lesson = "Knative Triggers use filters to ensure events reach the correct subscribers based on event attributes" + + elif dlsRequired[levelind] and not dlsUsed: + reason = "Failed events were not routed to Dead Letter Sink" + hint = "Click the DLS to catch events that hit the blockage" + lesson = "Dead Letter Sinks prevent data loss by catching events that fail to process" + + return { + "reason": reason, + "hint": hint, + "lesson": lesson + } + +func show_educational_failure(data: Dictionary, message_display): + message_display.show_failure_with_lesson( + data.reason, + data.hint, + data.lesson + ) diff --git a/Scripts/message_display.gd b/Scripts/message_display.gd index 0692202..973188f 100644 --- a/Scripts/message_display.gd +++ b/Scripts/message_display.gd @@ -1,14 +1,108 @@ -extends Control +extends CanvasLayer + +signal dismissed + +@onready var label = %Label +@onready var quack = %QuackTexture +@onready var blur = %Blur +@onready var root = %Root + +var is_hovering = false + +@onready var continue_button = %ContinueButton + +func _ready(): + print("Popup ready - connecting button signals") + # Initial transparency for fade-in + root.modulate.a = 0.0 + # Set blur to 0 initially + blur.material.set_shader_parameter("blur_amount", 0.0) + + var tween = create_tween().set_parallel(true) + tween.tween_property(root, "modulate:a", 1.0, 0.4).set_trans(Tween.TRANS_SINE) + tween.tween_property(blur.material, "shader_parameter/blur_amount", 2.5, 0.4) + + # Setup juicy button animations + await get_tree().process_frame + if continue_button: + continue_button.pivot_offset = continue_button.size / 2 # Ensure centered scaling + + continue_button.mouse_entered.connect(_on_button_hover) + continue_button.mouse_exited.connect(_on_button_unhover) + continue_button.button_down.connect(_on_button_down) + continue_button.button_up.connect(_on_button_up) + +func _on_button_hover(): + if not is_instance_valid(continue_button): return + is_hovering = true + continue_button.pivot_offset = continue_button.size / 2 + var tween = create_tween() + tween.tween_property(continue_button, "scale", Vector2(1.08, 1.08), 0.1).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(continue_button, "self_modulate", Color(1.3, 1.3, 1.3), 0.1) # Brighten + +func _on_button_unhover(): + if not is_instance_valid(continue_button): return + is_hovering = false + continue_button.pivot_offset = continue_button.size / 2 + var tween = create_tween() + tween.tween_property(continue_button, "scale", Vector2(1.0, 1.0), 0.1).set_trans(Tween.TRANS_SINE) + tween.parallel().tween_property(continue_button, "self_modulate", Color(1, 1, 1), 0.1) + +func _on_button_down(): + if not is_instance_valid(continue_button): return + print("Button DOWN") + continue_button.pivot_offset = continue_button.size / 2 + var tween = create_tween() + # Dramatic Shrink and Darken + tween.tween_property(continue_button, "scale", Vector2(0.85, 0.85), 0.05).set_trans(Tween.TRANS_SINE) + tween.parallel().tween_property(continue_button, "self_modulate", Color(0.5, 0.5, 0.5), 0.05) # Much darker + +func _on_button_up(): + if not is_instance_valid(continue_button): return + print("Button UP") + continue_button.pivot_offset = continue_button.size / 2 + var tween = create_tween() + # Bouncy Pop back out + tween.tween_property(continue_button, "scale", Vector2(1.15, 1.15), 0.1).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + if is_hovering: + tween.tween_property(continue_button, "scale", Vector2(1.08, 1.08), 0.05) + tween.parallel().tween_property(continue_button, "self_modulate", Color(1.3, 1.3, 1.3), 0.05) + else: + tween.tween_property(continue_button, "scale", Vector2(1.0, 1.0), 0.05) + tween.parallel().tween_property(continue_button, "self_modulate", Color(1, 1, 1), 0.05) func show_message(text): print("Message displayed") - $Label.text=text - -func show_message_for_duration(duration: float) -> void: - var timer := Timer.new() - timer.wait_time = duration - timer.one_shot = true - add_child(timer) - timer.start() - await timer.timeout - timer.queue_free() + if text == "Success": + quack.visible = true + label.text = "[center][b][color=#10a30b][font_size=56]Success![/font_size][/color][/b]\n\n[font_size=32]Level Completed Successfully[/font_size][/center]" + else: + quack.visible = false + label.text = "[center]" + text + "[/center]" + +func show_message_for_duration(_duration: float) -> void: + # Ignore duration and wait for the dismissed signal + await dismissed + +func show_failure_with_lesson(reason: String, hint: String, lesson: String): + quack.visible = false # Keep focus on the lesson + var full_message = "[center][b][color=#e63946][font_size=32]Level Failed[/font_size][/color][/b][/center]\n\n" + full_message += "❌ [font_size=24][b]Why:[/b][/font_size]\n[font_size=20]" + reason + "[/font_size]\n\n" + full_message += "💡 [font_size=24][b]Hint:[/b][/font_size]\n[font_size=20]" + hint + "[/font_size]\n\n" + full_message += "🎓 [font_size=24][b]Knative Concept:[/b][/font_size]\n[font_size=20]" + lesson + "[/font_size]" + label.text = full_message + +func _on_continue_button_pressed(): + print("Continue button clicked!") + # Small delay to let the 'up' animation show + await get_tree().create_timer(0.1).timeout + + # Emit signal so level controller knows we're done + dismissed.emit() + + # Fade out everything + var tween = create_tween().set_parallel(true) + tween.tween_property(root, "modulate:a", 0.0, 0.3) + tween.tween_property(blur.material, "shader_parameter/blur_amount", 0.0, 0.3) + await tween.finished + queue_free() diff --git a/Scripts/scrolling_line.gdshader b/Scripts/scrolling_line.gdshader new file mode 100644 index 0000000..3fbc27f --- /dev/null +++ b/Scripts/scrolling_line.gdshader @@ -0,0 +1,10 @@ +shader_type canvas_item; + +uniform float speed = 2.0; + +void fragment() { + vec2 uv = UV; + uv.x -= TIME * speed; + vec4 color = texture(TEXTURE, uv); + COLOR = color * MODULATE; +} diff --git a/Scripts/sink.gd b/Scripts/sink.gd index 4939319..45289a2 100644 --- a/Scripts/sink.gd +++ b/Scripts/sink.gd @@ -1,13 +1,36 @@ extends Sprite2D @export var expectedType: String +@export var available: bool = true + +var blink_timer: float = 0.0 +var blink_interval: float = 0.5 +var indicator_light: ColorRect = null # Called when the node enters the scene tree for the first time. func _ready() -> void: - pass # Replace with function body. + indicator_light = get_node_or_null("IndicatorLight") + if indicator_light == null: + push_warning("IndicatorLight not found in sink scene") # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: + if indicator_light != null: + if available: + blink_timer += delta + if blink_timer >= blink_interval: + blink_timer = 0.0 + indicator_light.visible = !indicator_light.visible + else: + indicator_light.visible = false pass + + +func _on_area_2d_mouse_entered(): + $hoverlabel.visible = true # Replace with function body. + + +func _on_area_2d_mouse_exited(): + $hoverlabel.visible = false# Replace with function body. diff --git a/tutorial_data/basicEventFlow.json b/tutorial_data/basicEventFlow.json new file mode 100644 index 0000000..3bd156d --- /dev/null +++ b/tutorial_data/basicEventFlow.json @@ -0,0 +1,21 @@ +{ + "level": "basicEventFlow", + "steps": [ + { + "text": "Welcome! In Knative, events flow from Sources to Sinks through Brokers.", + "highlight": "" + }, + { + "text": "Click this event to select it", + "highlight": "EventBox" + }, + { + "text": "Now click the sink to route the event", + "highlight": "Sink" + }, + { + "text": "Great! You just created a basic Knative event flow. This is like a Trigger connecting a Broker to a Sink.", + "highlight": "" + } + ] +} diff --git a/tutorial_data/boxClick.json b/tutorial_data/boxClick.json new file mode 100644 index 0000000..cbf4a3b --- /dev/null +++ b/tutorial_data/boxClick.json @@ -0,0 +1,25 @@ +{ + "level": "boxClick", + "steps": [ + { + "text": "Level 2: Triggers & Filters. In Knative, Triggers use filters to route events based on their attributes.", + "highlight": "" + }, + { + "text": "Notice the colored events. Each has a different 'type' attribute.", + "highlight": "EventBox" + }, + { + "text": "Drag a filter onto the conveyor to filter events by color", + "highlight": "Filter" + }, + { + "text": "Route matching events to the correct colored sink", + "highlight": "Sink" + }, + { + "text": "Perfect! Knative Triggers work the same way - filtering events by attributes like type, source, or custom fields.", + "highlight": "" + } + ] +} \ No newline at end of file diff --git a/tutorial_data/dlqPattern.json b/tutorial_data/dlqPattern.json new file mode 100644 index 0000000..a025cba --- /dev/null +++ b/tutorial_data/dlqPattern.json @@ -0,0 +1,21 @@ +{ + "level": "dlqPattern", + "steps": [ + { + "text": "Level 4: Dead Letter Queue. When events fail to process, they need somewhere to go.", + "highlight": "" + }, + { + "text": "Notice the blockage - events will fail here", + "highlight": "Blockage" + }, + { + "text": "Click the Dead Letter Sink (DLS) to route failed events there", + "highlight": "DLS" + }, + { + "text": "Perfect! In Knative, Dead Letter Sinks prevent data loss by catching failed events for debugging or retry.", + "highlight": "" + } + ] +} \ No newline at end of file diff --git a/tutorial_data/multiSink.json b/tutorial_data/multiSink.json new file mode 100644 index 0000000..66c5d27 --- /dev/null +++ b/tutorial_data/multiSink.json @@ -0,0 +1,21 @@ +{ + "level": "multiSink", + "steps": [ + { + "text": "Level 3: Multiple Sinks. In Knative, one Broker can route events to multiple subscribers.", + "highlight": "" + }, + { + "text": "You have multiple sinks. Each needs matching events.", + "highlight": "Sink" + }, + { + "text": "Use filters to route each event type to its matching sink", + "highlight": "Filter" + }, + { + "text": "Excellent! This is how Knative enables fan-out patterns - one event source, multiple subscribers.", + "highlight": "" + } + ] +} \ No newline at end of file From 5fb9a4028a6f125922834ac9a832be2957b51c43 Mon Sep 17 00:00:00 2001 From: Prantik-07 Date: Tue, 3 Feb 2026 21:50:02 +0530 Subject: [PATCH 2/2] Merge branch 'main' into feature/interactive-tutorial-v2 --- .gitignore | 4 +++- 2D Assets/background.png.import | 6 ++++++ 2D Assets/boxes/blueBox.png.import | 6 ++++++ 2D Assets/boxes/blueBoxPinkRectangle.png.import | 6 ++++++ 2D Assets/boxes/blueBoxPinkTriangle.png.import | 6 ++++++ 2D Assets/boxes/blueBoxYellowRectangle.png.import | 6 ++++++ 2D Assets/boxes/box.png.import | 6 ++++++ 2D Assets/boxes/greenBox.png.import | 6 ++++++ 2D Assets/boxes/redBox.png.import | 6 ++++++ 2D Assets/confetti/cofetti_hat.png.import | 6 ++++++ 2D Assets/confetti/confetti1.png.import | 6 ++++++ 2D Assets/confetti/confetti2.png.import | 6 ++++++ 2D Assets/confetti/tip3.png.import | 6 ++++++ 2D Assets/conveyer texture.png.import | 6 ++++++ 2D Assets/funnels/blueFunnel.png.import | 6 ++++++ 2D Assets/funnels/blueFunnelPinkRectangle.png.import | 6 ++++++ 2D Assets/funnels/blueFunnelPinkTriangle.png.import | 6 ++++++ 2D Assets/funnels/blueFunnelYellowRectangle.png.import | 6 ++++++ 2D Assets/funnels/funnel.png.import | 6 ++++++ 2D Assets/funnels/greenFunnel.png.import | 6 ++++++ 2D Assets/funnels/redFunnel.png.import | 6 ++++++ 2D Assets/funnels/yellowFunnel.png.import | 6 ++++++ 2D Assets/retryAndDLQ/DLS.png.import | 6 ++++++ 2D Assets/retryAndDLQ/blockageRight.png.import | 6 ++++++ 2D Assets/sinks/greenSink.png.import | 6 ++++++ 2D Assets/sinks/redSink.png.import | 6 ++++++ 2D Assets/sinks/sink.png.import | 6 ++++++ 2D Assets/sinks/yellowSink.png.import | 6 ++++++ 2D Assets/transformation/transformer_machine.png.import | 6 ++++++ .../Knative Level Transitions-1.png.import | 6 ++++++ .../Knative Level Transitions-2.png.import | 6 ++++++ .../Knative Level Transitions-3.png.import | 6 ++++++ .../Knative Level Transitions-4.png.import | 6 ++++++ .../Knative Level Transitions-5.png.import | 6 ++++++ .../Knative Level Transitions-6.png.import | 6 ++++++ .../Rough Sketches 1.png.import | 6 ++++++ .../Rough Sketches 2.png.import | 6 ++++++ .../Rough Sketches 3.png.import | 6 ++++++ .../Rough Sketches 4.png.import | 6 ++++++ .../Rough Sketches 5.png.import | 6 ++++++ .../Rough Sketches 6.png.import | 6 ++++++ icon.svg.import | 6 ++++++ isometric boxes - Dani Maccari/box pointer.png.import | 6 ++++++ .../boxes_SpriteSheet.png.import | 6 ++++++ isometric boxes - Dani Maccari/shadow.png.import | 6 ++++++ project.godot | 8 +++++++- 46 files changed, 274 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1856418..01dd70b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ # Godot 4+ specific ignores .godot/ /android/ -*.tmp \ No newline at end of file +*.tmp +*.import +*.uid \ No newline at end of file diff --git a/2D Assets/background.png.import b/2D Assets/background.png.import index df4a93d..c864dfb 100644 --- a/2D Assets/background.png.import +++ b/2D Assets/background.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/background.png-cdde63d166ec8c4325ab6bbe873981 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/boxes/blueBox.png.import b/2D Assets/boxes/blueBox.png.import index 39e424c..9150b7c 100644 --- a/2D Assets/boxes/blueBox.png.import +++ b/2D Assets/boxes/blueBox.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/blueBox.png-e0745c51cdba1dcc6c950872a059e484. compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/boxes/blueBoxPinkRectangle.png.import b/2D Assets/boxes/blueBoxPinkRectangle.png.import index e0f7777..6cb2a25 100644 --- a/2D Assets/boxes/blueBoxPinkRectangle.png.import +++ b/2D Assets/boxes/blueBoxPinkRectangle.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/blueBoxPinkRectangle.png-022796e0410c52ff1adb compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/boxes/blueBoxPinkTriangle.png.import b/2D Assets/boxes/blueBoxPinkTriangle.png.import index 57c6b9b..a7d80e6 100644 --- a/2D Assets/boxes/blueBoxPinkTriangle.png.import +++ b/2D Assets/boxes/blueBoxPinkTriangle.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/blueBoxPinkTriangle.png-ba3733a243a5feb4376a3 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/boxes/blueBoxYellowRectangle.png.import b/2D Assets/boxes/blueBoxYellowRectangle.png.import index 2cb04e1..6983b53 100644 --- a/2D Assets/boxes/blueBoxYellowRectangle.png.import +++ b/2D Assets/boxes/blueBoxYellowRectangle.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/blueBoxYellowRectangle.png-452dd33aa7fc9686c8 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/boxes/box.png.import b/2D Assets/boxes/box.png.import index c91551a..fcc5d71 100644 --- a/2D Assets/boxes/box.png.import +++ b/2D Assets/boxes/box.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/box.png-4536dc548f72a32574757ebd9d6e275f.ctex compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/boxes/greenBox.png.import b/2D Assets/boxes/greenBox.png.import index c79292c..a7cb180 100644 --- a/2D Assets/boxes/greenBox.png.import +++ b/2D Assets/boxes/greenBox.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/greenBox.png-c2f3aa16b949971e88dd95364bd3a98b compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/boxes/redBox.png.import b/2D Assets/boxes/redBox.png.import index e642e3f..4d0dfca 100644 --- a/2D Assets/boxes/redBox.png.import +++ b/2D Assets/boxes/redBox.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/redBox.png-683a42de7c35e606777b76f17e66b85c.c compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/confetti/cofetti_hat.png.import b/2D Assets/confetti/cofetti_hat.png.import index 49ddddf..f389e11 100644 --- a/2D Assets/confetti/cofetti_hat.png.import +++ b/2D Assets/confetti/cofetti_hat.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/cofetti_hat.png-48facd872e287e2e2b76bc44057e0 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/confetti/confetti1.png.import b/2D Assets/confetti/confetti1.png.import index c173445..18b70ce 100644 --- a/2D Assets/confetti/confetti1.png.import +++ b/2D Assets/confetti/confetti1.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/confetti1.png-4ca03b332767525fd0ca1245f31c5c0 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/confetti/confetti2.png.import b/2D Assets/confetti/confetti2.png.import index bc8b979..67dc2ce 100644 --- a/2D Assets/confetti/confetti2.png.import +++ b/2D Assets/confetti/confetti2.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/confetti2.png-b5530d1cca5d2a1fb7ce7290e7d137b compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/confetti/tip3.png.import b/2D Assets/confetti/tip3.png.import index 8d41253..d408b5c 100644 --- a/2D Assets/confetti/tip3.png.import +++ b/2D Assets/confetti/tip3.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/tip3.png-ad8de08873974ae91d32a8a05526785b.cte compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/conveyer texture.png.import b/2D Assets/conveyer texture.png.import index edebb96..7f4458a 100644 --- a/2D Assets/conveyer texture.png.import +++ b/2D Assets/conveyer texture.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/conveyer texture.png-f193bd665c85135167e9f2ba compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/funnels/blueFunnel.png.import b/2D Assets/funnels/blueFunnel.png.import index 4641e1b..0d7924c 100644 --- a/2D Assets/funnels/blueFunnel.png.import +++ b/2D Assets/funnels/blueFunnel.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/blueFunnel.png-be2630f86b1a09b2d227abd5920d35 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/funnels/blueFunnelPinkRectangle.png.import b/2D Assets/funnels/blueFunnelPinkRectangle.png.import index fa1cd89..30511b4 100644 --- a/2D Assets/funnels/blueFunnelPinkRectangle.png.import +++ b/2D Assets/funnels/blueFunnelPinkRectangle.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/blueFunnelPinkRectangle.png-43931fd35851f1005 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/funnels/blueFunnelPinkTriangle.png.import b/2D Assets/funnels/blueFunnelPinkTriangle.png.import index 33ee841..706395a 100644 --- a/2D Assets/funnels/blueFunnelPinkTriangle.png.import +++ b/2D Assets/funnels/blueFunnelPinkTriangle.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/blueFunnelPinkTriangle.png-a324836cd36c880b32 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/funnels/blueFunnelYellowRectangle.png.import b/2D Assets/funnels/blueFunnelYellowRectangle.png.import index 1d58176..2999c7e 100644 --- a/2D Assets/funnels/blueFunnelYellowRectangle.png.import +++ b/2D Assets/funnels/blueFunnelYellowRectangle.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/blueFunnelYellowRectangle.png-12cf3faf5efb62e compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/funnels/funnel.png.import b/2D Assets/funnels/funnel.png.import index 5dc9e03..58eb742 100644 --- a/2D Assets/funnels/funnel.png.import +++ b/2D Assets/funnels/funnel.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/funnel.png-99950429b5b3976c9be0d10b2e130529.c compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/funnels/greenFunnel.png.import b/2D Assets/funnels/greenFunnel.png.import index 0015dda..b60a027 100644 --- a/2D Assets/funnels/greenFunnel.png.import +++ b/2D Assets/funnels/greenFunnel.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/greenFunnel.png-9b31229a6ae861714dea240c0b8a6 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/funnels/redFunnel.png.import b/2D Assets/funnels/redFunnel.png.import index 2719bfe..af94693 100644 --- a/2D Assets/funnels/redFunnel.png.import +++ b/2D Assets/funnels/redFunnel.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/redFunnel.png-948139d8225d4808eeb6604264dc024 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/funnels/yellowFunnel.png.import b/2D Assets/funnels/yellowFunnel.png.import index 2a41822..12498cc 100644 --- a/2D Assets/funnels/yellowFunnel.png.import +++ b/2D Assets/funnels/yellowFunnel.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/yellowFunnel.png-c66fba24c2c679cc09f17079a5ba compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/retryAndDLQ/DLS.png.import b/2D Assets/retryAndDLQ/DLS.png.import index f3cdd2e..5dc329f 100644 --- a/2D Assets/retryAndDLQ/DLS.png.import +++ b/2D Assets/retryAndDLQ/DLS.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/DLS.png-30995fa114e8c48ce8300b9b7b96541b.ctex compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/retryAndDLQ/blockageRight.png.import b/2D Assets/retryAndDLQ/blockageRight.png.import index 0029422..a73188c 100644 --- a/2D Assets/retryAndDLQ/blockageRight.png.import +++ b/2D Assets/retryAndDLQ/blockageRight.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/blockageRight.png-8205335e32375088d3370318521 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/sinks/greenSink.png.import b/2D Assets/sinks/greenSink.png.import index 4fe274c..7c5ab9c 100644 --- a/2D Assets/sinks/greenSink.png.import +++ b/2D Assets/sinks/greenSink.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/greenSink.png-6a95dd2eb44a85c80435c42917bfbee compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/sinks/redSink.png.import b/2D Assets/sinks/redSink.png.import index e4acfea..63bf7f0 100644 --- a/2D Assets/sinks/redSink.png.import +++ b/2D Assets/sinks/redSink.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/redSink.png-4bf78497a4ef97cc69702ba78258816d. compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/sinks/sink.png.import b/2D Assets/sinks/sink.png.import index 03086cf..aac3285 100644 --- a/2D Assets/sinks/sink.png.import +++ b/2D Assets/sinks/sink.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/sink.png-89a2b78f0c93a5f3375946943272aad0.cte compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/sinks/yellowSink.png.import b/2D Assets/sinks/yellowSink.png.import index 9a6c751..ba3fa3f 100644 --- a/2D Assets/sinks/yellowSink.png.import +++ b/2D Assets/sinks/yellowSink.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/yellowSink.png-5da598bb8eac3f7a69a80a05f2c8d3 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/2D Assets/transformation/transformer_machine.png.import b/2D Assets/transformation/transformer_machine.png.import index 24368cf..90d26b3 100644 --- a/2D Assets/transformation/transformer_machine.png.import +++ b/2D Assets/transformation/transformer_machine.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/transformer_machine.png-499d39d6ab2242e7a3735 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Level Transitions/Knative Level Transitions-1.png.import b/Levels/Level Transitions/Knative Level Transitions-1.png.import index 3a40c8a..d4e8c3c 100644 --- a/Levels/Level Transitions/Knative Level Transitions-1.png.import +++ b/Levels/Level Transitions/Knative Level Transitions-1.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Knative Level Transitions-1.png-5437c18ff2995 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Level Transitions/Knative Level Transitions-2.png.import b/Levels/Level Transitions/Knative Level Transitions-2.png.import index 3f70f3e..44b4839 100644 --- a/Levels/Level Transitions/Knative Level Transitions-2.png.import +++ b/Levels/Level Transitions/Knative Level Transitions-2.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Knative Level Transitions-2.png-54cb3e308acbf compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Level Transitions/Knative Level Transitions-3.png.import b/Levels/Level Transitions/Knative Level Transitions-3.png.import index 03c5851..11e8e7b 100644 --- a/Levels/Level Transitions/Knative Level Transitions-3.png.import +++ b/Levels/Level Transitions/Knative Level Transitions-3.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Knative Level Transitions-3.png-367591489cd5b compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Level Transitions/Knative Level Transitions-4.png.import b/Levels/Level Transitions/Knative Level Transitions-4.png.import index 35ed7db..54e9d90 100644 --- a/Levels/Level Transitions/Knative Level Transitions-4.png.import +++ b/Levels/Level Transitions/Knative Level Transitions-4.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Knative Level Transitions-4.png-f19898a8eb29d compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Level Transitions/Knative Level Transitions-5.png.import b/Levels/Level Transitions/Knative Level Transitions-5.png.import index bae101e..8f3e049 100644 --- a/Levels/Level Transitions/Knative Level Transitions-5.png.import +++ b/Levels/Level Transitions/Knative Level Transitions-5.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Knative Level Transitions-5.png-1ec2ec12c9953 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Level Transitions/Knative Level Transitions-6.png.import b/Levels/Level Transitions/Knative Level Transitions-6.png.import index 6796690..5e9578d 100644 --- a/Levels/Level Transitions/Knative Level Transitions-6.png.import +++ b/Levels/Level Transitions/Knative Level Transitions-6.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Knative Level Transitions-6.png-94a9859405024 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 1.png.import b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 1.png.import index 5471446..101195f 100644 --- a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 1.png.import +++ b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 1.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Rough Sketches 1.png-a17140b33aad11a05efbaa34 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 2.png.import b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 2.png.import index 0c6b18d..478aa19 100644 --- a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 2.png.import +++ b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 2.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Rough Sketches 2.png-775850a946b028261d0c992d compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 3.png.import b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 3.png.import index eaf2f58..7afccf4 100644 --- a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 3.png.import +++ b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 3.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Rough Sketches 3.png-2c05a000a66c43df60495a11 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 4.png.import b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 4.png.import index 989315a..791beca 100644 --- a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 4.png.import +++ b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 4.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Rough Sketches 4.png-b3cdb83fe01660b59bd3c905 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 5.png.import b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 5.png.import index b035899..d2ac308 100644 --- a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 5.png.import +++ b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 5.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Rough Sketches 5.png-e2b8fb344abb9f305496f534 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 6.png.import b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 6.png.import index 9d25232..05f3ab2 100644 --- a/Levels/Rough Sketches for EDA Patterns/Rough Sketches 6.png.import +++ b/Levels/Rough Sketches for EDA Patterns/Rough Sketches 6.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/Rough Sketches 6.png-50793b40870b24aca42011dd compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/icon.svg.import b/icon.svg.import index 6f36595..b8c7c91 100644 --- a/icon.svg.import +++ b/icon.svg.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.cte compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/isometric boxes - Dani Maccari/box pointer.png.import b/isometric boxes - Dani Maccari/box pointer.png.import index d22c4db..85fad58 100644 --- a/isometric boxes - Dani Maccari/box pointer.png.import +++ b/isometric boxes - Dani Maccari/box pointer.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/box pointer.png-1cdc84d45e23a05b1b198f6e7d03d compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/isometric boxes - Dani Maccari/boxes_SpriteSheet.png.import b/isometric boxes - Dani Maccari/boxes_SpriteSheet.png.import index 7246815..f827db6 100644 --- a/isometric boxes - Dani Maccari/boxes_SpriteSheet.png.import +++ b/isometric boxes - Dani Maccari/boxes_SpriteSheet.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/boxes_SpriteSheet.png-1f337a0b0d9e33d544f968c compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/isometric boxes - Dani Maccari/shadow.png.import b/isometric boxes - Dani Maccari/shadow.png.import index d1fa2a1..e7ab92d 100644 --- a/isometric boxes - Dani Maccari/shadow.png.import +++ b/isometric boxes - Dani Maccari/shadow.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/shadow.png-a297159ab0f7192fe4e1b5c7feb088c0.c compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/project.godot b/project.godot index d473b09..37eb537 100644 --- a/project.godot +++ b/project.godot @@ -8,17 +8,23 @@ config_version=5 +[animation] + +compatibility/default_parent_skeleton_in_mesh_instance_3d=true + [application] config/name="eventing-game" run/main_scene="res://Scenes/basicEventFlow.tscn" -config/features=PackedStringArray("4.3", "GL Compatibility") +config/features=PackedStringArray("4.6", "GL Compatibility") config/icon="res://icon.svg" [autoload] ConveyerController="*res://Scripts/ConveyerController.gd" Level="*res://Scripts/level.gd" +TutorialManager="*uid://b1fvugn2vjief" +AudioManager="*res://Scripts/AudioManager.gd" [input]