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 actions

2. 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