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_AIFindFirePositionBehavior.c
Go to the documentation of this file.
1
4
5
class
SCR_AIFindFirePositionBehavior :
SCR_AIBehaviorBase
6
{
7
static
const
float
SNIPER_MIN_DISTANCE = 70.0;
8
static
const
float
SNIPER_MAX_DISTANCE = 180.0;
9
static
const
float
SNIPER_DURATION_S = 3*60.0;
10
11
ref SCR_BTParam<vector> m_vTargetPosition =
new
SCR_BTParam<vector>(
"TargetPos"
);
12
ref SCR_BTParam<float> m_fMinDistance =
new
SCR_BTParam<float>(
"MinDist"
);
13
ref SCR_BTParam<float> m_fMaxDistance =
new
SCR_BTParam<float>(
"MaxDist"
);
14
ref SCR_BTParam<float> m_fDuration_s =
new
SCR_BTParam<float>(
"Duration_s"
);
15
16
EAIUnitType
m_eTargetUnitType;
17
18
//---------------------------------------------------------------------------------------------------------------------------------
19
override
int
GetCause
()
20
{
21
return
SCR_EAIBehaviorCause
.COMBAT;
22
}
23
24
//----------------------------------------------------------------------------------------------------------------
25
void
InitParameters(
vector
targetPos,
float
minDistance,
float
maxDistance,
float
duration)
26
{
27
m_vTargetPosition.Init(
this
, targetPos);
28
m_fMinDistance.Init(
this
, minDistance);
29
m_fMaxDistance.Init(
this
, maxDistance);
30
m_fDuration_s.Init(
this
, duration);
31
}
32
//----------------------------------------------------------------------------------------------------------------
33
void
SCR_AIFindFirePositionBehavior(SCR_AIUtilityComponent utility,
SCR_AIActivityBase
groupActivity,
vector
targetPos,
34
float
minDistance,
float
maxDistance,
EAIUnitType
targetUnitType,
float
duration,
float
priorityLevel =
PRIORITY_LEVEL_NORMAL
)
35
{
36
InitParameters(targetPos, minDistance, maxDistance, duration);
37
38
m_eTargetUnitType = targetUnitType;
39
40
m_sBehaviorTree
=
"{905124EEBF36D180}AI/BehaviorTrees/Chimera/Soldier/FindFirePosition.bt"
;
41
SetPriority(PRIORITY_BEHAVIOR_FIND_FIRE_POSITION);
42
m_fPriorityLevel
.m_Value = priorityLevel;
43
m_bAllowLook
=
true
;
44
}
45
46
//----------------------------------------------------------------------------------------------------------------
47
override
float
CustomEvaluate
()
48
{
49
// Complete when we have found some target to attack
50
if
(
m_Utility
.m_CombatComponent.GetCurrentTarget())
51
{
52
Complete();
53
return
0;
54
}
55
56
return
GetPriority
();
57
}
58
59
//-----------------------------------------------------------------------------------------------------
60
override
void
OnActionSelected
()
61
{
62
super.OnActionSelected();
63
64
m_Utility
.m_CombatComponent.SetExpectedEnemyType(m_eTargetUnitType);
65
}
66
}
67
68
class
SCR_AIGetFindFirePositionNextPos :
SCR_AIActionTask
69
{
70
protected
static
const
string
PORT_NEXT_POSITION
=
"NextPosition"
;
71
72
// When searching for next position, it will be within this range from our current position
73
protected
const
float
NEXT_POS_MIN_DIST
= 13.0;
74
protected
const
float
NEXT_POS_MAX_DIST
= 20.0;
75
76
// When walking towards or away from target, the position will be randomized by this radius
77
protected
const
float
WALK_DIRECTLY_RANDOM_RADIUS
= 4.0;
78
79
//-----------------------------------------------------------------------------------------------------
80
override
ENodeResult
EOnTaskSimulate
(AIAgent owner,
float
dt)
81
{
82
if
(!
m_UtilityComp
)
83
return
ENodeResult
.FAIL;
84
85
SCR_AIActionBase executedAction =
GetExecutedAction
();
86
SCR_AIFindFirePositionBehavior
behavior =
SCR_AIFindFirePositionBehavior
.Cast(executedAction);
87
if
(!behavior)
88
return
ENodeResult
.FAIL;
89
90
vector
targetPos = behavior.m_vTargetPosition.m_Value;
91
IEntity
myEntity = owner.GetControlledEntity();
92
vector
myPos = myEntity.
GetOrigin
();
93
94
vector
vFromTarget =
vector
.Direction(targetPos, myPos);
95
vFromTarget[1] = 0;
96
float
distanceToTarget = vFromTarget.Length();
97
vector
vDirFromTarget = vFromTarget.Normalized();
// Direction vector from target to us
98
vDirFromTarget.Normalize();
99
100
vector
nextMovePos;
101
float
minDist = behavior.m_fMinDistance.m_Value;
102
float
maxDist = behavior.m_fMaxDistance.m_Value;
103
if
(distanceToTarget > minDist &&
104
distanceToTarget < maxDist)
105
{
106
// We are within optimal range, walk around
107
nextMovePos =
s_AIRandomGenerator
.GenerateRandomPointInRadius(
NEXT_POS_MIN_DIST
,
NEXT_POS_MAX_DIST
, myPos);
108
}
109
else
110
{
111
float
randomDistance =
Math
.RandomFloat(10, 20);
112
float
dirMultiplier = 1;
113
if
(distanceToTarget > maxDist)
114
{
115
// We are too far, move closer
116
dirMultiplier = -1;
117
}
118
119
vector
nextMovePosCenter = myPos + dirMultiplier * randomDistance * vDirFromTarget;
120
nextMovePos =
s_AIRandomGenerator
.GenerateRandomPointInRadius(0,
WALK_DIRECTLY_RANDOM_RADIUS
, nextMovePosCenter);
121
}
122
123
SetVariableOut
(
PORT_NEXT_POSITION
, nextMovePos);
124
125
return
ENodeResult
.SUCCESS;
126
}
127
128
//-----------------------------------------------------------------------------------------------------
129
static
override
bool
VisibleInPalette
() {
return
true
; }
130
131
//-----------------------------------------------------------------------------------------------------
132
protected
static
ref
TStringArray
s_aVarsOut
= {
PORT_NEXT_POSITION
};
133
override
TStringArray
GetVariablesOut
() {
return
s_aVarsOut; }
134
}
135
136
class
SCR_AIGetFirePositionBehaviorParameters
:
SCR_AIGetActionParameters
137
{
138
static
ref
TStringArray
s_aVarsOut = (
new
SCR_AIFindFirePositionBehavior
(null, null,
vector
.Zero, 0, 0, 0, 0)).
GetPortNames
();
139
override
TStringArray
GetVariablesOut
() {
return
s_aVarsOut; }
140
141
static
override
bool
VisibleInPalette
() {
return
true
; }
142
};
m_fPriorityLevel
ref SCR_BTParam< float > m_fPriorityLevel
Definition
SCR_AIAction.c:87
PRIORITY_LEVEL_NORMAL
enum EAIActionFailReason PRIORITY_LEVEL_NORMAL
GetPortNames
TStringArray GetPortNames()
Definition
SCR_AIAction.c:238
m_sBehaviorTree
ResourceName m_sBehaviorTree
Definition
SCR_AIAction.c:89
OnActionSelected
override void OnActionSelected()
Definition
SCR_AIAction.c:193
GetCause
int GetCause()
Definition
SCR_AIAction.c:129
SCR_AIActivityBase
void SCR_AIActivityBase(SCR_AIGroupUtilityComponent utility, AIWaypoint relatedWaypoint)
Definition
SCR_AIActivity.c:44
m_Utility
enum SCR_EAIActivityCause m_Utility
SCR_AIBehaviorBase
void SCR_AIBehaviorBase(SCR_AIUtilityComponent utility, SCR_AIActivityBase groupActivity)
Definition
SCR_AIBehavior.c:23
SCR_EAIBehaviorCause
SCR_EAIBehaviorCause
Definition
SCR_AIBehavior.c:2
m_bAllowLook
bool m_bAllowLook
Definition
SCR_AIBehavior.c:18
EOnTaskSimulate
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
Definition
SCR_AIFindFirePositionBehavior.c:80
NEXT_POS_MAX_DIST
const float NEXT_POS_MAX_DIST
Definition
SCR_AIFindFirePositionBehavior.c:74
NEXT_POS_MIN_DIST
const float NEXT_POS_MIN_DIST
Definition
SCR_AIFindFirePositionBehavior.c:73
PORT_NEXT_POSITION
SCR_AIFindFirePositionBehavior PORT_NEXT_POSITION
WALK_DIRECTLY_RANDOM_RADIUS
const float WALK_DIRECTLY_RANDOM_RADIUS
Definition
SCR_AIFindFirePositionBehavior.c:77
GetVariablesOut
override TStringArray GetVariablesOut()
Definition
SCR_AIFindFirePositionBehavior.c:133
CustomEvaluate
override float CustomEvaluate()
Definition
SCR_AIMoveFromDanger.c:135
s_aVarsOut
SCR_AIPickupInventoryItemsBehavior s_aVarsOut
Definition
SCR_AIGetCombatMoveRequestParameters.c:152
m_UtilityComp
AIBaseUtilityComponent m_UtilityComp
Definition
SCR_AISettingsBaseComponent.c:26
s_AIRandomGenerator
class SCR_AINodePortsHelpers s_AIRandomGenerator
IEntity
Definition
IEntity.c:13
IEntity::GetOrigin
proto external vector GetOrigin()
Math
Definition
Math.c:13
Node::SetVariableOut
proto void SetVariableOut(string name, void val)
Node::VisibleInPalette
bool VisibleInPalette()
Node::GetVariablesOut
TStringArray GetVariablesOut()
Definition
Node.c:28
SCR_AIActionTask
Definition
SCR_AIBehaviorTask.c:2
SCR_AIActionTask::GetExecutedAction
SCR_AIActionBase GetExecutedAction()
Returns current action from the utility component.
Definition
SCR_AIBehaviorTask.c:53
SCR_AIFindFirePositionBehavior
Definition
SCR_AIFindFirePositionBehavior.c:6
SCR_AIGetActionParameters
Definition
SCR_AIGetActionParameters.c:23
SCR_AIGetActionParameters::VisibleInPalette
static override bool VisibleInPalette()
Definition
SCR_AIGetActionParameters.c:38
SCR_AIGetFirePositionBehaviorParameters
Definition
SCR_AIFindFirePositionBehavior.c:137
vector
Definition
vector.c:13
ENodeResult
ENodeResult
Definition
ENodeResult.c:13
EAIUnitType
EAIUnitType
Definition
EAIUnitType.c:13
GetPriority
int GetPriority()
Definition
SCR_BaseManualCameraComponent.c:247
TStringArray
array< string > TStringArray
Definition
Types.c:385
scripts
Game
AI
Behavior
SCR_AIFindFirePositionBehavior.c
Generated by
1.17.0