Progress.gd 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. extends WindowPanel
  2. # Control accessors
  3. @onready var activeQuestContainer : Container = $Margin/TabBar/QuestLog/QuestScroll/QuestList/Active
  4. @onready var completedQuestContainer : Container = $Margin/TabBar/QuestLog/QuestScroll/QuestList/Completed
  5. @onready var questSeparator : Separator = $Margin/TabBar/QuestLog/QuestScroll/QuestList/HSeparator
  6. @onready var questDescription : RichTextLabel = $Margin/TabBar/QuestLog/Description
  7. @onready var bestiaryContainer : Container = $Margin/TabBar/Manapedia/BestiaryList/Monsters
  8. @onready var bestiaryLabel : RichTextLabel = $Margin/TabBar/Manapedia/BestiaryList/BestiaryLabel
  9. # Quest variables
  10. var quests : Dictionary[int, MenuLine] = {}
  11. var activeQuests : Dictionary[int, bool] = {}
  12. var completedQuests : Dictionary[int, bool] = {}
  13. var currentQuest : int = DB.UnknownHash
  14. # Bestiary variables
  15. var bestiaries : Dictionary[int, MenuLine] = {}
  16. # Common progress functions
  17. func Clear():
  18. for questID in activeQuests.keys():
  19. activeQuestContainer.remove_child.call_deferred(quests[questID])
  20. quests[questID].queue_free()
  21. activeQuests.clear()
  22. for questID in completedQuests.keys():
  23. completedQuestContainer.remove_child.call_deferred(quests[questID])
  24. quests[questID].queue_free()
  25. completedQuests.clear()
  26. quests.clear()
  27. questSeparator.set_visible(false)
  28. questDescription.set_text("")
  29. currentQuest = DB.UnknownHash
  30. for monster in bestiaries.keys():
  31. bestiaryContainer.remove_child.call_deferred(bestiaries[monster])
  32. bestiaries[monster].queue_free()
  33. bestiaries.clear()
  34. bestiaryLabel.set_visible(false)
  35. # Bestiary
  36. func RefreshBestiary(mobID : int, count : int):
  37. var entityData : EntityData = DB.GetEntity(mobID)
  38. if not entityData:
  39. return
  40. var menuLine : MenuLine = bestiaries.get(mobID)
  41. if not menuLine:
  42. menuLine = MenuLine.new(mobID, entityData._name)
  43. menuLine.set_pressed(false)
  44. menuLine.set_disabled(true)
  45. bestiaries[mobID] = menuLine
  46. bestiaryContainer.add_child.call_deferred(menuLine)
  47. menuLine.set_text("%s (%d kill%s)" % [entityData._name, count, "s" if count > 1 else ""])
  48. if not bestiaryLabel.is_visible():
  49. bestiaryLabel.set_visible(true)
  50. # Quest Log
  51. func RefreshQuest(questID : int, state : int):
  52. var questData : QuestData = DB.GetQuest(questID)
  53. if not questData:
  54. return
  55. var isComplete : bool = state == ProgressCommons.CompletedProgress
  56. var menuLine : MenuLine = quests.get(questID)
  57. if not menuLine:
  58. menuLine = MenuLine.new(questID, questData.name)
  59. menuLine.set_pressed(true)
  60. menuLine.line_selected.connect(RefreshQuestDescription)
  61. quests[questID] = menuLine
  62. if isComplete:
  63. if activeQuests.get(questID, false):
  64. activeQuestContainer.remove_child.call_deferred(menuLine)
  65. activeQuests.erase(questID)
  66. if not completedQuests.get(questID, false):
  67. completedQuestContainer.add_child.call_deferred(menuLine)
  68. completedQuests[questID] = true
  69. menuLine.set_text("%s (Completed)" % questData.name)
  70. else:
  71. if completedQuests.get(questID, false):
  72. completedQuestContainer.remove_child.call_deferred(menuLine)
  73. completedQuests.erase(questID)
  74. if not activeQuests.get(questID, false):
  75. activeQuestContainer.add_child.call_deferred(menuLine)
  76. activeQuests[questID] = true
  77. menuLine.set_text("%s" % questData.name)
  78. questSeparator.set_visible(not activeQuests.is_empty() and not completedQuests.is_empty())
  79. menuLine.Enable(not isComplete)
  80. if currentQuest == DB.UnknownHash:
  81. RefreshQuestDescription(questID)
  82. func RefreshQuestDescription(questID : int):
  83. if questID == currentQuest:
  84. return
  85. currentQuest = questID
  86. questDescription.text = "\n"
  87. var questData : QuestData = DB.GetQuest(questID)
  88. if not questData:
  89. return
  90. if not questData.description.is_empty():
  91. questDescription.text += "Description:\n[color=#%s]%s[/color]\n\n" % [UICommons.TextColor.to_html(false), questData.description]
  92. if not questData.giver.is_empty():
  93. questDescription.text += "Giver:\n[color=#%s]%s" % [UICommons.WarnTextColor.to_html(false), questData.giver]
  94. if not questData.giverLocation.is_empty():
  95. questDescription.text += " (%s)" % questData.giverLocation
  96. questDescription.text += "[/color]\n\n"
  97. if not questData.target.is_empty():
  98. questDescription.text += "Target:\n[color=#%s]%s" % [UICommons.WarnTextColor.to_html(false), questData.target]
  99. if not questData.targetLocation.is_empty():
  100. questDescription.text += " (%s)" % questData.targetLocation
  101. questDescription.text += "[/color]\n\n"
  102. if not questData.reward.is_empty():
  103. questDescription.text += "Reward:\n[color=#%s]%s[/color]\n\n" % [UICommons.WarnTextColor.to_html(false), questData.reward]