Diagrams
Overview
Visual diagrams illustrating the internal architecture and runtime behavior of CQUESTUMODULE.
1. Class & Data Hierarchy
Relationships between the quest manager, quest structs, quest steps, enums, delegates, and the Core interfaces.
classDiagram
direction TB
class UCQuestManager {
+TMap~FName, FCQuestStruct~ questMap
+getInstance(AActor*) UCQuestManager*
+createQuest(TMap questMap_)
+clearAll()
+activateAnyQuest()
+proceedWithActorQuestAction()
+proceedWithRoomQuestAction()
}
class ICQuestMaker {
<<interface>>
+proceedWithActorQuestAction()*
+proceedWithRoomQuestAction()*
}
class ICPipeline {
<<interface>>
+doSequentially()*
}
class QuestUtility {
<<static>>
+proceedWithQuestAction(AActor*)$
+proceedWithQuestAction(FCRoomQuestContainer)$
}
class FCQuestStruct {
<<struct>>
+FName questId
+CQuestStatus status
+CQuestInnerStatus questInnerStatus
+FCBP_questCondition questCondition
+TMap~FName, UCQuestStep*~ questStepMap
+TSet~FName~ currentStepSet
}
class UCQuestStep {
+FName questId
+FName questStepId
+CQuestStatus status
+FName thingToInteractWith
+FCBP_questStepActorAction stepActorAction
+FCBP_questStepRoomAction stepRoomAction
}
class CQuestStatus {
<<enum>>
UNSET
FAIL
SUCCESS
}
class CQuestInnerStatus {
<<enum>>
UNSET
ACTIVATED
CLOSED
}
class FCRoomQuestContainer {
<<struct from CCOREUMODULE>>
+bool enterInRoom
+UCAbstractRectangleMetadata* metadata
}
UCQuestManager ..|> ICQuestMaker : implements
UCQuestManager ..|> ICPipeline : implements
UCQuestManager --> FCQuestStruct : questMap contains 0..N
FCQuestStruct --> UCQuestStep : questStepMap contains 0..N
FCQuestStruct --> CQuestStatus : status
FCQuestStruct --> CQuestInnerStatus : questInnerStatus
UCQuestStep --> CQuestStatus : status
QuestUtility ..> ICQuestMaker : singleton lookup
QuestUtility ..> FCRoomQuestContainer : uses for room actions2. Quest Lifecycle (State Machine)
How a quest transitions through its internal states, from creation to termination or reset.
stateDiagram-v2
[*] --> UNSET : createQuest()
UNSET --> ACTIVATED : activateAnyQuest()\nquestCondition == true
UNSET --> UNSET : activateAnyQuest()\nquestCondition == false
ACTIVATED --> ACTIVATED : proceedWith*QuestAction()\nstep delegates fire\nsteps can chain/branch
ACTIVATED --> CLOSED_SUCCESS : terminateQuest(SUCCESS)
ACTIVATED --> CLOSED_FAIL : terminateQuest(FAIL)
CLOSED_SUCCESS --> UNSET : resetQuest()\nfirst step reactivated
CLOSED_FAIL --> UNSET : resetQuest()\nfirst step reactivated
state CLOSED_SUCCESS {
[*] --> [*] : questInnerStatus = CLOSED\nstatus = SUCCESS
}
state CLOSED_FAIL {
[*] --> [*] : questInnerStatus = CLOSED\nstatus = FAIL
}3. Runtime Trigger Flow — Char & Room
How actor interactions (CInteractionComponent from CCHARUMODULE) and room overlaps (CRoommaker from CROOMUMODULE) trigger quest actions at runtime. Quest has priority over Skill: if the quest consumes the action, the normal skill is skipped.
sequenceDiagram
participant CHAR as CInteractionComponent<br/>(CCHARUMODULE)
participant ROOM as CRoommaker<br/>(CROOMUMODULE)
participant QU as QuestUtility<br/>(CCOREUMODULE)
participant QM as UCQuestManager<br/>(CQUESTUMODULE)
participant STEP as UCQuestStep
Note over CHAR: Actor interaction<br/>(e.g. player interacts with NPC)
CHAR->>QU: proceedWithQuestAction(<br/>owner, otherActor, mainTag)
QU->>QM: retrieve ICQuestMaker singleton
QM->>QM: activateAnyQuest()<br/>evaluate conditions on UNSET quests
QM->>QM: for each ACTIVATED quest<br/>match currentStep vs mainTag
QM->>STEP: fire stepActorAction delegate
STEP-->>QM: result (bool)
QM-->>QU: true = quest consumed action
QU-->>CHAR: true / false
alt Quest returned true
Note over CHAR: Skip SkillUtility::consumeSkill
else Quest returned false
Note over CHAR: Proceed with<br/>SkillUtility::consumeSkill(<br/>executeInteractionSkill)
end
Note over ROOM: Room overlap<br/>(player enters or leaves room)
ROOM->>QU: proceedWithQuestAction(<br/>FCRoomQuestContainer(enter/leave,<br/>roomMetadata), otherActor, mainTag)
QU->>QM: retrieve ICQuestMaker singleton
QM->>QM: activateAnyQuest()
QM->>QM: match currentStep vs mainTag
QM->>STEP: fire stepRoomAction delegate
STEP-->>QM: result (bool)
QM-->>QU: true = quest consumed action
QU-->>ROOM: true / false
alt Quest returned true
Note over ROOM: Skip SkillUtility::consumeSkill
else Quest returned false
Note over ROOM: Proceed with<br/>SkillUtility::consumeSkill(<br/>beginOverlap/endOverlapSkill)
end