Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AIDecideBehavior.c
Go to the documentation of this file.
2{
3 // Update intervals for different LOD values
4 static const int LOD_MAX = 10;
5 static const int LOD_COUNT = LOD_MAX + 1;
6 static float s_aUpdateIntervals[LOD_COUNT] = {
7 0.55, // LOD 0
8 1.3, // 1
9 2.0,
10 2.0, // 3
11 2.0,
12 2.0, // 5
13 2.0,
14 2.0, // 7
15 2.0,
16 2.0, // 9
17 2.0
18 };
19
20 // Inputs
21 protected static string PORT_UNKNOWN_TARGET = "UnknownTarget";
22
23 // Outputs
24 protected static string PORT_BEHAVIOR_TREE = "BehaviorTree";
25 protected static string PORT_UPDATE_BEHAVIOR = "UpdateBehavior";
26 protected static string PORT_USE_COMBAT_MOVE = "UseCombatMove";
27 protected static string PORT_UPDATE_INTERVAL = "UpdateInterval";
28
31 protected SCR_AIUtilityComponent m_UtilityComponent;
32
33 protected float m_fRandomDelay_s; // Random delay added to update interval to distribute updated over time more evenly
34
35 //------------------------------------------------------------------------------------------------
36 override void OnInit(AIAgent owner)
37 {
38 m_UtilityComponent = SCR_AIUtilityComponent.Cast(owner.FindComponent(SCR_AIUtilityComponent));
40 {
41 NodeError(this, owner, "Can't find utility component.");
42 }
43
44 m_fRandomDelay_s = Math.RandomFloat(0.0, s_aUpdateIntervals[0]);
45 }
46
47 //------------------------------------------------------------------------------------------------
48 override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
49 {
51 return ENodeResult.FAIL;
52
53 BaseTarget unknownTarget;
54 GetVariableIn(PORT_UNKNOWN_TARGET, unknownTarget);
55
56 m_CurrentBehavior = m_UtilityComponent.EvaluateBehavior(unknownTarget);
57 if (!m_CurrentBehavior || m_CurrentBehavior.m_sBehaviorTree == ResourceName.Empty)
58 {
59 Print("AI: Missing behavior tree in " + m_CurrentBehavior.ToString(), LogLevel.WARNING);
60 return ENodeResult.FAIL;
61 }
62
64 {
67 }
68
69 // m_bUseCombatMove can change at behavior run time
71
72 // Resolve desired update interval
73 int lod = Math.ClampInt(owner.GetLOD(), 0, LOD_MAX);
74 float updateInterval = s_aUpdateIntervals[lod] + m_fRandomDelay_s;
75 SetVariableOut(PORT_UPDATE_INTERVAL, updateInterval);
77
79 return ENodeResult.SUCCESS;
80 }
81
82 //------------------------------------------------------------------------------------------------
90 {
91 return s_aVarsOut;
92 }
93
94 //------------------------------------------------------------------------------------------------
95 protected static ref TStringArray s_aVarsIn = {
97 };
99 {
100 return s_aVarsIn;
101 }
102
103 //------------------------------------------------------------------------------------------------
104 static override bool VisibleInPalette() {return true;}
105};
ENodeResult NodeError(Node node, AIAgent owner, string msg)
Error call to be used in scripted BT nodes.
Definition NodeError.c:3
void SCR_AIBehaviorBase(SCR_AIUtilityComponent utility, SCR_AIActivityBase groupActivity)
Definition Math.c:13
proto void SetVariableOut(string name, void val)
proto bool GetVariableIn(string name, out void val)
static string PORT_UNKNOWN_TARGET
static string PORT_USE_COMBAT_MOVE
static string PORT_UPDATE_INTERVAL
static ref TStringArray s_aVarsOut
SCR_AIUtilityComponent m_UtilityComponent
static override bool VisibleInPalette()
override TStringArray GetVariablesIn()
override TStringArray GetVariablesOut()
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
SCR_AIBehaviorBase m_CurrentBehavior
SCR_AIBehaviorBase m_PreviousBehavior
static ref TStringArray s_aVarsIn
override void OnInit(AIAgent owner)
static string PORT_UPDATE_BEHAVIOR
ENodeResult
Definition ENodeResult.c:13
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
Definition LogLevel.c:14
array< string > TStringArray
Definition Types.c:385