forge/arma/server/addons/task/functions/fnc_initTaskStore.sqf
Jacob Schmidt 12dc262136 Refactor task store into modular services
- Add task chain prerequisite parsing and startup gating
- Split lifecycle, catalog, entity, participant, and reward logic into service objects
- Update task modules and docs for chained task flow
2026-05-20 18:50:46 -05:00

160 lines
5.8 KiB
Plaintext

#include "..\script_component.hpp"
/*
* Author: IDSolutions
* Initializes the task store for task entity tracking, participant
* contribution tracking, and task outcome application.
*
* Task metadata is extension-backed but intentionally transient. The task
* backend is reset explicitly from task preInit so task/catalog/status state
* starts clean before mission setup repopulates contracts.
*
* Arguments:
* None
*
* Return Value:
* Task store object [HASHMAP OBJECT]
*
* Example:
* call forge_server_task_fnc_initTaskStore
*
* Public: No
*/
#pragma hemtt ignore_variables ["_self"]
GVAR(TaskStore) = createHashMapObject [[
["#type", "TaskStore"],
["#create", compileFinal {}],
["resetMissionState", compileFinal {
GVAR(TaskLifecycleReporter) call ["resetRuntimeState", []];
GVAR(TaskCatalogStore) call ["resetRuntimeState", []];
GVAR(TaskEntityRegistry) call ["resetRuntimeState", []];
GVAR(TaskParticipantTracker) call ["resetRuntimeState", []];
GVAR(TaskStateGateway) call ["reset", []]
}],
["bindTaskOwnership", compileFinal {
params [["_taskID", "", [""]], ["_requesterUid", "", [""]]];
GVAR(TaskCatalogStore) call ["bindTaskOwnership", [_taskID, _requesterUid]]
}],
["releaseTaskOwnership", compileFinal {
params [["_taskID", "", [""]]];
GVAR(TaskCatalogStore) call ["releaseTaskOwnership", [_taskID]]
}],
["buildTaskLifecycleEventPayload", compileFinal {
GVAR(TaskLifecycleReporter) call ["buildTaskLifecycleEventPayload", _this]
}],
["emitTaskLifecycleEvent", compileFinal {
GVAR(TaskLifecycleReporter) call ["emitTaskLifecycleEvent", _this]
}],
["normalizePrerequisiteTaskIds", compileFinal {
GVAR(TaskCatalogStore) call ["normalizePrerequisiteTaskIds", _this]
}],
["getTaskPrerequisites", compileFinal {
GVAR(TaskCatalogStore) call ["getTaskPrerequisites", _this]
}],
["isTaskCompleted", compileFinal {
GVAR(TaskCatalogStore) call ["isTaskCompleted", _this]
}],
["areTaskPrerequisitesSatisfied", compileFinal {
GVAR(TaskCatalogStore) call ["areTaskPrerequisitesSatisfied", _this]
}],
["resolveInitialTaskStatus", compileFinal {
GVAR(TaskCatalogStore) call ["resolveInitialTaskStatus", _this]
}],
["markTaskCompleted", compileFinal {
GVAR(TaskCatalogStore) call ["markTaskCompleted", _this]
}],
["unlockDependentTasks", compileFinal {
GVAR(TaskCatalogStore) call ["unlockDependentTasks", _this]
}],
["registerTaskCatalogEntry", compileFinal {
GVAR(TaskCatalogStore) call ["registerTaskCatalogEntry", _this]
}],
["getActiveTaskCatalog", compileFinal {
GVAR(TaskCatalogStore) call ["getActiveTaskCatalog", _this]
}],
["hasTaskCatalogEntry", compileFinal {
GVAR(TaskCatalogStore) call ["hasTaskCatalogEntry", _this]
}],
["getTaskCatalogEntry", compileFinal {
GVAR(TaskCatalogStore) call ["getTaskCatalogEntry", _this]
}],
["isTaskAccepted", compileFinal {
GVAR(TaskCatalogStore) call ["isTaskAccepted", _this]
}],
["acceptTask", compileFinal {
GVAR(TaskCatalogStore) call ["acceptTask", _this]
}],
["setTaskStatus", compileFinal {
GVAR(TaskCatalogStore) call ["setTaskStatus", _this]
}],
["getTaskStatus", compileFinal {
GVAR(TaskCatalogStore) call ["getTaskStatus", _this]
}],
["clearTaskStatus", compileFinal {
GVAR(TaskCatalogStore) call ["clearTaskStatus", _this]
}],
["registerTaskEntity", compileFinal {
GVAR(TaskEntityRegistry) call ["registerTaskEntity", _this]
}],
["getTaskEntities", compileFinal {
GVAR(TaskEntityRegistry) call ["getTaskEntities", _this]
}],
["findTaskEntityOwner", compileFinal {
GVAR(TaskEntityRegistry) call ["findTaskEntityOwner", _this]
}],
["clearTaskEntities", compileFinal {
GVAR(TaskEntityRegistry) call ["clearTaskEntities", _this]
}],
["trackParticipants", compileFinal {
GVAR(TaskParticipantTracker) call ["trackParticipants", _this]
}],
["getTaskParticipants", compileFinal {
GVAR(TaskParticipantTracker) call ["getTaskParticipants", _this]
}],
["getTaskParticipantUids", compileFinal {
GVAR(TaskParticipantTracker) call ["getTaskParticipantUids", _this]
}],
["resolveRewardContext", compileFinal {
GVAR(TaskRewardService) call ["resolveRewardContext", _this]
}],
["incrementDefuseCount", compileFinal {
params [["_taskID", "", [""]]];
if (_taskID isEqualTo "") exitWith { 0 };
[GVAR(TaskStateGateway) call ["callTaskState", ["task:defuse:increment", [_taskID], 0]]] params [["_count", 0, [0]]];
_count
}],
["getDefuseCount", compileFinal {
params [["_taskID", "", [""]]];
if (_taskID isEqualTo "") exitWith { 0 };
[GVAR(TaskStateGateway) call ["callTaskState", ["task:defuse:get", [_taskID], 0]]] params [["_count", 0, [0]]];
_count
}],
["notifyParticipants", compileFinal {
GVAR(TaskParticipantTracker) call ["notifyParticipants", _this]
}],
["clearTask", compileFinal {
params [["_taskID", "", [""]]];
if (_taskID isEqualTo "") exitWith { false };
_self call ["emitTaskLifecycleEvent", ["task.cleared", _taskID, "cleared", createHashMap]];
GVAR(TaskLifecycleReporter) call ["clearTaskLifecycle", [_taskID]];
GVAR(TaskParticipantTracker) call ["clearTaskParticipants", [_taskID]];
GVAR(TaskStateGateway) call ["callTaskState", ["task:clear", [_taskID], false]];
_self call ["clearTaskEntities", [_taskID]];
true
}],
["applyRatingOutcome", compileFinal {
GVAR(TaskRewardService) call ["applyRatingOutcome", _this]
}]
]];
GVAR(TaskStore)