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_AICalculateNextCombatMovePos.c
Go to the documentation of this file.
1
class
SCR_AICalculateNextCombatMovePos
:
AITaskScripted
2
{
3
// Inputs
4
protected
static
const
string
PORT_REQUEST
=
"Request"
;
5
protected
static
const
string
PORT_TARGET_POS
=
"TargetPos"
;
6
7
// Outputs
8
protected
static
const
string
PORT_POS
=
"Pos"
;
9
10
//--------------------------------------------------------------------------------------------
11
override
ENodeResult
EOnTaskSimulate
(AIAgent owner,
float
dt)
12
{
13
IEntity
myEntity = owner.GetControlledEntity();
14
if
(!myEntity)
15
return
ENodeResult
.FAIL;
16
17
// Read inputs
18
SCR_AICombatMoveRequestBase
rqBase;
19
GetVariableIn
(
PORT_REQUEST
, rqBase);
20
SCR_AICombatMoveRequest_Move
rq =
SCR_AICombatMoveRequest_Move
.Cast(rqBase);
21
if
(!rq)
22
return
SCR_AIErrorMessages
.NodeErrorCombatMoveRequest(
this
, owner, rq);
23
24
// Case for CUSTOM_POS is trivial, we move directly there
25
if
(rq.m_eDirection == SCR_EAICombatMoveDirection.CUSTOM_POS)
26
{
27
SetVariableOut
(
PORT_POS
, rq.m_vMovePos);
28
return
ENodeResult
.SUCCESS;
29
}
30
31
// The remaining cases are for moving a given distance in given direction
32
33
vector
ownerPos = myEntity.
GetOrigin
();
34
35
vector
moveDir =
SCR_AICombatMoveUtils
.CalculateMoveDirection(rq.m_eDirection, ownerPos, rq.m_vMovePos);
// It can't return 000!
36
37
// Estimated move speed, depends on what we are controlling
38
float
estMoveSpeed =
SCR_AICombatMoveUtils
.GetEstimatedMoveSpeed(rq);
39
float
moveDistance = rq.m_fMoveDuration_s * estMoveSpeed;
40
41
// Randomize destination pos
42
vector
newPositionCenter = ownerPos + moveDir * moveDistance;
43
44
vector
randomizedPos =
RandomizeDestinationPos
(moveDistance, newPositionCenter);
45
46
SetVariableOut
(
PORT_POS
, randomizedPos);
47
48
return
ENodeResult
.SUCCESS;
49
}
50
51
//--------------------------------------------------------------------------------------------
52
protected
vector
RandomizeDestinationPos
(
float
distance
,
vector
centerPos)
53
{
54
float
radius = 0.1 *
distance
;
55
vector
pos =
s_AIRandomGenerator
.GenerateRandomPointInRadius(0, radius, centerPos,
true
);
56
pos[1] = centerPos[1];
57
return
pos;
58
}
59
60
//--------------------------------------------------------------------------------------------
61
protected
static
ref
TStringArray
s_aVarsOut
= {
62
PORT_POS
63
};
64
override
TStringArray
GetVariablesOut
() {
return
s_aVarsOut
; }
65
66
protected
static
ref
TStringArray
s_aVarsIn
= {
67
PORT_REQUEST
68
};
69
override
TStringArray
GetVariablesIn
() {
return
s_aVarsIn
; }
70
71
static
override
bool
VisibleInPalette
() {
return
true
; }
72
73
}
s_AIRandomGenerator
class SCR_AINodePortsHelpers s_AIRandomGenerator
distance
float distance
Definition
SCR_DestructibleTreeV2.c:29
AITaskScripted
Definition
AITaskScripted.c:13
IEntity
Definition
IEntity.c:13
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)
SCR_AICalculateNextCombatMovePos
Definition
SCR_AICalculateNextCombatMovePos.c:2
SCR_AICalculateNextCombatMovePos::EOnTaskSimulate
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
Definition
SCR_AICalculateNextCombatMovePos.c:11
SCR_AICalculateNextCombatMovePos::GetVariablesIn
override TStringArray GetVariablesIn()
Definition
SCR_AICalculateNextCombatMovePos.c:69
SCR_AICalculateNextCombatMovePos::VisibleInPalette
static override bool VisibleInPalette()
Definition
SCR_AICalculateNextCombatMovePos.c:71
SCR_AICalculateNextCombatMovePos::s_aVarsIn
static ref TStringArray s_aVarsIn
Definition
SCR_AICalculateNextCombatMovePos.c:66
SCR_AICalculateNextCombatMovePos::GetVariablesOut
override TStringArray GetVariablesOut()
Definition
SCR_AICalculateNextCombatMovePos.c:64
SCR_AICalculateNextCombatMovePos::PORT_TARGET_POS
static const string PORT_TARGET_POS
Definition
SCR_AICalculateNextCombatMovePos.c:5
SCR_AICalculateNextCombatMovePos::PORT_REQUEST
static const string PORT_REQUEST
Definition
SCR_AICalculateNextCombatMovePos.c:4
SCR_AICalculateNextCombatMovePos::RandomizeDestinationPos
vector RandomizeDestinationPos(float distance, vector centerPos)
Definition
SCR_AICalculateNextCombatMovePos.c:52
SCR_AICalculateNextCombatMovePos::s_aVarsOut
static ref TStringArray s_aVarsOut
Definition
SCR_AICalculateNextCombatMovePos.c:61
SCR_AICalculateNextCombatMovePos::PORT_POS
static const string PORT_POS
Definition
SCR_AICalculateNextCombatMovePos.c:8
SCR_AICombatMoveRequest_Move
Definition
SCR_AICombatMoveRequest.c:88
SCR_AICombatMoveRequestBase
Definition
SCR_AICombatMoveRequest.c:46
SCR_AICombatMoveUtils
Definition
SCR_AICombatMoveUtils.c:6
SCR_AIErrorMessages
Definition
NodeError.c:31
vector
Definition
vector.c:13
ENodeResult
ENodeResult
Definition
ENodeResult.c:13
TStringArray
array< string > TStringArray
Definition
Types.c:385
scripts
Game
AI
Movement
SCR_AICalculateNextCombatMovePos.c
Generated by
1.17.0