Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AIGetCompartmentEntityInComposition.c
Go to the documentation of this file.
2{
3 static const string PORT_VEHICLE = "Vehicle";
4 static const string PORT_BOARDING_PARAMS = "BoardingParams";
5 static const string PORT_COMPARTMENT_ENT = "CompartmentEnt";
6
7 //----------------------------------------------------------------------------------------------------------------------------------------
8 override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
9 {
10 IEntity compositionEntity;
11 SCR_AIBoardingParameters boardingParams;
12 IEntity compartmentEntity;
13
14 array<Managed> compartmentManagers = {};
15 array<BaseCompartmentSlot> compartments = {};
16
17 GetVariableIn(PORT_VEHICLE, compositionEntity);
18 if (!GetVariableIn(PORT_BOARDING_PARAMS, boardingParams) || !boardingParams)
19 boardingParams = new SCR_AIBoardingParameters;
20
21 if (!compositionEntity)
22 return ENodeResult.FAIL;
23
24 FindComponentsInAllChildren(BaseCompartmentManagerComponent, compositionEntity, false, 0, 6, compartmentManagers);
25
26 foreach (Managed compartmentMan : compartmentManagers)
27 {
29 if (!compartMan)
30 continue;
31
32 int numOfComp = compartMan.GetCompartments(compartments);
33
34 foreach (BaseCompartmentSlot comp : compartments)
35 {
36 if (PilotCompartmentSlot.Cast(comp) && boardingParams.m_bIsDriverAllowed)
37 {
38 compartmentEntity = compartMan.GetOwner();
39 break;
40 }
41 else if (TurretCompartmentSlot.Cast(comp) && boardingParams.m_bIsGunnerAllowed)
42 {
43 compartmentEntity = compartMan.GetOwner();
44 break;
45 }
46 else if (CargoCompartmentSlot.Cast(comp) && boardingParams.m_bIsCargoAllowed)
47 {
48 compartmentEntity = compartMan.GetOwner();
49 break;
50 }
51 else
52 continue;
53 }
54 }
55
56 if (compartmentEntity)
57 {
58 SetVariableOut(PORT_COMPARTMENT_ENT, compartmentEntity);
59 return ENodeResult.SUCCESS;
60 }
61 if (!boardingParams.m_bIsGunnerAllowed && !boardingParams.m_bIsCargoAllowed && !boardingParams.m_bIsDriverAllowed)
62 return ENodeResult.FAIL;
63
64 return NodeError(this, owner, "No entity with CompartmentManagerComponent found!");
65 }
66
67 //----------------------------------------------------------------------------------------------------------------------------------------
68 protected static ref TStringArray s_aVarsIn = {
69 PORT_VEHICLE, PORT_BOARDING_PARAMS
70 };
71
72 //----------------------------------------------------------------------------------------------------------------------------------------
74 {
75 return s_aVarsIn;
76 }
77
78 //----------------------------------------------------------------------------------------------------------------------------------------
79 protected static ref TStringArray s_aVarsOut = {
80 PORT_COMPARTMENT_ENT
81 };
82
83 //----------------------------------------------------------------------------------------------------------------------------------------
85 {
86 return s_aVarsOut;
87 }
88
89 //----------------------------------------------------------------------------------------------------------------------------------------
90 static override bool VisibleInPalette()
91 {
92 return true;
93 }
94
95 //----------------------------------------------------------------------------------------------------------------------------------------
96 static override string GetOnHoverDescription()
97 {
98 return "GetCompartmentEntInComposition: finds first entity in a composition that contains compartment manager component";
99 }
100};
ENodeResult NodeError(Node node, AIAgent owner, string msg)
Error call to be used in scripted BT nodes.
Definition NodeError.c:3
class SCR_AIStanceHandling FindComponentsInAllChildren(typename typeName, IEntity parent, bool findFirst, int depth, int maxDepth, notnull inout array< Managed > outComponents)
proto void SetVariableOut(string name, void val)
proto bool GetVariableIn(string name, out void val)
ENodeResult
Definition ENodeResult.c:13
array< string > TStringArray
Definition Types.c:385