Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_TaskFinishHistoryManagerComponent.c
Go to the documentation of this file.
4
6{
7 protected ref array<ref SCR_TaskFinishEntry> m_aFinished = {};
8
10
11 //------------------------------------------------------------------------------------------------
12 static SCR_TaskFinishHistoryManagerComponent GetInstance()
13 {
14 return s_Instance;
15 }
16
17 //------------------------------------------------------------------------------------------------
19 array<ref SCR_TaskFinishEntry> GetAll()
20 {
21 array<ref SCR_TaskFinishEntry> outputTasks = {};
22 foreach (SCR_TaskFinishEntry taskEntry : m_aFinished)
23 {
24 outputTasks.Insert(taskEntry);
25 }
26
27 return outputTasks;
28 }
29
30 //------------------------------------------------------------------------------------------------
33 array<ref SCR_TaskFinishEntry> GetByTaskID(string taskID)
34 {
35 array<ref SCR_TaskFinishEntry> outputTasks = {};
36 foreach (SCR_TaskFinishEntry taskEntry : m_aFinished)
37 {
38 if (taskEntry.GetTaskID() == taskID)
39 outputTasks.Insert(taskEntry);
40 }
41
42 return outputTasks;
43 }
44
45 //------------------------------------------------------------------------------------------------
48 array<ref SCR_TaskFinishEntry> GetByPlayerID(int playerID)
49 {
50 array<ref SCR_TaskFinishEntry> outputTasks = {};
51 array<int> assignees = {};
52 foreach (SCR_TaskFinishEntry taskEntry : m_aFinished)
53 {
54 assignees = taskEntry.GetAssignees();
55 foreach (int assigneeID : assignees)
56 {
57 if (assigneeID == playerID)
58 {
59 outputTasks.Insert(taskEntry);
60 break;
61 }
62 }
63 }
64
65 return outputTasks;
66 }
67
68 //------------------------------------------------------------------------------------------------
71 array<ref SCR_TaskFinishEntry> GetByFinalState(SCR_ETaskState state)
72 {
73 array<ref SCR_TaskFinishEntry> outputTasks = {};
74 foreach (SCR_TaskFinishEntry taskEntry : m_aFinished)
75 {
76 if (taskEntry.GetFinalState() == state)
77 outputTasks.Insert(taskEntry);
78 }
79
80 return outputTasks;
81 }
82
83 //------------------------------------------------------------------------------------------------
87 {
88 if (m_aFinished.IsEmpty())
89 return null;
90
91 map<string, int> aggregatedTasks = new map<string, int>();
92 string taskTypeName;
93 foreach (SCR_TaskFinishEntry entry : m_aFinished)
94 {
95 if (entry.GetAssignees().Contains(playerID))
96 {
97 taskTypeName = entry.GetTaskTypeName();
98 aggregatedTasks.Set(taskTypeName, aggregatedTasks.Get(taskTypeName) + 1);
99 }
100 }
101
102 return aggregatedTasks;
103 }
104
105 //------------------------------------------------------------------------------------------------
108 {
109 if (m_aFinished.IsEmpty())
110 return null;
111
113 string taskTypeName;
114 map<string, int> assigneeAggregatedTasks = new map<string, int>();
115 foreach (SCR_TaskFinishEntry entry : m_aFinished)
116 {
117 taskTypeName = entry.GetTaskTypeName();
118 foreach (int assignee : entry.GetAssignees())
119 {
120 assigneeAggregatedTasks = aggregatedTasks.Get(assignee);
121 if (!assigneeAggregatedTasks)
122 assigneeAggregatedTasks = new map<string, int>();
123
124 int aggregatedTaskCount = 1;
125 if (assigneeAggregatedTasks.Contains(taskTypeName))
126 aggregatedTaskCount += assigneeAggregatedTasks.Get(taskTypeName);
127
128 assigneeAggregatedTasks.Set(taskTypeName, aggregatedTaskCount);
129 aggregatedTasks.Set(assignee, assigneeAggregatedTasks);
130 }
131 }
132
133 return aggregatedTasks;
134 }
135
136 //------------------------------------------------------------------------------------------------
138 {
139 // We only care about finished task states
140 if (!IsFinishedState(newState))
141 return;
142
143 // No need to save a task without any assignees
144 if (task.GetTaskAssigneeCount() <= 0)
145 return;
146
147 RecordIfFinished(task, newState);
148 }
149
150 //------------------------------------------------------------------------------------------------
151 protected bool IsFinishedState(SCR_ETaskState state)
152 {
153 return state == SCR_ETaskState.COMPLETED || state == SCR_ETaskState.FAILED || state == SCR_ETaskState.CANCELLED;
154 }
155
156 //------------------------------------------------------------------------------------------------
158 {
159 if (!task)
160 return;
161
162 if (!IsFinishedState(newState))
163 return;
164
166 entry.Init(task, newState);
167 m_aFinished.Insert(entry);
168 }
169
170 //------------------------------------------------------------------------------------------------
171 override void OnPostInit(IEntity owner)
172 {
173 super.OnPostInit(owner);
174
175 SCR_Task.GetOnTaskStateChanged().Insert(OnTaskStateChanged);
176 }
177
178 //------------------------------------------------------------------------------------------------
179 override void OnDelete(IEntity owner)
180 {
181 super.OnDelete(owner);
182
183 SCR_Task.GetOnTaskStateChanged().Remove(OnTaskStateChanged);
184 }
185
186 //------------------------------------------------------------------------------------------------
187 override bool RplSave(ScriptBitWriter writer)
188 {
189 int finishedTasksCount = m_aFinished.Count();
190 writer.WriteInt(finishedTasksCount);
191
192 foreach (SCR_TaskFinishEntry entry : m_aFinished)
193 {
194 entry.RplSave(writer);
195 }
196
197 return true;
198 }
199
200 //------------------------------------------------------------------------------------------------
201 override bool RplLoad(ScriptBitReader reader)
202 {
203 int finishedTasksCount;
204 reader.ReadInt(finishedTasksCount);
205
206 for (int i = 0; i < finishedTasksCount; i++)
207 {
209 entry.RplLoad(reader);
210 m_aFinished.Insert(entry);
211 }
212
213 return true;
214 }
215
216 //------------------------------------------------------------------------------------------------
221 {
222 if (!s_Instance)
223 s_Instance = this;
224 }
225
226 //------------------------------------------------------------------------------------------------
227 // destructor
229 {
230 s_Instance = null;
231 }
232}
override bool RplLoad(ScriptBitReader reader)
void SCR_BaseGameModeComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
override bool RplSave(ScriptBitWriter writer)
void OnTaskStateChanged(SCR_Task task, SCR_ETaskState newState)
SCR_SpawnerSlotManagerClass s_Instance
Class used for managing changes and removals of slots present in world.
void SCR_Task(IEntitySource src, IEntity parent)
Definition SCR_Task.c:1938
SCR_ETaskState
Definition SCR_Task.c:3
map< string, int > GetAggregatedByPlayerID(int playerID)
array< ref SCR_TaskFinishEntry > GetAll()
array< ref SCR_TaskFinishEntry > GetByTaskID(string taskID)
void RecordIfFinished(SCR_Task task, SCR_ETaskState newState)
array< ref SCR_TaskFinishEntry > GetByPlayerID(int playerID)
bool IsFinishedState(SCR_ETaskState state)
void ~SCR_TaskFinishHistoryManagerComponent()
void SCR_TaskFinishHistoryManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
array< ref SCR_TaskFinishEntry > GetByFinalState(SCR_ETaskState state)
SCR_TaskFinishHistoryManagerComponentClass m_aFinished
map< int, ref map< string, int > > GetAggregatedByTypeAndPlayer()
bool RplLoad(ScriptBitReader reader)
void Init(notnull SCR_Task task, SCR_ETaskState state)
Definition Types.c:486