Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AISetting.c
Go to the documentation of this file.
1
4{
5 EDITOR, // Created by Editor (Game Master) at run time
6 SCENARIO, // Created by scenario framework
7 WAYPOINT, // Placed into waypoint
8 COMMANDING, // AI Commanding
9 BEHAVIOR, // Settings created by AI internally from their behaviors
10 DEFAULT // Settings added to prefabs, as default AI settings
11}
12
13enum SCR_EAISettingFlags
14{
15 CREATED_DYNAMICALLY = 1<<0, // Means it was created via script at run time by Create method. It was never part of property.
16
17 // These flags below are not mutually exclusive,
18 // because as setting gets copied, it will get owned by settings component, while it might originate from waypoint
19 SETTINGS_COMPONENT = 1<<1, // Some settings component owns it
20 WAYPOINT = 1<<2, // Some waypoint owns or owned it
21 SCENARIO_FRAMEWORK = 1<<3 // Some scenario framework container owns or owned this
22}
23
25class SCR_AISettingOriginPriorityTable
26{
27 protected ref array<int> m_aValues; // Index is origin ID, value is priority.
28
29 //------------------------------------------------------------------------------------------------
31 int GetPriorityForOrigin(SCR_EAISettingOrigin origin)
32 {
33 if (!m_aValues.IsIndexValid(origin))
34 return 0;
35
36 return m_aValues[origin];
37 }
38
39 //---------------------------------------------------------------------------------------------------
40 void SCR_AISettingOriginPriorityTable()
41 {
42 m_aValues = {};
43
44 // Init array with settings priorities
45 typename t = SCR_EAISettingOrigin;
46 int originsCount = Math.ClampInt(t.GetVariableCount(), 0, 32); // Limit array size to some reasonable value
47 m_aValues.Resize(originsCount);
48 InitPriorities(m_aValues);
49 }
50
51 //---------------------------------------------------------------------------------------------------
54 protected void InitPriorities(array<int> a)
55 {
56 // Currently idea is to have editor and scenario above commanding, prioritizing mission creator's choice
57 a[SCR_EAISettingOrigin.EDITOR] = 6000;
58 a[SCR_EAISettingOrigin.SCENARIO] = 5000;
59 a[SCR_EAISettingOrigin.WAYPOINT] = 4000;
60 a[SCR_EAISettingOrigin.COMMANDING] = 3000;
61 a[SCR_EAISettingOrigin.BEHAVIOR] = 2000;
62 a[SCR_EAISettingOrigin.DEFAULT] = 1000;
63 }
64}
65
66
88[BaseContainerProps(visible: false)]
89class SCR_AISettingBase
90{
91 // Special value for settings which do not support action cause.
92 // The value is big so that setting is always active regardless of current action cause value.
93 const int ACTION_CAUSE_NOT_SUPPORTED = int.MAX;
94
95 // Pointer to setting from which this was copied
96 protected SCR_AISettingBase m_ParentSetting;
97
98 protected SCR_EAISettingOrigin m_eOrigin;
99
100 protected SCR_EAISettingFlags m_eFlags;
101
102 [SortAttribute()]
103 protected int m_iPriority;
104
105 // Static table of priority of each origin of settings
106 protected static ref SCR_AISettingOriginPriorityTable s_OriginPriorityTable = new SCR_AISettingOriginPriorityTable();
107
108 //---------------------------------------------------------------------------------------------------
109 int GetPriority()
110 {
111 return m_iPriority;
112 }
113
114 //---------------------------------------------------------------------------------------------------
116 {
117 return m_eOrigin;
118 }
119
120 //---------------------------------------------------------------------------------------------------
121 SCR_AISettingBase GetParentSetting()
122 {
123 return m_ParentSetting;
124 }
125
126 //---------------------------------------------------------------------------------------------------
127 SCR_EAISettingFlags GetFlags()
128 {
129 return m_eFlags;
130 }
131
132 //---------------------------------------------------------------------------------------------------
133 bool HasFlag(SCR_EAISettingFlags f)
134 {
135 return (m_eFlags & f);
136 }
137
138 //---------------------------------------------------------------------------------------------------
145 int GetMaxActionCause();
146
147
148
149 //----------------------------------------------------------------------------------------------------------------------------
150 // Internal and protected methods, mostly related to initialization
151
152 //---------------------------------------------------------------------------------------------------
156 SCR_AISettingBase CreateCopy()
157 {
158 Managed sManaged = Clone();
159 auto s = SCR_AISettingBase.Cast(sManaged);
160 return s;
161 }
162
163 //---------------------------------------------------------------------------------------------------
165 void Internal_InitCopyFrom(SCR_AISettingBase from)
166 {
167 m_ParentSetting = from;
168 }
169
170 //---------------------------------------------------------------------------------------------------
172 protected void Init(SCR_EAISettingOrigin origin)
173 {
174 m_eFlags |= SCR_EAISettingFlags.CREATED_DYNAMICALLY;
175 m_eOrigin = origin;
176 m_iPriority = s_OriginPriorityTable.GetPriorityForOrigin(m_eOrigin);
177 }
178
179 //---------------------------------------------------------------------------------------------------
182 void Internal_ConstructedAtProperty(SCR_EAISettingOrigin origin, SCR_EAISettingFlags flagsToSet)
183 {
184 m_eFlags |= flagsToSet;
185 m_eOrigin = origin;
186 m_iPriority = s_OriginPriorityTable.GetPriorityForOrigin(m_eOrigin);
187 }
188
189 //----------------------------------------------------------------------------------------------------------------------------
190 void Internal_SetFlag(SCR_EAISettingFlags flagsToSet)
191 {
192 m_eFlags |= flagsToSet;
193 }
194
195 //----------------------------------------------------------------------------------------------------------------------------
196 // Methods to override in derived classes
197
198 //---------------------------------------------------------------------------------------------------
202 typename GetCategorizationType()
203 {
204 return Type();
205 }
206
207 //---------------------------------------------------------------------------------------------------
213 void OnAdded(SCR_AISettingsBaseComponent settingsComp);
214
215 //---------------------------------------------------------------------------------------------------
218 void OnRemoved(SCR_AISettingsBaseComponent settingsComp);
219
220 //---------------------------------------------------------------------------------------------------
227 void ApplyEffects(SCR_AISettingsBaseComponent settingsComp);
228
229 //---------------------------------------------------------------------------------------------------
230 string GetDebugText()
231 {
232 return string.Empty;
233 }
234}
235
override void Init()
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
override GetCategorizationType()
override int GetMaxActionCause()
SCR_EAIThreatSectorFlags m_eFlags
SCR_EAISettingOrigin
@ COMMANDING
@ EDITOR
@ SCENARIO
enum SCR_EAISettingOrigin SETTINGS_COMPONENT
enum SCR_EAISettingOrigin WAYPOINT
enum SCR_EAISettingOrigin CREATED_DYNAMICALLY
int m_iPriority
vector GetOrigin()
@ BEHAVIOR
Definition SCR_AIWorld.c:14
SCR_BaseEditorAttributeEntryTimeSlider m_aValues
bool HasFlag(EManualCameraFlag flag)
int GetFlags(out array< SCR_FlagComponent > flags)
int Type
@ DEFAULT
Use currently set main RT format (based on game options).
class Class Clone()
Return shallow copy of object, or null if it is not allowed (not public constructor).