Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AIFindCover.c
Go to the documentation of this file.
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";
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;
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.
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 = {
108 };
110 {
111 return s_aVarsIn;
112 }
113
114 protected static ref TStringArray s_aVarsOut = {
116 };
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
This enum contains all IDs for DiagMenu entries added in script.
Definition DebugMenuID.c:4
ArmaReforgerScripted GetGame()
Definition game.c:1398
Definition Color.c:13
Diagnostic and developer menu system.
Definition DiagMenu.c:18
proto external Managed FindComponent(typename typeName)
proto external vector GetOrigin()
proto void SetVariableOut(string name, void val)
proto bool GetVariableIn(string name, out void val)
proto void ClearVariable(string name)
const int MAX_COVERS_HIGH_PRIORITY
static const string PORT_TARGET_POS
override void OnInit(AIAgent owner)
static ref TStringArray s_aVarsIn
const float NAVMESH_AREA_COST_SCALE
override TStringArray GetVariablesOut()
static override bool CanReturnRunning()
static override string GetOnHoverDescription()
ChimeraCoverManagerComponent m_CoverMgr
static ref TStringArray s_aVarsOut
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
override TStringArray GetVariablesIn()
const int MAX_COVERS_LOW_PRIORITY
static const string PORT_COVER_QUERY_PROPERTIES
SCR_AICombatMoveState m_State
AIPathfindingComponent m_PathfindingComp
const vector NEAREST_POLY_HALF_EXTEND
static const string PORT_COVER_LOCK
Instance of created debug visualizer.
Definition Shape.c:14
ENodeResult
Definition ENodeResult.c:13
ShapeFlags
Definition ShapeFlags.c:13
array< string > TStringArray
Definition Types.c:385