Arma Reforger Explorer
1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Toggle main menu visibility
Loading...
Searching...
No Matches
SCR_AIUpdateTargetSuppressionData.c
Go to the documentation of this file.
1
class
SCR_AIUpdateTargetSuppressionData
:
AITaskScripted
2
{
3
// Inputs
4
protected
static
const
string
PORT_SUPPRESSION_VOLUME
=
"SuppressionVolume"
;
5
6
// Outputs
7
protected
static
const
string
PORT_VISIBLE
=
"Visible"
;
8
protected
static
const
string
PORT_TIME_LAST_SEEN
=
"TimeLastSeen_ms"
;
9
protected
static
const
string
PORT_FIRE_TREE_ID
=
"FireTreeId"
;
10
11
// These IDs must match to actual trees in the tree
12
protected
const
int
FIRE_TREE_INVALID
= -1;
// No aiming or firing is allowed at all
13
protected
const
int
FIRE_TREE_LOOK
= 0;
// Looking at target without firing
14
protected
const
int
FIRE_TREE_SUPPRESSIVE
= 1;
15
16
// Related to visibility check
17
protected
float
m_fVisibilityCheckTimer
=
VISIBILITY_CHECK_INTERVAL_S
;
// We need the vision check to run right on start. This data is required by movement logic.
18
protected
bool
m_bTargetVisible
=
false
;
19
protected
float
m_fTargetLastSeenTime_ms
= 0;
// World time
20
protected
ref
TraceParam
m_TraceParam
;
21
protected
ref array<IEntity>
m_TraceParamExcludeArray
;
22
protected
const
float
VISIBILITY_CHECK_INTERVAL_S
= 0.75;
23
protected
const
float
VISIBILITY_CHECK_TRACE_RESULT_THRESHOLD
= 0.5;
24
25
// Other
26
protected
SCR_AIUtilityComponent
m_UtilityComponent
;
27
protected
PerceptionComponent
m_PerceptionComponent
;
28
29
#ifdef WORKBENCH
30
protected
ref array<ref Shape> m_aDebugShapes = {};
31
#endif
32
33
//---------------------------------------------------------------------------
34
override
void
OnInit
(AIAgent owner)
35
{
36
m_UtilityComponent
= SCR_AIUtilityComponent.Cast(owner.FindComponent(SCR_AIUtilityComponent));
37
IEntity
myEntity = owner.GetControlledEntity();
38
if
(myEntity)
39
m_PerceptionComponent
= PerceptionComponent.Cast(myEntity.
FindComponent
(PerceptionComponent));
40
}
41
42
//---------------------------------------------------------------------------
43
override
ENodeResult
EOnTaskSimulate
(AIAgent owner,
float
dt)
44
{
45
SCR_AISuppressionVolumeBase
suppressionVolume;
46
if
(!
GetVariableIn
(
PORT_SUPPRESSION_VOLUME
, suppressionVolume) || !suppressionVolume)
47
return
ENodeResult
.FAIL;
48
49
IEntity
myEntity = owner.GetControlledEntity();
50
if
(!myEntity || !
m_UtilityComponent
|| !
m_PerceptionComponent
)
51
return
ENodeResult
.FAIL;
52
53
m_fVisibilityCheckTimer
+= dt;
54
if
(
m_fVisibilityCheckTimer
>=
VISIBILITY_CHECK_INTERVAL_S
)
55
{
56
m_bTargetVisible
=
CheckTargetVisibility
(myEntity, suppressionVolume);
57
58
if
(
m_bTargetVisible
)
59
m_fTargetLastSeenTime_ms
=
GetGame
().GetWorld().GetWorldTime();
60
61
m_fVisibilityCheckTimer
= 0;
62
}
63
64
int
fireTreeid =
ResolveFireTree
(
m_bTargetVisible
);
65
66
// Write data to ports
67
SetVariableOut
(
PORT_VISIBLE
,
m_bTargetVisible
);
68
SetVariableOut
(
PORT_TIME_LAST_SEEN
,
m_fTargetLastSeenTime_ms
);
69
SetVariableOut
(
PORT_FIRE_TREE_ID
, fireTreeid);
70
71
return
ENodeResult
.SUCCESS;
72
}
73
74
//---------------------------------------------------------------------------
75
bool
CheckTargetVisibility
(notnull
IEntity
myEntity, notnull
SCR_AISuppressionVolumeBase
suppressionVolume)
76
{
77
// Init trace params
78
if
(!
m_TraceParam
)
79
{
80
m_TraceParam
=
new
TraceParam
();
81
m_TraceParam
.TargetLayers = EPhysicsLayerDefs.FireGeometry;
82
m_TraceParam
.Flags =
TraceFlags
.ENTS |
TraceFlags
.OCEAN |
TraceFlags
.WORLD |
TraceFlags
.ANY_CONTACT;
83
m_TraceParamExcludeArray
= {};
84
m_TraceParam
.ExcludeArray =
m_TraceParamExcludeArray
;
85
}
86
87
// Update entity exclude array
88
m_TraceParamExcludeArray
.Clear();
89
m_TraceParamExcludeArray
.Insert(myEntity);
90
IEntity
myEntityParent = myEntity.
GetParent
();
91
if
(myEntityParent)
92
{
93
m_TraceParamExcludeArray
.Insert(myEntityParent);
94
IEntity
myEntityParentParent = myEntityParent.
GetParent
();
95
if
(myEntityParentParent)
96
m_TraceParamExcludeArray
.Insert(myEntityParentParent);
97
}
98
99
// Update start and end pos
100
// If we were to trace from start to end, and trace fraction in result is above VISIBILITY_CHECK_TRACE_RESULT_THRESHOLD,
101
// then we treat it as good visibility to target.
102
// But it means that we don't need to trace whole length anyway, but only fraction of it.
103
// That's why actual trace end is lerped.
104
ChimeraCharacter
myCharacter =
ChimeraCharacter
.Cast(myEntity);
105
if
(myCharacter)
106
m_TraceParam
.Start = myCharacter.EyePosition();
107
else
108
m_TraceParam
.Start = myEntity.GetOrigin();
109
vector
traceEndPosIdeal = suppressionVolume.GetCenterPosition() +
Vector
(0, 2, 0);
// Raise it a few meters up, to help around slopes
110
m_TraceParam
.End =
vector
.Lerp(
m_TraceParam
.Start, traceEndPosIdeal,
VISIBILITY_CHECK_TRACE_RESULT_THRESHOLD
);
111
112
float
traceResult =
GetGame
().GetWorld().TraceMove(
m_TraceParam
, null);
113
114
bool
visible = traceResult == 1.0;
115
116
#ifdef WORKBENCH
117
if
(
DiagMenu
.GetBool(
SCR_DebugMenuID
.DEBUGUI_AI_SHOW_DEBUG_SHAPES))
118
{
119
m_aDebugShapes.Clear();
120
121
int
lineColor;
122
if
(visible)
123
lineColor =
Color
.GREEN;
124
else
125
lineColor =
Color
.RED;
126
127
vector
lineVerts[2];
128
lineVerts[0] =
m_TraceParam
.Start;
129
lineVerts[1] =
m_TraceParam
.End;
130
Shape
lineShape =
Shape
.CreateLines(lineColor,
ShapeFlags
.DEFAULT, lineVerts, 2);
131
m_aDebugShapes.Insert(lineShape);
132
133
if
(traceResult != 1.0)
134
{
135
vector
hitPos =
m_TraceParam
.Start + traceResult * (
m_TraceParam
.End -
m_TraceParam
.Start);
136
Shape
sphereShape =
Shape
.CreateSphere(
Color
.RED,
ShapeFlags
.DEFAULT, hitPos, 0.2);
137
m_aDebugShapes.Insert(sphereShape);
138
}
139
}
140
#endif
141
142
return
visible;
143
}
144
145
//---------------------------------------------------------------------------
146
int
ResolveFireTree
(
bool
targetVisible)
147
{
148
// Is aiming forbidden by combat move?
149
SCR_AIBehaviorBase
executedBehavior =
SCR_AIBehaviorBase
.Cast(
m_UtilityComponent
.GetExecutedAction());
150
if
(executedBehavior && executedBehavior.m_bUseCombatMove && !
m_UtilityComponent
.m_CombatMoveState.m_bAimAtTarget)
151
return
FIRE_TREE_INVALID
;
152
153
// Friendly in aim?
154
if
(
m_PerceptionComponent
.GetFriendlyInLineOfFire())
155
return
FIRE_TREE_LOOK
;
156
157
if
(targetVisible)
158
return
FIRE_TREE_SUPPRESSIVE
;
159
160
return
FIRE_TREE_LOOK
;
161
}
162
163
//---------------------------------------------------------------------------
164
protected
static
ref
TStringArray
s_aVarsIn
= {
PORT_SUPPRESSION_VOLUME
};
165
override
TStringArray
GetVariablesIn
() {
return
s_aVarsIn
; }
166
167
protected
static
ref
TStringArray
s_aVarsOut
= {
PORT_VISIBLE
,
PORT_TIME_LAST_SEEN
,
PORT_FIRE_TREE_ID
};
168
override
TStringArray
GetVariablesOut
() {
return
s_aVarsOut
; }
169
170
static
override
bool
VisibleInPalette
() {
return
true
; }
171
}
SCR_DebugMenuID
SCR_DebugMenuID
This enum contains all IDs for DiagMenu entries added in script.
Definition
DebugMenuID.c:4
GetGame
ArmaReforgerScripted GetGame()
Definition
game.c:1398
SCR_AIBehaviorBase
void SCR_AIBehaviorBase(SCR_AIUtilityComponent utility, SCR_AIActivityBase groupActivity)
Definition
SCR_AIBehavior.c:23
AITaskScripted
Definition
AITaskScripted.c:13
ChimeraCharacter
Definition
ChimeraCharacter.c:13
Color
Definition
Color.c:13
DiagMenu
Diagnostic and developer menu system.
Definition
DiagMenu.c:18
IEntity
Definition
IEntity.c:13
IEntity::FindComponent
proto external Managed FindComponent(typename typeName)
IEntity::GetParent
proto external IEntity GetParent()
Node::SetVariableOut
proto void SetVariableOut(string name, void val)
Node::GetVariableIn
proto bool GetVariableIn(string name, out void val)
SCR_AISuppressionVolumeBase
Definition
SCR_AISuppressionVolume.c:4
SCR_AIUpdateTargetSuppressionData
Definition
SCR_AIUpdateTargetSuppressionData.c:2
SCR_AIUpdateTargetSuppressionData::PORT_FIRE_TREE_ID
static const string PORT_FIRE_TREE_ID
Definition
SCR_AIUpdateTargetSuppressionData.c:9
SCR_AIUpdateTargetSuppressionData::FIRE_TREE_INVALID
const int FIRE_TREE_INVALID
Definition
SCR_AIUpdateTargetSuppressionData.c:12
SCR_AIUpdateTargetSuppressionData::PORT_VISIBLE
static const string PORT_VISIBLE
Definition
SCR_AIUpdateTargetSuppressionData.c:7
SCR_AIUpdateTargetSuppressionData::VISIBILITY_CHECK_INTERVAL_S
const float VISIBILITY_CHECK_INTERVAL_S
Definition
SCR_AIUpdateTargetSuppressionData.c:22
SCR_AIUpdateTargetSuppressionData::FIRE_TREE_LOOK
const int FIRE_TREE_LOOK
Definition
SCR_AIUpdateTargetSuppressionData.c:13
SCR_AIUpdateTargetSuppressionData::m_PerceptionComponent
PerceptionComponent m_PerceptionComponent
Definition
SCR_AIUpdateTargetSuppressionData.c:27
SCR_AIUpdateTargetSuppressionData::VISIBILITY_CHECK_TRACE_RESULT_THRESHOLD
const float VISIBILITY_CHECK_TRACE_RESULT_THRESHOLD
Definition
SCR_AIUpdateTargetSuppressionData.c:23
SCR_AIUpdateTargetSuppressionData::CheckTargetVisibility
bool CheckTargetVisibility(notnull IEntity myEntity, notnull SCR_AISuppressionVolumeBase suppressionVolume)
Definition
SCR_AIUpdateTargetSuppressionData.c:75
SCR_AIUpdateTargetSuppressionData::m_fVisibilityCheckTimer
float m_fVisibilityCheckTimer
Definition
SCR_AIUpdateTargetSuppressionData.c:17
SCR_AIUpdateTargetSuppressionData::EOnTaskSimulate
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
Definition
SCR_AIUpdateTargetSuppressionData.c:43
SCR_AIUpdateTargetSuppressionData::PORT_SUPPRESSION_VOLUME
static const string PORT_SUPPRESSION_VOLUME
Definition
SCR_AIUpdateTargetSuppressionData.c:4
SCR_AIUpdateTargetSuppressionData::m_TraceParamExcludeArray
ref array< IEntity > m_TraceParamExcludeArray
Definition
SCR_AIUpdateTargetSuppressionData.c:21
SCR_AIUpdateTargetSuppressionData::FIRE_TREE_SUPPRESSIVE
const int FIRE_TREE_SUPPRESSIVE
Definition
SCR_AIUpdateTargetSuppressionData.c:14
SCR_AIUpdateTargetSuppressionData::m_fTargetLastSeenTime_ms
float m_fTargetLastSeenTime_ms
Definition
SCR_AIUpdateTargetSuppressionData.c:19
SCR_AIUpdateTargetSuppressionData::s_aVarsOut
static ref TStringArray s_aVarsOut
Definition
SCR_AIUpdateTargetSuppressionData.c:167
SCR_AIUpdateTargetSuppressionData::PORT_TIME_LAST_SEEN
static const string PORT_TIME_LAST_SEEN
Definition
SCR_AIUpdateTargetSuppressionData.c:8
SCR_AIUpdateTargetSuppressionData::s_aVarsIn
static ref TStringArray s_aVarsIn
Definition
SCR_AIUpdateTargetSuppressionData.c:164
SCR_AIUpdateTargetSuppressionData::m_bTargetVisible
bool m_bTargetVisible
Definition
SCR_AIUpdateTargetSuppressionData.c:18
SCR_AIUpdateTargetSuppressionData::OnInit
override void OnInit(AIAgent owner)
Definition
SCR_AIUpdateTargetSuppressionData.c:34
SCR_AIUpdateTargetSuppressionData::m_TraceParam
ref TraceParam m_TraceParam
Definition
SCR_AIUpdateTargetSuppressionData.c:20
SCR_AIUpdateTargetSuppressionData::GetVariablesOut
override TStringArray GetVariablesOut()
Definition
SCR_AIUpdateTargetSuppressionData.c:168
SCR_AIUpdateTargetSuppressionData::GetVariablesIn
override TStringArray GetVariablesIn()
Definition
SCR_AIUpdateTargetSuppressionData.c:165
SCR_AIUpdateTargetSuppressionData::m_UtilityComponent
SCR_AIUtilityComponent m_UtilityComponent
Definition
SCR_AIUpdateTargetSuppressionData.c:26
SCR_AIUpdateTargetSuppressionData::ResolveFireTree
int ResolveFireTree(bool targetVisible)
Definition
SCR_AIUpdateTargetSuppressionData.c:146
SCR_AIUpdateTargetSuppressionData::VisibleInPalette
static override bool VisibleInPalette()
Definition
SCR_AIUpdateTargetSuppressionData.c:170
Shape
Instance of created debug visualizer.
Definition
Shape.c:14
TraceParam
Definition
TraceParam.c:16
vector
Definition
vector.c:13
ENodeResult
ENodeResult
Definition
ENodeResult.c:13
ShapeFlags
ShapeFlags
Definition
ShapeFlags.c:13
TStringArray
array< string > TStringArray
Definition
Types.c:385
Vector
proto native vector Vector(float x, float y, float z)
TraceFlags
TraceFlags
Definition
TraceFlags.c:13
scripts
Game
AI
ScriptedNodes
Soldier
SCR_AIUpdateTargetSuppressionData.c
Generated by
1.17.0