74 ref array<LocalizedString> m_aTaskName = {};
75 ref array<LocalizedString> m_aTaskDescription = {};
76 ref array<UUID> m_aAssignees = {};
77 ref array<string> m_aOwnerFactionKeys = {};
78 ref array<UUID> m_aOwnerGroupIDs = {};
79 ref array<UUID> m_aOwnerExecutors = {};
81 SCR_ETaskOwnership m_eOwnership;
83 SCR_ETaskUIVisibility m_eUIVisibility;
88 auto taskData =
task.GetTaskData();
89 m_sId = taskData.m_sID;
91 m_vPosition = taskData.m_vPosition;
93 auto uiInfo =
task.GetTaskUIInfo();
96 if (uiInfo.HasCustomIcon())
98 m_sIconSet = uiInfo.GetIconSetName();
100 m_rIconPath = uiInfo.GetImageSetPath();
103 if (uiInfo.HasCustomName())
105 array<LocalizedString>
params();
109 m_aTaskName.Reserve(
params.Count() + 1);
110 m_aTaskName.Insert(name);
111 m_aTaskName.InsertAll(
params);
115 if (uiInfo.HasCustomDescription())
117 array<LocalizedString>
params();
121 m_aTaskDescription.Reserve(
params.Count() + 1);
122 m_aTaskDescription.Insert(description);
123 m_aTaskDescription.InsertAll(
params);
128 foreach (
auto asignee : taskData.m_aAssignees)
130 const UUID id = GetTaskExecutorId(asignee, persistence);
132 m_aAssignees.Insert(
id);
135 m_aOwnerFactionKeys = taskData.m_aOwnerFactionKeys;
140 foreach (
auto ownerGroup : taskData.m_aOwnerGroupIDs)
142 const UUID id = persistence.GetId(groupManager.FindGroup(ownerGroup));
144 m_aOwnerGroupIDs.Insert(
id);
148 foreach (
auto owner : taskData.m_aOwnerExecutors)
150 const UUID id = GetTaskExecutorId(owner, persistence);
152 m_aOwnerExecutors.Insert(
id);
155 m_eState = taskData.m_eState;
156 m_eOwnership = taskData.m_eOwnership;
157 m_eVisibility = taskData.m_eVisibility;
158 m_eUIVisibility = taskData.m_eUIVisibility;
166 m_vPosition ==
vector.Zero &&
167 m_sIconSet.IsEmpty() &&
168 m_aTaskName.IsEmpty() &&
169 m_aTaskDescription.IsEmpty() &&
170 m_aAssignees.IsEmpty() &&
171 m_aOwnerFactionKeys.IsEmpty() &&
172 m_aOwnerGroupIDs.IsEmpty() &&
173 m_aOwnerExecutors.IsEmpty() &&
175 m_eOwnership == SCR_ETaskOwnership.NONE &&
177 m_eUIVisibility == SCR_ETaskUIVisibility.NONE;
183 auto task = taskSystem.CreateTask(m_rPrefab, m_sId,
"",
"", m_vPosition);
187 auto uiInfo =
task.GetTaskUIInfo();
192 task.SetTaskIconSetName(m_sIconSet);
193 task.SetTaskIconPath(m_rIconPath);
196 if (!m_aTaskName.IsEmpty())
199 m_aTaskName.RemoveOrdered(0);
200 task.SetTaskName(name, m_aTaskName);
203 if (!m_aTaskDescription.IsEmpty())
206 m_aTaskDescription.RemoveOrdered(0);
207 task.SetTaskDescription(description, m_aTaskDescription);
211 task.SetTaskOwnership(m_eOwnership);
212 task.SetTaskVisibility(m_eVisibility);
213 task.SetTaskUIVisibility(m_eUIVisibility);
215 foreach (
int idx,
auto factionKey : m_aOwnerFactionKeys)
220 if (editableTask && !editableTask.GetFaction())
222 const Faction faction =
GetGame().GetFactionManager().GetFactionByKey(factionKey);
223 editableTask.SetTargetFaction(faction);
227 task.AddOwnerFactionKey(factionKey);
230 foreach (
auto assignee : m_aAssignees)
232 Tuple2<SCR_Task, int> taskContext(
task, 0);
234 persistence.WhenAvailable(assignee, loadTask);
237 foreach (
auto group : m_aOwnerGroupIDs)
241 persistence.WhenAvailable(group, loadTask);
244 foreach (
auto owner : m_aOwnerExecutors)
246 Tuple2<SCR_Task, int> taskContext(
task, 1);
248 persistence.WhenAvailable(owner, loadTask);
251 taskSystem.SetTaskState(
task, m_eState);
261 return persistence.GetId(executorEntity.GetEntity());
268 return UUID.NULL_UUID;
270 return persistence.GetId(groupManager.FindGroup(executorGroup.GetGroupID()));
276 auto playerManager =
GetGame().GetPlayerManager();
278 return UUID.NULL_UUID;
280 return persistence.GetId(playerManager.GetPlayerController(executorPlayer.GetPlayerID()));
283 return UUID.NULL_UUID;
289 if (
task.IsInherited(SCR_CampaignMilitaryBaseTaskEntity))
290 return new SCR_CampaignMilitaryTaskSave();
293 return new SCR_ScenarioFrameworkTaskSave();
304 auto taskContext = Tuple2<SCR_Task, int>.Cast(context);
305 if (!taskContext.param1)
309 auto playerController = PlayerController.Cast(instance);
310 if (playerController)
323 auto entity =
IEntity.Cast(instance);
331 if (taskContext.param2 == 0)
333 taskContext.param1.AddTaskAssignee(executor);
337 taskContext.param1.AddOwnerExecutor(executor)
344 if (!taskContext.param1)
351 taskContext.param1.AddOwnerGroupID(group.GetGroupID());
357 context.WriteDefault(m_sId,
string.Empty);
359 context.WriteDefault(m_vPosition,
vector.Zero);
360 context.WriteDefault(m_sIconSet,
string.Empty);
363 if (!m_aTaskName.IsEmpty() || !context.CanSeekMembers())
364 context.Write(m_aTaskName);
366 if (!m_aTaskDescription.IsEmpty() || !context.CanSeekMembers())
367 context.Write(m_aTaskDescription);
369 if (!m_aAssignees.IsEmpty() || !context.CanSeekMembers())
370 context.Write(m_aAssignees);
372 if (!m_aOwnerFactionKeys.IsEmpty() || !context.CanSeekMembers())
373 context.Write(m_aOwnerFactionKeys);
375 if (!m_aOwnerGroupIDs.IsEmpty() || !context.CanSeekMembers())
376 context.Write(m_aOwnerGroupIDs);
378 if (!m_aOwnerExecutors.IsEmpty() || !context.CanSeekMembers())
379 context.Write(m_aOwnerExecutors);
382 context.WriteDefault(m_eOwnership, SCR_ETaskOwnership.NONE);
384 context.WriteDefault(m_eUIVisibility, SCR_ETaskUIVisibility.NONE);
391 context.ReadDefault(m_sId,
string.Empty);
393 context.ReadDefault(m_vPosition,
vector.Zero);
394 context.ReadDefault(m_sIconSet,
string.Empty);
397 if (!context.Read(m_aTaskName) && !context.CanSeekMembers())
400 if (!context.Read(m_aTaskDescription) && !context.CanSeekMembers())
403 if (!context.Read(m_aAssignees) && !context.CanSeekMembers())
406 if (!context.Read(m_aOwnerFactionKeys) && !context.CanSeekMembers())
409 if (!context.Read(m_aOwnerGroupIDs) && !context.CanSeekMembers())
412 if (!context.Read(m_aOwnerExecutors) && !context.CanSeekMembers())
416 context.ReadDefault(m_eOwnership, SCR_ETaskOwnership.NONE);
418 context.ReadDefault(m_eUIVisibility, SCR_ETaskUIVisibility.NONE);
500 ref array<ref SCR_TaskSave> m_aChildTasks = {};
505 super.Save(
task, persistence);
508 m_fProgress = extendedTaskData.m_fProgress;
509 if (!extendedTaskData.m_aChildTasks)
512 foreach (
auto childRpl : extendedTaskData.m_aChildTasks)
514 auto rpl = RplComponent.Cast(
Replication.FindItem(childRpl));
518 auto childTask =
SCR_Task.Cast(rpl.GetEntity());
521 auto save = GetTaskTypeSave(childTask);
522 save.Save(childTask, persistence);
523 if (!save.IsDefault())
524 m_aChildTasks.Insert(save);
534 float.AlmostEqual(m_fProgress, 0) &&
535 m_aChildTasks.IsEmpty();
544 task.SetTaskProgress(m_fProgress);
545 foreach (
auto childSave : m_aChildTasks)
547 auto childTask = childSave.Load(taskSystem, persistence);
549 task.AddChildTask(childTask);
557 override bool SerializationSave(
SaveContext context)
559 if (!super.SerializationSave(context))
562 context.WriteDefault(m_fProgress, 0.0);
564 if (!m_aChildTasks.IsEmpty() || !context.CanSeekMembers())
565 context.Write(m_aChildTasks);
571 override bool SerializationLoad(
LoadContext context)
573 if (!super.SerializationLoad(context))
576 context.ReadDefault(m_fProgress, 0);
578 if (!context.Read(m_aChildTasks) && !context.CanSeekMembers())