Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_TaskSolverManagerComponent.c
Go to the documentation of this file.
1[ComponentEditorProps(category: "GameScripted/Misc", description: "")]
5
6class SCR_TaskSolverManagerComponent : SCR_BaseGameModeComponent
7{
8 [Attribute()]
9 protected ref SCR_TaskSolverConfig m_TaskSolverConfig;
10
11 protected ref array<ref SCR_TaskSolverBase> m_aActiveSolvers = {};
12
13 protected RplComponent m_RplComponent;
14
15 static protected int s_iMaxSolverId = -1;
16
17 //------------------------------------------------------------------------------------------------
21 SCR_TaskSolverBase CreateSolver(typename solverType)
22 {
23 if (!solverType)
24 return null;
25
26 SCR_TaskSolverBase solver = SCR_TaskSolverBase.Cast(solverType.Spawn());
27 if (!solver)
28 return null;
29
30 s_iMaxSolverId++;
31 solver.SetId(s_iMaxSolverId);
32
33 SetSolverEntry(solver);
34
35 m_aActiveSolvers.Insert(solver);
36
37 if (IsMaster())
38 {
39 SCR_ResupplyTaskSolver resupplyTaskSolver = SCR_ResupplyTaskSolver.Cast(solver);
40 if (resupplyTaskSolver)
42 }
43
44 return solver;
45 }
46
47 //------------------------------------------------------------------------------------------------
53 {
54 int index = m_aActiveSolvers.Find(solver);
55 if (!m_aActiveSolvers.IsIndexValid(index))
56 return;
57
58 solver.Init(task, context);
59 solver.StartTaskSolving();
60 }
61
62 //------------------------------------------------------------------------------------------------
65 void RemoveSolver(notnull SCR_TaskSolverBase solver)
66 {
67 int idx = m_aActiveSolvers.Find(solver);
68 if (idx != -1)
69 {
70 solver.Deinit();
71 m_aActiveSolvers.Remove(idx);
72 }
73 }
74
75 //------------------------------------------------------------------------------------------------
79 {
80 if (!m_TaskSolverConfig)
81 return null;
82
83 return m_TaskSolverConfig.GetTaskSolverEntry(type);
84 }
85
86 //------------------------------------------------------------------------------------------------
88 void Update(float timeSlice)
89 {
90 foreach (SCR_TaskSolverBase solver : m_aActiveSolvers)
91 {
92 solver.Update(timeSlice);
93 }
94 }
95
96 //------------------------------------------------------------------------------------------------
97 protected bool IsMaster()
98 {
99 return !m_RplComponent || m_RplComponent.IsMaster();
100 }
101
102 //------------------------------------------------------------------------------------------------
103 protected void OnResupplyTaskSolverStateChanged(int solverId, SCR_EResupplyTaskSolverState resupplyTaskSolverState)
104 {
105 Rpc(RpcDo_SetResupplyTaskSolverState, solverId, resupplyTaskSolverState);
106 }
107
108 //------------------------------------------------------------------------------------------------
109 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
110 protected void RpcDo_SetResupplyTaskSolverState(int solverId, SCR_EResupplyTaskSolverState resupplyTaskSolverState)
111 {
112 SCR_ResupplyTaskSolver resupplyTaskSolver = SCR_ResupplyTaskSolver.Cast(Find(solverId));
113 if (!resupplyTaskSolver)
114 return;
115
116 resupplyTaskSolver.SetResupplyTaskSolverState(resupplyTaskSolverState);
117 }
118
119 //------------------------------------------------------------------------------------------------
120 protected SCR_TaskSolverBase Find(int solverId)
121 {
122 foreach (SCR_TaskSolverBase solver : m_aActiveSolvers)
123 {
124 if (solver.GetId() == solverId)
125 return solver;
126 }
127
128 return null;
129 }
130
131 //------------------------------------------------------------------------------------------------
136 {
137 foreach (SCR_TaskSolverBase solver : m_aActiveSolvers)
138 {
139 if (solver.GetTask() == task)
140 return solver;
141 }
142
143 return null;
144 }
145
146 //------------------------------------------------------------------------------------------------
148 protected void SetSolverEntry(SCR_TaskSolverBase solver)
149 {
150 if (!m_TaskSolverConfig || !solver)
151 return;
152
153 SCR_ResupplyTaskSolver resupplySolver = SCR_ResupplyTaskSolver.Cast(solver);
154 if (resupplySolver)
155 {
157 m_TaskSolverConfig.GetTaskSolverEntry(SCR_ResupplyTaskSolverEntry)
158 );
159
160 if (entry)
161 resupplySolver.SetResupplyTaskSolverEntry(entry);
162 }
163
164 // Extend as needed for other types.
165 }
166
167 //------------------------------------------------------------------------------------------------
168 override protected void OnPostInit(IEntity owner)
169 {
170 s_iMaxSolverId = -1;
171
172 m_RplComponent = RplComponent.Cast(owner.FindComponent(RplComponent));
173 }
174
175 //------------------------------------------------------------------------------------------------
177 override protected void OnDelete(IEntity owner)
178 {
179 SCR_ResupplyTaskSolver resupplyTaskSolver;
180 foreach (SCR_TaskSolverBase solver : m_aActiveSolvers)
181 {
182 solver.Deinit();
183
184 if (IsMaster())
185 {
186 resupplyTaskSolver = SCR_ResupplyTaskSolver.Cast(solver);
187 if (resupplyTaskSolver)
189 }
190 }
191
192 m_aActiveSolvers.Clear();
193 super.OnDelete(owner);
194 }
195}
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
void SCR_BaseGameModeComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
RplComponent m_RplComponent
EDamageType type
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
void SCR_Task(IEntitySource src, IEntity parent)
Definition SCR_Task.c:1938
ref array< ref SCR_TaskSolverBase > m_aActiveSolvers
SCR_TaskSolverEntry GetTaskSolverEntry(typename type)
void RpcDo_SetResupplyTaskSolverState(int solverId, SCR_EResupplyTaskSolverState resupplyTaskSolverState)
SCR_TaskSolverBase CreateSolver(typename solverType)
void RemoveSolver(notnull SCR_TaskSolverBase solver)
void OnResupplyTaskSolverStateChanged(int solverId, SCR_EResupplyTaskSolverState resupplyTaskSolverState)
void StartSolverTask(SCR_TaskSolverBase solver, SCR_Task task, SCR_TaskSolverContext context)
void SetSolverEntry(SCR_TaskSolverBase solver)
Configures the solver with entries/config as needed.
proto external Managed FindComponent(typename typeName)
ScriptInvokerInt2 GetOnResupplyTaskSolverStateChanged()
void SetResupplyTaskSolverState(SCR_EResupplyTaskSolverState state)
void SetResupplyTaskSolverEntry(SCR_ResupplyTaskSolverEntry entry)
Configures this solver with a resupply solver entry.
void StartTaskSolving()
Marks the task solver as in progress.
void Init(SCR_Task task, SCR_TaskSolverContext context)
SCR_FieldOfViewSettings Attribute
void RplRpc(RplChannel channel, RplRcver rcver, RplCondition condition=RplCondition.None, string customConditionName="")
Definition EnNetwork.c:95
RplRcver
Definition RplRcver.c:59
RplChannel
Communication channel. Reliable is guaranteed to be delivered. Unreliable not.
Definition RplChannel.c:14
proto int Find(T value)