Quests - UQcsse3200/2024-studio-2 GitHub Wiki
Table of Contents:
- Overview
- Quest List
- Quest Structure
- Sequence Diagrams
- Example Usage
- Test Plans
- UML Diagrams
- Class Descriptions
- References
Overview:
The quest system in the game is designed to provide the players with engaging quests and tasks in order to progress through the game. The quests are integrated into the gameplay, offering a dynamic and immersive experience. Here’s an overview of how the quest system is structured:
- Tasks: the list of actions that must be undertaken to progress in a quest.
- AbstractQuest: abstract class with variables and methods to supply information about quests, including a list of tasks that can be undertaken in no particular order that upon completion of all tasks will unlock an achievement and mark the quest as complete.
- Quest: a basic quest class that implements AbstractQuest, using all provided methods.
- QuestBuilder: a builder class for the quest, wrapping the private constructor.
- QuestManager: the controller class that keeps track of quest progression, completion, dialogue and hints, in relation to NPCs, the quest menu and listening for global events (for task names). This will be updated in later sprints to apply rewards upon quest completion.
- DialogueKeys: are map NPCs and quest progression (number of tasks completed) to dialogue arrays (designed to assist players in the progression of quest (through introductory/explanatory messages including quest task hints).
- QuestDisplay: the UI for the quest menu accessed through the pause menu (pressing 'esc' mid-game) or through the quest screen (pressing 'q' mid-game).
- QuestPopup: the UI that prints 'Quest Completed' to the game screen when a quest has been completed.
- QuestOverlay: Represents an overlay that displays quest-related information. (Further detailed information can be found here -> Overlays
- QuestHidden: a stripped back QuestBasic that keeps track only of quest name, quest description, and completion status
- AchievementDisplay: Display that contains all of the UI elements of the achievements page Logbook Achievements
- AchievementPopup: UI element on the screen that displays whenever an achievement is completed
- AchievementManager: Manages the achievements in the game by loading them from a config file
- LogButton: A custom button class for Log
- TabButton: Constructs a new tabButton with the specified text, skin, and background image.
Quest list (at the end of sprint 4)
The quests at the end of sprint 3 are are finalised and work in the form of triggers and integration with other teams. Throughout the project, these quests will be developed in accordance with the design document found at: Quest Design Principles. There are an overall amount of 15 quests. The 15 quests that are playable in the game at the end of the sprint are:
- Guide's Intro
- Guide's Request
- Defeat Chickens
- Play Snake
- Defeat Kangaroo
- Talk to Tilly
- Sea Pearl Collection
- Defeat Frogs
- Play Flappy Game
- Defeat Leviathan
- Talk to Eagle
- Gathering Sky Crystals
- Defeat Bees
- Underwater Challenge
Quest Structure:
Each quest consists of:
Objectives: Specific tasks that need to be completed to progress.
Tasks: Individual tasks that must be accomplished as part of the quest.
Hints: Provided through the quest display (through the pause menu opened by pressing 'esc' key or pressing 'q').
Dialogue: String arrays to be given to players by NPCs through dialogue boxes to aid players in completing objectives.
Completion Criteria: Conditions that must be met for the quest to be considered complete i.e. tasks and triggers.
Sequence diagrams
Quest progression
Combat and item collection tasks
Talk to guide tasks progression
Example usage:
Tasks
Tasks are initialized like:
Task talkToWaterSage = new Task(
"talkToWaterSage",
"Talk to the Water Sage",
"Speak with the Water Sage to gain their trust and begin your quest.",
1, 0, false, false
);
DialogueKey
To set up dialogue string arrays, e.g.:
String[][] defeatWaterBossDialogue = {
{"When you’re prepared, confront the Sky Seraph in an epic battle!"}
};
To map up NPC character dialogue for test tasks to the dialogue string arrays:
dialogues.add(new DialogueKey("Cow", cowInitialDialogue));
Quest (extents AbstractQuest)
To initialise a basic quest with the values of your choice:
quest = new QuestBasic("First Steps", "Take your first steps in this world!", List.of(stepsTask), false, null, null, true, false, 0, null);
QuestManager (extends Component)
Managing dialogue:
List<DialogueKey> dialogues = new ArrayList<>();
dialogues.add(new DialogueKey("Cow", cowInitialDialogue));
return dialogues;
Completing and updating quests:
if (questManager.isQuestComplete("Final Boss")) {
questManager.triggerFinalBoss();
}
questManager.updateQuestDisplay();
QuestDisplay
How to create a new instance of QuestDisplay:
QuestDisplay questDisplay = new QuestDisplay();
How to initialise and create the display:
questDisplay.create();
QuestPopup
How to create an instance of QuestPopup:
QuestPopup questPopup = new QuestPopup();
Initialise the popup UI component:
questPopup.create();
How to update and draw:
questPopup.update();
questPopup.draw(new SpriteBatch());
Achievements
Making an achievement:
Achievement achievement = new Achievement("Test Achievement", "Achievement Description");
Adding an achievement to the achievements page: In AchievementsDisplay, makeAchievementsTable()
Label achievementName = new Label("Test Achievement", skin);
Label achievementDescription = new Label("Lorem ipsum", skin);
table.add(achievementName);
Using a new AchievementPopup:
AchievementPopup popup = new AchievementPopup();
...
// in PlayerFactory, or a derivative
Player.addComponent(popup);
Testing plan:
The testing plan is as follow:
Creation: Ensure quests are created with accurate objectives and tasks.
Progression: Verify that quests progress correctly through task completions.
Completion: Test that quests are marked as complete when all criteria are met, not report false completions.
Interactions: Check that NPC interactions and dialogue boxes function as expected.
Wiki links:
The display, overlays and achievements were visually tested in the form of YouTube videos (p.s. if you are a tutor, please see team 5's sprint achievement forms)
For sprint 4:
- Final quest progression testing https://youtu.be/DDDbIbeuz94 - event driven in game of:
- Mini game quest progression triggers (upon ‘play game’ button press while talking to snake NPC)
- Final boss summoning after mini game completion
- Final boss defeat triggering quest progression to next biome (if applicable)
- new QuestPopup https://youtu.be/Me5CHrAsVWw
- new AchievementPopup https://youtu.be/TbgDi1lY1uE
UML Diagram:
This UML diagram represents an overview of the Quests system in the game, detailing their structure and interactions within the project.
Note: the green unlock symbol means public, the orange key means protected and the red lock means private.
the little hats on the (f) means final variable and, the star on the (f) means static variable
Class Descriptions:
* com.csse3200.game.components.AbstractQuest
* com.csse3200.game.components.DialogueKey
* com.csse3200.game.components.Quest
* com.csse3200.game.components.QuestManager
* com.csse3200.game.components.QuestPopup
* com.csse3200.game.components.Task
* com.csse3200.game.components.QuestDisplay
* com.csse3200.game.components.QuestOverlay
* com.csse3200.game.components.QuestHidden
* com.csse3200.game.components.AchievementDisplay
* com.csse3200.game.components.AchievementPopup
* com.csse3200.game.components.AchievementManager
* com.csse3200.game.components.TabButton
* com.csse3200.game.components.LogButton
Package: com.csse3200.game.components.quests;
This package contains all the classes for quests in the game.
Quest : An abstract Quest class that contains the design for Quest classes that store quest and subtask progression (# of subtasks completed), descriptions and hints.
Attributes:
quest Name
The name of the quest.questDescription
A description of the task.tasks
taskArray indexing corresponds to number of tests completed and each entry consists of the task to be completed during this step.isAchievement
True if quest achievement has been unlocked.isSecretQuest
True if the quest is hidden (possible xp and levels).isActive
True if quest is active (not completed or failed).questDialogue
questDialogue is a list that relatesDialogueKey(String npcName, Integer ProgressionLevel) to a dialogue map relevant to the npctaskCompletionTriggers
Triggers for task completion.currentTaskIndex
Number of tasks completed for current quest.
Methods:
getQuestName()
Returns quest name.getTasks()
Returns task array for quest subtasks.isQuestCompleted()
Returns true if quest is completed.getProgression()
Returns number of quest subtasks completed.getCurrentTaskDescription()
Returns the description of the current subtask being completed for a test or "QUEST COMPLETED" if the quest is completed.getCurrentTaskHint()
Returns the hint for the current subtask being completed for a test or "QUEST COMPLETED" if the quest is completed.progressQuest()
Progress (increments) number of quest subtasks completed.isFailed()
Returns true if quest is failed.failQuest()
Earmarks quest as having failed.getQuestDescription()
Returns a description of the quest.getNumTasksToComplete()
Returns the number of tasks to be completed for an individual test.getNumQuestTasks()
Returns the number of tasks for a quest.isAchievement()
Returns true if quest achievement has been unlocked.isSecret()
Returns true if the quest is secret (e.g. progression, XP, etc).isActive()
Returns true if the quest is active.setActive()
Sets the quest to an active status.getQuestDialogue()
Returns the dialogue associated with the quest.getFollowQuests
Return the next following quest.
Task: Handles the tasks for each quest.
Attributes:
taskName
The name of the task.description
A description of what the task involves.hint
A hint related to completing the task.requiredTriggers
The number of triggers required to complete task.triggerCount
Number of times a task has been triggered.completed
True if the task is completed.failed
True if the task has failed.
Methods:
getTaskName()
Returns the task name.getDescription()
Returns the description for tasks.getHint()
Returns the hint for tasks.isCompleted()
Checks if quest is completed.getTriggerCount()
Returns how many times task is triggered.getRequiredTriggers()
Returns the number of triggers required to complete this task.isFailed()
Checks if task is failed.failTask()
Marks the task as failed.handleEvent()
Handles an event related to the task.
QuestManager (extends component): Manages, tracks and updates the quests within the game. Handles the storage and retrieval of quests and integrates with the event system.
Attributes:
quests
Map to store quests.logger
Logger for logging quest related attributes.questComplete
Sound effect for quest completion.relevantQuests
Map of relevant quests. As of Sprint 1 the String[] should contain only one quest as only one is accessed.achievements
Array to store achievements.questComplete
Sound effect for quest completion.achievementComplete
Sound effect for achievement completion.player
The player Entity.
Methods:
-
createQuestDialogues()
Sets up the dialogue for quests and NPC integration. -
setupItemCollectionsTask()
Setup item collection task listener. -
setupAchievements()
Setup achievements task listener. -
handleMiniGameAdvancement()
Subscribes to mini game triggers and sends it as a specific achievement completion trigger. -
handleEnemyAdvancement()
Subscribes to enemy beaten triggers and sends it as a specific achievement completion trigger. -
handleItemAdvancement()
Subscribes to item triggers and sends it as a specific achievement completion trigger. -
handleEnemyQuest()
Setup enemy task listener. -
addQuests(Task[] tasks, Map<DialogueKey, String[]> guideQuestDialogues)
Adds quests to the games quest list. -
subscribeToQuestEvents(QuestBasic quest)
Subscribes to event notifications for tasks quest. -
subscribeToAchievementEvents(QuestBasic quest)
Adds a listener for the achievement, which completes the achievement when triggered. -
addQuest(QuestBasic quest)
Adds a new quest to the manager. -
loadQuest()
Automatically loads and registers all of the quests stored in GameState. -
getAllQuests()
Gets a list of all quests in QuestManager. -
getQuest(String questName)
Returns a quest by name. -
failQuest(String questName)
Checks if quest is failed. -
progressQuest(String questName, String taskName)
Progresses the quest based on completion and updates the quest status. -
canProgressQuest(QuestBasic quest, String taskName)
Determines if a quest can be progressed based on its current state and the provided task name. -
getActiveQuests()
Gets the list of active quests. -
completeAchievement()
Completes the achievement by changing the state of the achievement and triggering an achievement popup -
completeTask(QuestBasic quest)
Completes the task of the updates the quest progression. -
handleQuestCompletion(QuestBasic quest)
Handle quest completion.
QuestPopup (extended Component) : popup UI that displays a popup message when a quest is completed.
Attributes:
showing
Flag to see if popup is displayingquestCompleted
Label for quest completion.fontScale
Scale of font size.questDetails
Label for quest details.
Methods:
addActors()
Adds the listener for the label to trigger the popup.create()
Initializes the component and adds event listener.showQuestCompletedPopup()
Displays the label popup and draws it.draw(SpriteBatch batch)
Draws the popup message and creates label.
QuestBuilder: A builder class for the quest, wrapping the private constructor.
Attributes:
name:
The name of the quest.description:
A description of the quest (default is an empty string).tasks:
A list of tasks associated with the quest.dialogueKeys:
A list of dialogue keys linked to the quest.triggers:
A list of triggers that activate the quest.active:
A boolean indicating whether the quest is currently active (default is false).failed:
A boolean indicating whether the quest has failed (default is false).index:
An integer representing the current task index (default is 0).follow:
A list of prerequisite quests that must be completed before this quest.
Methods:
QuestBuilder setDescription():
Sets the description of the quest and returns this QuestBuilder instance for method chaining.QuestBuilder addTask():
Adds a task to the quest and returns this QuestBuilder instance for method chaining.QuestBuilder addDialogueKey():
Adds a dialogue key to the quest and returns this QuestBuilder instance for method chaining.QuestBuilder addTrigger():
Adds a trigger to the quest and returns this QuestBuilder instance for method chaining.QuestBuilder setActive():
Sets the active state of the quest and returns this QuestBuilder instance for method chaining.QuestBuilder setIndex():
Sets the task index of the quest and returns this QuestBuilder instance for method chaining.QuestBuilder addFollowQuest():
Adds a prerequisite quest to the quest and returns this QuestBuilder instance for method chaining.QuestBuilder setFailed():
Sets the failed state of the quest and returns this QuestBuilder instance for me
AchievementDisplay: Display that contains all of the UI elements of the achievements page
Attributes:
logger
Logs processes for debugging purposesgame
The gamerootTable
The libgdx table that contains every UI element on the achievements page
Methods:
create
Create the page and populate it with UI elementsaddActors
add UI elements to the pagemakeAchievementsTable
Create and populate the UI element containing every achievementmakeMenuBtns
Create the menu buttons, mainly the exit buttonexitMenu
Go back to the main menudispose
dispose of the page These diagrams help to visualise the design and interactions between the quest management, tasks and UI elements in the game.
AchievementPopup: UI element that pops up on the game screen whenever an achievement is completed
Attributes:
showing
Flag indicating whether the popup is showing or not.popup
The image of the popup.
Methods:
create()
Initializes the class, adds a listener for achievement completion.showPopup()
Show the popup on the screen and save the completed achievement's status.draw()
Draws the popup, handled by the stage.generate()
Creates the popup and positions it on the screen.dispose()
Disposes of the popup.
AchievementManager: Manages the achievements in the game by loading them from a config file.
Attributes:
achievements
The list of achievements.
Methods:
getAchievements()
Returns the current save (list of all achievements).saveAchievements()
Saves the provided list of achievements to the save 'saves/achievements.json'.
Achievement: Represents an achievement.
Attributes:
questName
Gets the quest names.questDescription
Gets the quest descriptions.completed
Flag to check if completed.seen
Flag to check if seen.type
Checks the achievement type.iconPath
Gets icon path.
Methods:
getQuestName()
Returns the quest's name as a String.getQuestDescription()
Returns the quest's description as a String.isCompleted()
Checks if the achievement has been completed; returns true if completed, false otherwise.complete()
Marks the achievement as completed.isSeen()
Checks if the achievement has been seen; returns true if seen, false otherwise.setSeen()
Marks the achievement as seen.getType()
Returns the achievement type.getPath()
Returns the file path to the achievement's icon.toString()
Returns a string representation of the achievement.
Package: com.csse3200.game.Overlays;
This UML diagram represents an overview of the Overlays classes in the game, detailing their structure and interactions within the project.
Note: the green unlock symbol means public, the orange key means protected and the red lock means private.
the little hats on the (f) means final variable and, the star on the (f) means static variable
For further information regarding the UML diagram please checkout Overlays Wiki Page -> Overlays
The UML diagrams showcase the connections throughout the packages and overlay quests.
References:
- Sonar cloud was used for testing purposes for the
com.csse3200.game.components.quests
package while thecom.csse3200.game.Overlays
package was visually tested, along with all the methods that were not visually tested in thecom.csse3200.game.components.quests
package.
Quest Structure:
Each quest consists of:
Objectives: Specific tasks that need to be completed to progress.
Tasks: Individual tasks that must be accomplished as part of the quest.
Hints: Provided through the quest display (through the pause menu opened by pressing 'esc' key or pressing 'q').
Dialogue: String arrays to be given to players by NPCs through dialogue boxes to aid players in completing objectives.
Completion Criteria: Conditions that must be met for the quest to be considered complete i.e. tasks and triggers.
Sequence diagrams
Quest progression
Player input
Talk to guide tasks progression
Example usage:
Tasks
Tasks are initialized like:
Task talkToWaterSage = new Task(
"talkToWaterSage",
"Talk to the Water Sage",
"Speak with the Water Sage to gain their trust and begin your quest.",
1, 0, false, false
);
DialogueKey
To set up dialogue string arrays, e.g.:
String[][] defeatWaterBossDialogue = {
{"When you’re prepared, confront the Sky Seraph in an epic battle!"}
};
To map up NPC character dialogue for test tasks to the dialogue string arrays:
dialogues.add(new DialogueKey("Cow", cowInitialDialogue));
Quest (extents AbstractQuest)
To initialise a basic quest with the values of your choice:
quest = new QuestBasic("First Steps", "Take your first steps in this world!", List.of(stepsTask), false, null, null, true, false, 0, null);
QuestManager (extends Component)
Managing dialogue:
List<DialogueKey> dialogues = new ArrayList<>();
dialogues.add(new DialogueKey("Cow", cowInitialDialogue));
return dialogues;
Completing and updating quests:
if (questManager.isQuestComplete("Final Boss")) {
questManager.triggerFinalBoss();
}
questManager.updateQuestDisplay();
QuestDisplay
How to create a new instance of QuestDisplay:
QuestDisplay questDisplay = new QuestDisplay();
How to initialise and create the display:
questDisplay.create();
QuestPopup
How to create an instance of QuestPopup:
QuestPopup questPopup = new QuestPopup();
Initialise the popup UI component:
questPopup.create();
How to update and draw:
questPopup.update();
questPopup.draw(new SpriteBatch());
Achievements
Making an achievement:
Achievement achievement = new Achievement("Test Achievement", "Achievement Description");
Adding an achievement to the achievements page: In AchievementsDisplay, makeAchievementsTable()
Label achievementName = new Label("Test Achievement", skin);
Label achievementDescription = new Label("Lorem ipsum", skin);
table.add(achievementName);
Using a new AchievementPopup:
AchievementPopup popup = new AchievementPopup();
...
// in PlayerFactory, or a derivative
Player.addComponent(popup);
Testing plan:
The testing plan is as follow:
Creation: Ensure quests are created with accurate objectives and tasks.
Progression: Verify that quests progress correctly through task completions.
Completion: Test that quests are marked as complete when all criteria are met, not report false completions.
Interactions: Check that NPC interactions and dialogue boxes function as expected.
Wiki links:
The display, overlays and achievements were visually tested in the form of YouTube videos (p.s. if you are a tutor, please see team 5's sprint achievement forms)
UML Diagram:
This UML diagram represents an overview of the Quests system in the game, detailing their structure and interactions within the project.
Note: the green unlock symbol means public, the orange key means protected and the red lock means private.
the little hats on the (f) means final variable and, the star on the (f) means static variable
Class Descriptions:
* com.csse3200.game.components.AbstractQuest
* com.csse3200.game.components.DialogueKey
* com.csse3200.game.components.Quest
* com.csse3200.game.components.QuestManager
* com.csse3200.game.components.QuestPopup
* com.csse3200.game.components.Task
* com.csse3200.game.components.QuestDisplay
* com.csse3200.game.components.QuestOverlay
* com.csse3200.game.components.QuestHidden
* com.csse3200.game.components.AchievementDisplay
* com.csse3200.game.components.AchievementPopup
* com.csse3200.game.components.AchievementManager
* com.csse3200.game.components.TabButton
* com.csse3200.game.components.LogButton
Package: com.csse3200.game.components.quests;
This package contains all the classes for quests in the game.
Quest : An abstract Quest class that contains the design for Quest classes that store quest and subtask progression (# of subtasks completed), descriptions and hints.
Attributes:
quest Name
The name of the quest.questDescription
A description of the task.tasks
taskArray indexing corresponds to number of tests completed and each entry consists of the task to be completed during this step.isAchievement
True if quest achievement has been unlocked.isSecretQuest
True if the quest is hidden (possible xp and levels).isActive
True if quest is active (not completed or failed).questDialogue
questDialogue is a list that relatesDialogueKey(String npcName, Integer ProgressionLevel) to a dialogue map relevant to the npctaskCompletionTriggers
Triggers for task completion.currentTaskIndex
Number of tasks completed for current quest.
Methods:
getQuestName()
Returns quest name.getTasks()
Returns task array for quest subtasks.isQuestCompleted()
Returns true if quest is completed.getProgression()
Returns number of quest subtasks completed.getCurrentTaskDescription()
Returns the description of the current subtask being completed for a test or "QUEST COMPLETED" if the quest is completed.getCurrentTaskHint()
Returns the hint for the current subtask being completed for a test or "QUEST COMPLETED" if the quest is completed.progressQuest()
Progress (increments) number of quest subtasks completed.isFailed()
Returns true if quest is failed.failQuest()
Earmarks quest as having failed.getQuestDescription()
Returns a description of the quest.getNumTasksToComplete()
Returns the number of tasks to be completed for an individual test.getNumQuestTasks()
Returns the number of tasks for a quest.isAchievement()
Returns true if quest achievement has been unlocked.isSecret()
Returns true if the quest is secret (e.g. progression, XP, etc).isActive()
Returns true if the quest is active.setActive()
Sets the quest to an active status.getQuestDialogue()
Returns the dialogue associated with the quest.getFollowQuests
Return the next following quest.
Task: Handles the tasks for each quest.
Attributes:
taskName
The name of the task.description
A description of what the task involves.hint
A hint related to completing the task.requiredTriggers
The number of triggers required to complete task.triggerCount
Number of times a task has been triggered.completed
True if the task is completed.failed
True if the task has failed.
Methods:
getTaskName()
Returns the task name.getDescription()
Returns the description for tasks.getHint()
Returns the hint for tasks.isCompleted()
Checks if quest is completed.getTriggerCount()
Returns how many times task is triggered.getRequiredTriggers()
Returns the number of triggers required to complete this task.isFailed()
Checks if task is failed.failTask()
Marks the task as failed.handleEvent()
Handles an event related to the task.
QuestManager (extends component): Manages, tracks and updates the quests within the game. Handles the storage and retrieval of quests and integrates with the event system.
Attributes:
quests
Map to store quests.logger
Logger for logging quest related attributes.questComplete
Sound effect for quest completion.relevantQuests
Map of relevant quests. As of Sprint 1 the String[] should contain only one quest as only one is accessed.achievements
Array to store achievements.questComplete
Sound effect for quest completion.achievementComplete
Sound effect for achievement completion.player
The player Entity.
Methods:
-
createQuestDialogues()
Sets up the dialogue for quests and NPC integration. -
setupItemCollectionsTask()
Setup item collection task listener. -
setupAchievements()
Setup achievements task listener. -
handleMiniGameAdvancement()
Subscribes to mini game triggers and sends it as a specific achievement completion trigger. -
handleEnemyAdvancement()
Subscribes to enemy beaten triggers and sends it as a specific achievement completion trigger. -
handleItemAdvancement()
Subscribes to item triggers and sends it as a specific achievement completion trigger. -
handleEnemyQuest()
Setup enemy task listener. -
addQuests(Task[] tasks, Map<DialogueKey, String[]> guideQuestDialogues)
Adds quests to the games quest list. -
subscribeToQuestEvents(QuestBasic quest)
Subscribes to event notifications for tasks quest. -
subscribeToAchievementEvents(QuestBasic quest)
Adds a listener for the achievement, which completes the achievement when triggered. -
addQuest(QuestBasic quest)
Adds a new quest to the manager. -
loadQuest()
Automatically loads and registers all of the quests stored in GameState. -
getAllQuests()
Gets a list of all quests in QuestManager. -
getQuest(String questName)
Returns a quest by name. -
failQuest(String questName)
Checks if quest is failed. -
progressQuest(String questName, String taskName)
Progresses the quest based on completion and updates the quest status. -
canProgressQuest(QuestBasic quest, String taskName)
Determines if a quest can be progressed based on its current state and the provided task name. -
getActiveQuests()
Gets the list of active quests. -
completeAchievement()
Completes the achievement by changing the state of the achievement and triggering an achievement popup -
completeTask(QuestBasic quest)
Completes the task of the updates the quest progression. -
handleQuestCompletion(QuestBasic quest)
Handle quest completion.
QuestPopup (extended Component) : popup UI that displays a popup message when a quest is completed.
Attributes:
showing
Flag to see if popup is displayingquestCompleted
Label for quest completion.fontScale
Scale of font size.questDetails
Label for quest details.
Methods:
addActors()
Adds the listener for the label to trigger the popup.create()
Initializes the component and adds event listener.showQuestCompletedPopup()
Displays the label popup and draws it.draw(SpriteBatch batch)
Draws the popup message and creates label.
QuestBuilder: A builder class for the quest, wrapping the private constructor.
Attributes:
name:
The name of the quest.description:
A description of the quest (default is an empty string).tasks:
A list of tasks associated with the quest.dialogueKeys:
A list of dialogue keys linked to the quest.triggers:
A list of triggers that activate the quest.active:
A boolean indicating whether the quest is currently active (default is false).failed:
A boolean indicating whether the quest has failed (default is false).index:
An integer representing the current task index (default is 0).follow:
A list of prerequisite quests that must be completed before this quest.
Methods:
QuestBuilder setDescription():
Sets the description of the quest and returns this QuestBuilder instance for method chaining.QuestBuilder addTask():
Adds a task to the quest and returns this QuestBuilder instance for method chaining.QuestBuilder addDialogueKey():
Adds a dialogue key to the quest and returns this QuestBuilder instance for method chaining.QuestBuilder addTrigger():
Adds a trigger to the quest and returns this QuestBuilder instance for method chaining.QuestBuilder setActive():
Sets the active state of the quest and returns this QuestBuilder instance for method chaining.QuestBuilder setIndex():
Sets the task index of the quest and returns this QuestBuilder instance for method chaining.QuestBuilder addFollowQuest():
Adds a prerequisite quest to the quest and returns this QuestBuilder instance for method chaining.QuestBuilder setFailed():
Sets the failed state of the quest and returns this QuestBuilder instance for me
AchievementDisplay: Display that contains all of the UI elements of the achievements page
Attributes:
logger
Logs processes for debugging purposesgame
The gamerootTable
The libgdx table that contains every UI element on the achievements page
Methods:
create
Create the page and populate it with UI elementsaddActors
add UI elements to the pagemakeAchievementsTable
Create and populate the UI element containing every achievementmakeMenuBtns
Create the menu buttons, mainly the exit buttonexitMenu
Go back to the main menudispose
dispose of the page These diagrams help to visualise the design and interactions between the quest management, tasks and UI elements in the game.
AchievementPopup: UI element that pops up on the game screen whenever an achievement is completed
Attributes:
showing
Flag indicating whether the popup is showing or not.popup
The image of the popup.
Methods:
create()
Initializes the class, adds a listener for achievement completion.showPopup()
Show the popup on the screen and save the completed achievement's status.draw()
Draws the popup, handled by the stage.generate()
Creates the popup and positions it on the screen.dispose()
Disposes of the popup.
AchievementManager: Manages the achievements in the game by loading them from a config file.
Attributes:
achievements
The list of achievements.
Methods:
getAchievements()
Returns the current save (list of all achievements).saveAchievements()
Saves the provided list of achievements to the save 'saves/achievements.json'.
Achievement: Represents an achievement.
Attributes:
questName
Gets the quest names.questDescription
Gets the quest descriptions.completed
Flag to check if completed.seen
Flag to check if seen.type
Checks the achievement type.iconPath
Gets icon path.
Methods:
getQuestName()
Returns the quest's name as a String.getQuestDescription()
Returns the quest's description as a String.isCompleted()
Checks if the achievement has been completed; returns true if completed, false otherwise.complete()
Marks the achievement as completed.isSeen()
Checks if the achievement has been seen; returns true if seen, false otherwise.setSeen()
Marks the achievement as seen.getType()
Returns the achievement type.getPath()
Returns the file path to the achievement's icon.toString()
Returns a string representation of the achievement.
Package: com.csse3200.game.Overlays;
This UML diagram represents an overview of the Overlays classes in the game, detailing their structure and interactions within the project.
Note: the green unlock symbol means public, the orange key means protected and the red lock means private.
the little hats on the (f) means final variable and, the star on the (f) means static variable
For further information regarding the UML diagram please checkout Overlays Wiki Page -> Overlays
The UML diagrams showcase the connections throughout the packages and overlay quests.
References:
- Sonar cloud was used for testing purposes for the
com.csse3200.game.components.quests
package while thecom.csse3200.game.Overlays
package was visually tested, along with all the methods that were not visually tested in thecom.csse3200.game.components.quests
package.