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_AIFindCover.c
Go to the documentation of this file.
1
class
SCR_AIFindCover
:
AITaskScripted
2
{
3
// Inputs
4
protected
static
const
string
PORT_TARGET_POS
=
"TargetPos"
;
5
protected
static
const
string
PORT_COVER_QUERY_PROPERTIES
=
"CoverQueryProps"
;
6
7
// Outputs
8
protected
static
const
string
PORT_COVER_LOCK
=
"CoverLock"
;
9
10
11
// Cached components of this agent
12
protected
SCR_AICombatMoveState
m_State
;
13
protected
AIPathfindingComponent
m_PathfindingComp
;
14
15
protected
ChimeraCoverManagerComponent
m_CoverMgr
;
16
17
// Constants for amount of covers to check for high priority cover queries and low priority cover queries
18
const
vector
NEAREST_POLY_HALF_EXTEND
=
"1.0 2.0 1.0"
;
19
const
int
MAX_COVERS_HIGH_PRIORITY
= 25;
20
const
int
MAX_COVERS_LOW_PRIORITY
= 15;
21
const
float
NAVMESH_AREA_COST_SCALE
= 1/3.0;
// It's scaled according to cost of Offroad area type, which is 3.0.
22
23
24
#ifdef WORKBENCH
25
protected
ref array<ref Shape> m_aDebugShapes = {};
26
protected
ref
Shape
m_CoverShape;
27
28
protected
static
const
ShapeFlags
m_SphereFlags =
ShapeFlags
.NOOUTLINE|
ShapeFlags
.NOZBUFFER|
ShapeFlags
.TRANSP;
29
protected
static
const
ShapeFlags
m_LineFlags =
ShapeFlags
.NOOUTLINE|
ShapeFlags
.TRANSP;
30
protected
static
const
float
DEBUGSPHERE_RADIUS = 0.1;
31
#endif
32
33
//------------------------------------------------------------------------------------------------
34
override
void
OnInit
(AIAgent owner)
35
{
36
SCR_AIUtilityComponent utilityComp = SCR_AIUtilityComponent.Cast(owner.FindComponent(SCR_AIUtilityComponent));
37
if
(utilityComp)
38
m_State
= utilityComp.m_CombatMoveState;
39
40
AIWorld aiWorld =
GetGame
().GetAIWorld();
41
if
(aiWorld)
42
m_CoverMgr
= ChimeraCoverManagerComponent.Cast(aiWorld.FindComponent(ChimeraCoverManagerComponent));
43
44
IEntity
myEntity = owner.GetControlledEntity();
45
if
(myEntity)
46
m_PathfindingComp
= AIPathfindingComponent.Cast(myEntity.
FindComponent
(AIPathfindingComponent));
47
}
48
49
//------------------------------------------------------------------------------------------------
50
override
ENodeResult
EOnTaskSimulate
(AIAgent owner,
float
dt)
51
{
52
IEntity
ownerEntity = owner.GetControlledEntity();
53
if
(!ownerEntity || !
m_State
|| !
m_CoverMgr
|| !
m_PathfindingComp
)
54
return
ENodeResult
.FAIL;
55
56
//------------------------------------------------------------------------------------------------
57
// Read inputs
58
59
CoverQueryProperties
queryProps;
60
GetVariableIn
(
PORT_COVER_QUERY_PROPERTIES
, queryProps);
61
if
(!queryProps)
62
return
ENodeResult
.FAIL;
63
64
//------------------------------------------------------------------------------------------------
65
// Find cover
66
67
#ifdef WORKBENCH
68
ClearDebug();
69
#endif
70
71
vector
coverPos, coverTallestPos;
72
int
tilex, tiley, coverId;
73
74
bool
coverFound =
m_CoverMgr
.GetBestCover(
"Soldiers"
,
m_PathfindingComp
, queryProps, coverPos, coverTallestPos, tilex, tiley, coverId);
75
76
#ifdef WORKBENCH
77
if
(
DiagMenu
.GetBool(
SCR_DebugMenuID
.DEBUGUI_AI_DEBUG_COVERS))
78
{
79
m_aDebugShapes.Insert(
Shape
.CreateSphere(
Color
.GREEN, m_SphereFlags, ownerEntity.
GetOrigin
(), 0.2));
80
}
81
#endif
82
83
if
(!coverFound)
84
{
85
// Release previous cover lock
86
//m_State.ReleaseCover(); // Do not release previous cover if new one was not found. We still want to occupy it.
87
ClearVariable
(
PORT_COVER_LOCK
);
88
return
ENodeResult
.FAIL;
89
}
90
91
// Create new cover lock, and release the old one
92
m_State
.AssignCover(
new
SCR_AICoverLock
(tilex, tiley, coverId, coverPos, coverTallestPos));
93
94
SetVariableOut
(
PORT_COVER_LOCK
,
m_State
.GetAssignedCover());
95
96
#ifdef WORKBENCH
97
if
(
DiagMenu
.GetBool(
SCR_DebugMenuID
.DEBUGUI_AI_DEBUG_COVERS))
98
{
99
m_CoverShape =
Shape
.CreateSphere(
Color
.PINK, m_SphereFlags, coverPos, 0.5);
100
}
101
#endif
102
103
return
ENodeResult
.SUCCESS;
104
}
105
106
protected
static
ref
TStringArray
s_aVarsIn
= {
107
PORT_COVER_QUERY_PROPERTIES
108
};
109
override
TStringArray
GetVariablesIn
()
110
{
111
return
s_aVarsIn
;
112
}
113
114
protected
static
ref
TStringArray
s_aVarsOut
= {
115
PORT_COVER_LOCK
116
};
117
override
TStringArray
GetVariablesOut
()
118
{
119
return
s_aVarsOut
;
120
}
121
122
override
static
protected
bool
VisibleInPalette
() {
return
true
; }
123
124
static
override
string
GetOnHoverDescription
()
125
{
126
return
"Finds and locks cover through cover manager. Keep in mind that cover is also assigned to CombatMoveState!"
;
127
}
128
129
static
override
bool
CanReturnRunning
() {
return
true
; }
130
131
#ifdef WORKBENCH
132
private
void
ClearDebug()
133
{
134
m_aDebugShapes.Clear();
135
}
136
#endif
137
}
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
AITaskScripted
Definition
AITaskScripted.c:13
Color
Definition
Color.c:13
CoverQueryProperties
Definition
CoverQueryProperties.c:2
DiagMenu
Diagnostic and developer menu system.
Definition
DiagMenu.c:18
IEntity
Definition
IEntity.c:13
IEntity::FindComponent
proto external Managed FindComponent(typename typeName)
IEntity::GetOrigin
proto external vector GetOrigin()
Node::SetVariableOut
proto void SetVariableOut(string name, void val)
Node::GetVariableIn
proto bool GetVariableIn(string name, out void val)
Node::ClearVariable
proto void ClearVariable(string name)
SCR_AICoverLock
Definition
SCR_AICoverLock.c:20
SCR_AIFindCover
Definition
SCR_AIFindCover.c:2
SCR_AIFindCover::MAX_COVERS_HIGH_PRIORITY
const int MAX_COVERS_HIGH_PRIORITY
Definition
SCR_AIFindCover.c:19
SCR_AIFindCover::PORT_TARGET_POS
static const string PORT_TARGET_POS
Definition
SCR_AIFindCover.c:4
SCR_AIFindCover::OnInit
override void OnInit(AIAgent owner)
Definition
SCR_AIFindCover.c:34
SCR_AIFindCover::s_aVarsIn
static ref TStringArray s_aVarsIn
Definition
SCR_AIFindCover.c:106
SCR_AIFindCover::NAVMESH_AREA_COST_SCALE
const float NAVMESH_AREA_COST_SCALE
Definition
SCR_AIFindCover.c:21
SCR_AIFindCover::GetVariablesOut
override TStringArray GetVariablesOut()
Definition
SCR_AIFindCover.c:117
SCR_AIFindCover::CanReturnRunning
static override bool CanReturnRunning()
Definition
SCR_AIFindCover.c:129
SCR_AIFindCover::GetOnHoverDescription
static override string GetOnHoverDescription()
Definition
SCR_AIFindCover.c:124
SCR_AIFindCover::m_CoverMgr
ChimeraCoverManagerComponent m_CoverMgr
Definition
SCR_AIFindCover.c:15
SCR_AIFindCover::VisibleInPalette
bool VisibleInPalette()
Definition
SCR_AIFindCover.c:122
SCR_AIFindCover::s_aVarsOut
static ref TStringArray s_aVarsOut
Definition
SCR_AIFindCover.c:114
SCR_AIFindCover::EOnTaskSimulate
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
Definition
SCR_AIFindCover.c:50
SCR_AIFindCover::GetVariablesIn
override TStringArray GetVariablesIn()
Definition
SCR_AIFindCover.c:109
SCR_AIFindCover::MAX_COVERS_LOW_PRIORITY
const int MAX_COVERS_LOW_PRIORITY
Definition
SCR_AIFindCover.c:20
SCR_AIFindCover::PORT_COVER_QUERY_PROPERTIES
static const string PORT_COVER_QUERY_PROPERTIES
Definition
SCR_AIFindCover.c:5
SCR_AIFindCover::m_State
SCR_AICombatMoveState m_State
Definition
SCR_AIFindCover.c:12
SCR_AIFindCover::m_PathfindingComp
AIPathfindingComponent m_PathfindingComp
Definition
SCR_AIFindCover.c:13
SCR_AIFindCover::NEAREST_POLY_HALF_EXTEND
const vector NEAREST_POLY_HALF_EXTEND
Definition
SCR_AIFindCover.c:18
SCR_AIFindCover::PORT_COVER_LOCK
static const string PORT_COVER_LOCK
Definition
SCR_AIFindCover.c:8
Shape
Instance of created debug visualizer.
Definition
Shape.c:14
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
scripts
Game
AI
Covers
SCR_AIFindCover.c
Generated by
1.17.0