Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AIGroupInfoComponent.c
Go to the documentation of this file.
1[ComponentEditorProps(category: "GameScripted/AI", description: "Component for AI checking state of group")]
5
6enum EGroupControlMode
7{
8 NONE = 0,
9 IDLE,
13}
14
15class SCR_AIGroupInfoComponent : SCR_AIInfoBaseComponent
16{
17 const float GRENADE_THROW_TIMEOUT_MS = 4000; // How long grenades should be disallowed after last usage
18 const float ILLUM_FLARE_MIN_TIMEOUT_MS = 25*1000; // Min time illum flares should be disallowed after last usage
19 const float ILLUM_FLARE_MAX_TIMEOUT_MS = 40*1000; // Max time illum flares should be disallowed after last usage
20
21 private EGroupControlMode m_eGroupControlMode;
23
25
27
29
30 protected AIAgent m_GrenadeThrowAgent;
31
33
34 //---------------------------------------------------------------------------------------------------
35 override void EOnInit(IEntity owner)
36 {
37 super.EOnInit(owner);
38 SCR_AIGroup group = SCR_AIGroup.Cast(owner);
39 if (!group)
40 return;
41
43 };
44
45 //------------------------------------------------------------------------------------------------
49 bool IsGrenadeThrowAllowed(AIAgent soldierAgent)
50 {
51 if (soldierAgent == m_GrenadeThrowAgent)
52 return true;
53 float time_ms = GetGame().GetWorld().GetWorldTime();
54 return time_ms > m_fTimeGrenadeThrowAllowed_ms;
55 }
56
57 //------------------------------------------------------------------------------------------------
59 {
60 float time_ms = GetGame().GetWorld().GetWorldTime();
61 return time_ms > m_fTimeIllumFlareAllowed_ms;
62 }
63
64 //------------------------------------------------------------------------------------------------
66 {
67 float time_ms = GetGame().GetWorld().GetWorldTime();
68
69 float threat;
71 threat = m_UtilityComponent.GetThreatMeasure();
72
74 timeout *= (1 - threat) * 0.8 + Math.RandomFloatInclusive(0, 0.2);
75
77 }
78
79 //------------------------------------------------------------------------------------------------
81 void OnAgentSelectedGrenade(AIAgent soldierAgent)
82 {
83 float time_ms = GetGame().GetWorld().GetWorldTime();
85 m_GrenadeThrowAgent = soldierAgent;
86 }
87
88 //------------------------------------------------------------------------------------------------
89 override protected void OnPostInit(IEntity owner)
90 {
91 super.OnPostInit(owner);
92 SetEventMask(owner, EntityEvent.INIT);
93 }
94
95 //------------------------------------------------------------------------------------------------
97 void SetGroupControlMode(EGroupControlMode currControlMode)
98 {
99 #ifdef AI_DEBUG
100 AddDebugMessage(string.Format("SetGroupControlMode: %1", typename.EnumToString(EGroupControlMode, currControlMode)), msgType:EAIDebugMsgType.INFO);
101 #endif
102
103 if (currControlMode == m_eGroupControlMode)
104 return;
105
106 if (!Replication.IsServer())
107 return;
108
109
110 RplSetGroupControlMode(currControlMode);
111 Rpc(RplSetGroupControlMode, currControlMode);
112 }
113
114 //------------------------------------------------------------------------------------------------
115 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
116 protected void RplSetGroupControlMode(EGroupControlMode currControlMode)
117 {
118 m_eGroupControlMode = currControlMode;
119 Event_OnControlModeChanged.Invoke(currControlMode);
120
121 SCR_AIWorld aiWorld = SCR_AIWorld.Cast(GetGame().GetAIWorld());
122 if (aiWorld)
123 aiWorld.GetOnControlModeChanged().Invoke(AIGroup.Cast(GetOwner()), currControlMode);
124 }
125
126 //------------------------------------------------------------------------------------------------
128 EGroupControlMode GetGroupControlMode()
129 {
130 return m_eGroupControlMode;
131 }
132
133 //------------------------------------------------------------------------------------------------
139
140 //======================================== RPL ========================================\\
141 override bool RplSave(ScriptBitWriter writer)
142 {
143 writer.WriteIntRange(m_eGroupControlMode, 0, EGroupControlMode.LAST-1);
144
145 return true;
146 }
147
148 //------------------------------------------------------------------------------------------------
149 override bool RplLoad(ScriptBitReader reader)
150 {
151 EGroupControlMode groupControlMode;
152
153 reader.ReadIntRange(groupControlMode, 0, EGroupControlMode.LAST-1);
154
155 RplSetGroupControlMode(groupControlMode);
156
157 return true;
158 }
159
160 //------------------------------------------------------------------------------------------------
163 {
164 m_eStanceLimit = stance;
165 }
166
167 //------------------------------------------------------------------------------------------------
172
173 //------------------------------------------------------------------------------------------------
176 {
177 switch (m_eStanceLimit)
178 {
179 case ECharacterStance.STAND:
180 return stance;
181 case ECharacterStance.CROUCH:
182 {
183 if (stance == ECharacterStance.STAND)
184 stance = m_eStanceLimit;
185 return stance;
186 }
187 case ECharacterStance.PRONE:
188 return ECharacterStance.PRONE;
189 }
190 return stance;
191 }
192};
ArmaReforgerScripted GetGame()
Definition game.c:1398
EAIDebugMsgType
ref ScriptInvoker Event_OnControlModeChanged
SCR_AIGroupInfoComponentClass IDLE
Group has no waypoints and does not engage an enemy.
SCR_AIGroupInfoComponentClass AUTONOMOUS
Group behaves autonomously, e.g. engaging an enemy.
ECharacterStance GetStanceLimit()
void OnAgentSelectedGrenade(AIAgent soldierAgent)
bool IsIllumFlareAllowed()
ECharacterStance GetAllowedStance(ECharacterStance stance)
ECharacterStance m_eStanceLimit
upper stance limit set by group leader's stance in ActivityFollow for recruited AIs to copy;
float m_fTimeGrenadeThrowAllowed_ms
SCR_AIGroupInfoComponentClass FOLLOWING_WAYPOINT
Group is following a waypoint.
SCR_AIGroupInfoComponentClass LAST
void RplSetGroupControlMode(EGroupControlMode currControlMode)
void SetGroupControlMode(EGroupControlMode currControlMode)
const float ILLUM_FLARE_MAX_TIMEOUT_MS
void OnIllumFlareUsed()
SCR_AIGroupInfoComponentClass GRENADE_THROW_TIMEOUT_MS
const float ILLUM_FLARE_MIN_TIMEOUT_MS
bool IsGrenadeThrowAllowed(AIAgent soldierAgent)
override bool RplLoad(ScriptBitReader reader)
EGroupControlMode GetGroupControlMode()
float m_fTimeIllumFlareAllowed_ms
void SetStanceLimit(ECharacterStance stance)
ScriptInvoker GetOnControlModeChanged()
SCR_AIGroupUtilityComponent m_UtilityComponent
AIAgent m_GrenadeThrowAgent
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
Definition Math.c:13
Main replication API.
Definition Replication.c:14
ScriptInvoker_AIWorldControlModeChanged GetOnControlModeChanged()
Definition SCR_AIWorld.c:54
IEntity GetOwner()
Owner entity of the fuel tank.
override void EOnInit(IEntity owner)
ECharacterStance
@ NONE
When Shape is created and not initialized yet.
Definition ShapeType.c:15
EntityEvent
Various entity events.
Definition EntityEvent.c:14
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
ScriptInvokerBase< func > ScriptInvoker
Definition tools.c:134