From f940247a48ba889c387ad962f8480d430d2bc255 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Wed, 7 May 2025 10:33:00 -0500 Subject: [PATCH] Quest system fixed. --- scenes/Maps/TestMap/TestMap.tscn | 6 ++++- scenes/Overworld.tscn | 9 +------ scenes/Singletons/UI.tscn | 4 +-- scenes/UI/DebugMenu.tscn | 1 - scenes/UI/QuestMenu.tscn | 19 +++++++++++-- scripts/Event/Event.gd | 2 +- scripts/Event/Quest/EventShowQuest.gd | 17 ++++++++++++ scripts/Event/Quest/EventShowQuest.gd.uid | 1 + scripts/Quest/Quest.gd | 3 ++- scripts/Singleton/Quest.gd | 18 +++++++++---- scripts/Singleton/UI.gd | 4 +++ scripts/UI/DebugMenu.gd | 4 +-- scripts/UI/QuestMenu.gd | 33 ++++++++++++++++++++--- shaders/NPC Shader.gdshader | 2 +- 14 files changed, 94 insertions(+), 29 deletions(-) create mode 100644 scripts/Event/Quest/EventShowQuest.gd create mode 100644 scripts/Event/Quest/EventShowQuest.gd.uid diff --git a/scenes/Maps/TestMap/TestMap.tscn b/scenes/Maps/TestMap/TestMap.tscn index d50f460..37a6169 100644 --- a/scenes/Maps/TestMap/TestMap.tscn +++ b/scenes/Maps/TestMap/TestMap.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=3 uid="uid://dx6fv8n4jl5ku"] +[gd_scene load_steps=11 format=3 uid="uid://dx6fv8n4jl5ku"] [ext_resource type="PackedScene" uid="uid://yhtpoum3eek7" path="res://scenes/Entities/Rosa.tscn" id="1_7b7hx"] [ext_resource type="PackedScene" uid="uid://dr4b2pmsknuhc" path="res://scenes/Entities/TestNPC.tscn" id="2_cg1ph"] @@ -6,6 +6,7 @@ [ext_resource type="PackedScene" uid="uid://boj5o4fx41rv8" path="res://scenes/Maps/TestMap/TestMapBuilding.tscn" id="4_brp0k"] [ext_resource type="Script" uid="uid://tkfc88q8m86f" path="res://scripts/Event/EventConversation.gd" id="5_cg1ph"] [ext_resource type="Script" uid="uid://y7ckj1tn5cro" path="res://scripts/Event/EventTextbox.gd" id="6_gxq5o"] +[ext_resource type="Script" uid="uid://dd6ppw243a5x7" path="res://scripts/Event/Quest/EventShowQuest.gd" id="7_brp0k"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_e1h75"] sky_horizon_color = Color(0.59625, 0.6135, 0.6375, 1) @@ -60,3 +61,6 @@ script = ExtResource("5_cg1ph") [node name="Text 0" type="Node" parent="Events/TestConversation"] script = ExtResource("6_gxq5o") text = "I am giving you a quest to gather some ingredients." + +[node name="Quest" type="Node" parent="Events/TestConversation"] +script = ExtResource("7_brp0k") diff --git a/scenes/Overworld.tscn b/scenes/Overworld.tscn index a7c3244..ebfec14 100644 --- a/scenes/Overworld.tscn +++ b/scenes/Overworld.tscn @@ -1,16 +1,9 @@ -[gd_scene load_steps=5 format=3 uid="uid://tmbx2kit0jyq"] +[gd_scene load_steps=3 format=3 uid="uid://tmbx2kit0jyq"] [ext_resource type="Script" uid="uid://pcncoc6wum4q" path="res://scripts/Scene/OverworldScene.gd" id="1_rfscu"] [ext_resource type="PackedScene" uid="uid://dx6fv8n4jl5ku" path="res://scenes/Maps/TestMap/TestMap.tscn" id="2_puia7"] -[ext_resource type="PackedScene" uid="uid://bimrljk1rn7af" path="res://scenes/UI/SubsceneUI.tscn" id="3_gacct"] -[ext_resource type="PackedScene" uid="uid://bfioi52hjn2kf" path="res://scenes/UI/QuestMenu.tscn" id="3_puia7"] [node name="Overworld" type="Node3D"] script = ExtResource("1_rfscu") [node name="Some-map" parent="." instance=ExtResource("2_puia7")] - -[node name="SubsceneUI" parent="." instance=ExtResource("3_gacct")] - -[node name="QuestMenu" parent="SubsceneUI" instance=ExtResource("3_puia7")] -layout_mode = 1 diff --git a/scenes/Singletons/UI.tscn b/scenes/Singletons/UI.tscn index 75c6648..3658f3a 100644 --- a/scenes/Singletons/UI.tscn +++ b/scenes/Singletons/UI.tscn @@ -17,9 +17,7 @@ script = ExtResource("1_g3au4") metadata/_custom_type_script = "uid://dahhuhiu8u88b" [node name="QuestMenu" parent="." instance=ExtResource("2_mpokx")] -visible = false -layout_mode = 0 -anchors_preset = 0 +layout_mode = 1 [node name="VNTextbox" parent="." instance=ExtResource("3_btpxp")] visible = false diff --git a/scenes/UI/DebugMenu.tscn b/scenes/UI/DebugMenu.tscn index abc7c07..da81547 100644 --- a/scenes/UI/DebugMenu.tscn +++ b/scenes/UI/DebugMenu.tscn @@ -27,7 +27,6 @@ layout_mode = 2 [node name="Quests" type="Button" parent="."] layout_mode = 2 -disabled = true text = "Prototype Quests " diff --git a/scenes/UI/QuestMenu.tscn b/scenes/UI/QuestMenu.tscn index 8622454..b24c8fe 100644 --- a/scenes/UI/QuestMenu.tscn +++ b/scenes/UI/QuestMenu.tscn @@ -2,13 +2,16 @@ [ext_resource type="Script" uid="uid://cbsrw36kkucje" path="res://scripts/UI/QuestMenu.gd" id="1_a7vj2"] -[node name="QuestMenu" type="Panel"] +[node name="QuestMenu" type="Panel" node_paths=PackedStringArray("questList", "questName")] anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_a7vj2") +questList = NodePath("VBoxContainer/HBoxContainer/QuestList") +questName = NodePath("VBoxContainer/HBoxContainer/Control/VBoxContainer/QuestName") +metadata/_custom_type_script = "uid://cbsrw36kkucje" [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 1 @@ -26,7 +29,7 @@ text = "Quests" layout_mode = 2 size_flags_vertical = 3 -[node name="ItemList" type="ItemList" parent="VBoxContainer/HBoxContainer"] +[node name="QuestList" type="ItemList" parent="VBoxContainer/HBoxContainer"] custom_minimum_size = Vector2(250, 0) layout_mode = 2 size_flags_horizontal = 0 @@ -38,3 +41,15 @@ item_1/text = "Quest Name 2" [node name="Control" type="Control" parent="VBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HBoxContainer/Control"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="QuestName" type="Label" parent="VBoxContainer/HBoxContainer/Control/VBoxContainer"] +layout_mode = 2 +text = "QuestName" diff --git a/scripts/Event/Event.gd b/scripts/Event/Event.gd index 4c75019..c6df206 100644 --- a/scripts/Event/Event.gd +++ b/scripts/Event/Event.gd @@ -25,7 +25,7 @@ func start() -> void: assert(started == false) started = true -func update(delta:float) -> void: +func update(_delta:float) -> void: assert(started == true) assert(ended == false) diff --git a/scripts/Event/Quest/EventShowQuest.gd b/scripts/Event/Quest/EventShowQuest.gd new file mode 100644 index 0000000..a9103e3 --- /dev/null +++ b/scripts/Event/Quest/EventShowQuest.gd @@ -0,0 +1,17 @@ +class_name EventShowQuest extends "res://scripts/Event/Event.gd" + +@export var quest:QuestSystem.QuestKey = QuestSystem.QuestKey.TEST_QUEST +@export var waitUntilClosed:bool = true + +func start(): + UI.showQuestsMenu(quest) + pass + +func isDone() -> bool: + if !super.isDone(): + return false + + if waitUntilClosed: + return false + + return true \ No newline at end of file diff --git a/scripts/Event/Quest/EventShowQuest.gd.uid b/scripts/Event/Quest/EventShowQuest.gd.uid new file mode 100644 index 0000000..fc58dd8 --- /dev/null +++ b/scripts/Event/Quest/EventShowQuest.gd.uid @@ -0,0 +1 @@ +uid://dd6ppw243a5x7 diff --git a/scripts/Quest/Quest.gd b/scripts/Quest/Quest.gd index 62242c6..53001aa 100644 --- a/scripts/Quest/Quest.gd +++ b/scripts/Quest/Quest.gd @@ -1,3 +1,4 @@ class_name Quest extends Node -@export var questName:String = "Some quest" \ No newline at end of file +@export var questName:String = "Some quest" +@export var questKey:QuestSystem.QuestKey = QuestSystem.QuestKey.TEST_QUEST diff --git a/scripts/Singleton/Quest.gd b/scripts/Singleton/Quest.gd index e4b4381..45aa18a 100644 --- a/scripts/Singleton/Quest.gd +++ b/scripts/Singleton/Quest.gd @@ -1,13 +1,21 @@ class_name QuestSystem extends Node -var quests:Array[Quest] +enum QuestKey { + TEST_QUEST +}; + +var quests:Dictionary[int, Quest] func _ready() -> void: _updateQuests() - pass - + func _updateQuests() -> void: - quests = [] + quests = {} for quest in $Quests.get_children(): if quest is Quest: - quests.append(quest) \ No newline at end of file + if quests.has(quest.questKey): + assert(false, "Quest with key %s already exists" % quest.questKey) + quests[quest.questKey] = quest + + for quest in QuestKey: + assert(quests.has(QuestKey[quest]), "Quest with key %s does not exist" % quest) diff --git a/scripts/Singleton/UI.gd b/scripts/Singleton/UI.gd index f7db01a..636fdb8 100644 --- a/scripts/Singleton/UI.gd +++ b/scripts/Singleton/UI.gd @@ -3,3 +3,7 @@ class_name UISystem extends Control func _process(delta: float) -> void: # This needs to always be at the end of the parent node's tree get_parent().move_child(self, get_parent().get_child_count() - 1) + +func showQuestsMenu(questKey = null) -> void: + $QuestMenu.setQuest(questKey) + $QuestMenu.show() diff --git a/scripts/UI/DebugMenu.gd b/scripts/UI/DebugMenu.gd index 4134503..3204560 100644 --- a/scripts/UI/DebugMenu.gd +++ b/scripts/UI/DebugMenu.gd @@ -1,7 +1,7 @@ class_name DebugMenu extends VBoxContainer func _ready() -> void: - hide() + show() $MainMenu.connect("pressed", _on_MainMenu_pressed); $OverworldOption/Overworld.connect("pressed", _on_Overworld_pressed); @@ -34,7 +34,7 @@ func _on_Overworld_pressed(): hide() func _on_Quests_pressed(): - print("Quests pressed") + UI.showQuestsMenu() func _on_Custscene_pressed(): print("Cutscene pressed") diff --git a/scripts/UI/QuestMenu.gd b/scripts/UI/QuestMenu.gd index abea60a..3f6acc5 100644 --- a/scripts/UI/QuestMenu.gd +++ b/scripts/UI/QuestMenu.gd @@ -1,6 +1,31 @@ -class_name QuestMenu extends Control +class_name QuestMenu extends Panel + +@export var questList:ItemList +@export var questName:Label func _ready() -> void: - $VBoxContainer/HBoxContainer/ItemList.clear() - for quest in QUEST.quests: - $VBoxContainer/HBoxContainer/ItemList.add_item(quest.questName) + hide() + + # Setup quests + questList.clear() + for questKey in QUEST.quests: + var q = QUEST.quests[questKey] + questList.add_item(q.questName) + + # Connect signals + questList.item_selected.connect(_onQuestSelected) + +func _onQuestSelected(index:int) -> void: + setQuest(index) + pass + +func setQuest(questKey = null): + if questKey == null: + questList.deselect_all() + return + + assert(QUEST.quests.has(questKey), "Quest with key %s does not exist" % questKey) + var quest = QUEST.quests[questKey]; + questList.select(questKey) + questName.text = quest.questName + pass diff --git a/shaders/NPC Shader.gdshader b/shaders/NPC Shader.gdshader index 208cbff..2bd281f 100644 --- a/shaders/NPC Shader.gdshader +++ b/shaders/NPC Shader.gdshader @@ -30,7 +30,7 @@ void vertex() { void fragment() { vec4 npcColor = texture(npcTexture, UV); - + if(npcColor.a == 0.0) discard;