Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AISetPosition.c
Go to the documentation of this file.
1sealed class BtVariableAISmartActionComponent: BtVariable
2{
4}
5
6class SCR_AISetPosition : AITaskScripted
7{
8 protected static const string TARGET_INFO_PORT = "TargetInfo";
9
10 protected static const string ENTITY_PORT = "EntitytIn";
11 protected static const string AGENT_PORT = "AgentIn";
12 protected static const string TARGET_PORT = "DestinationIn";
13
14 protected ref TStringArray s_aVarsIn = {
15 ENTITY_PORT,
16 AGENT_PORT,
17 TARGET_PORT,
18 };
19
20 CharacterControllerComponent m_charContr;
21
22 //------------------------------------------------------------------------------------------------------------------------
23 override TStringArray GetVariablesIn() { return s_aVarsIn; }
24
25 //------------------------------------------------------------------------------------------------------------------------
26 static override bool VisibleInPalette() { return true; }
27
28 //------------------------------------------------------------------------------------------------------------------------
29 static override string GetOnHoverDescription() { return "Sets (teleports) entity to target, that can be vector, smartAction or vehicle compartment"; };
30
31 //------------------------------------------------------------------------------------------------------------------------
32 override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
33 {
34 IEntity entityToTeleport;
35 vector positionToTeleport;
36
37 if(!GetVariableIn(ENTITY_PORT, entityToTeleport))
38 {
39 AIAgent agent;
40
41 if (!GetVariableIn(AGENT_PORT, agent))
42 return NodeError(this, owner, "Did not provided entity to teleport!");
43 entityToTeleport = agent.GetControlledEntity();
44 }
45
46 if (!entityToTeleport)
47 return NodeError(this, owner, "Entity is null!");
48
49 if (GetVariableType(true,TARGET_PORT) == vector)
50 {
51 GetVariableIn(TARGET_PORT, positionToTeleport);
52 }
53 else if (GetVariableType(true,TARGET_PORT).IsInherited(Managed))
54 {
55 Managed obj;
56 GetVariableIn(TARGET_PORT, obj);
57
59 BaseCompartmentSlot compartmentSlot = BaseCompartmentSlot.Cast(obj);
60 if (SAComponent)
61 {
62 vector originOfObject;
63
64 originOfObject = SAComponent.GetOwner().GetOrigin();
65 positionToTeleport = originOfObject + SAComponent.GetActionOffset();
66 }
67 else if (compartmentSlot)
68 {
69 CompartmentAccessComponent CAComponent = CompartmentAccessComponent.Cast(entityToTeleport.FindComponent(CompartmentAccessComponent));
70 IEntity vehicle;
71
72 GetVariableIn(TARGET_PORT, compartmentSlot);
73 vehicle = compartmentSlot.GetOwner();
74 if (!CAComponent || !vehicle)
75 return NodeError(this, owner, "Enity to teleport does not have CompartmentAccessComponent or target is not an Entity!");
76 if (!CAComponent.GetInVehicle(vehicle, compartmentSlot, true, -1, ECloseDoorAfterActions.INVALID, false))
77 {
78 #ifdef AI_DEBUG
79 Print("Teleport to vehicle was not successful!", LogLevel.VERBOSE);
80 #endif
81 if (!m_charContr)
82 {
83 m_charContr = CharacterControllerComponent.Cast(entityToTeleport.FindComponent(CharacterControllerComponent));
84 if (!m_charContr)
85 return NodeError(this, owner, "Enity to teleport does not have CharacterControllerComponent!");
86 }
87
88 if (m_charContr.IsSwimming())
89 return ENodeResult.FAIL;
90 else if (m_charContr.IsFalling())
91 return ENodeResult.RUNNING;
92 else
93 return ENodeResult.FAIL;
94 }
95 return ENodeResult.SUCCESS;
96 }
97 }
98
99 BaseGameEntity gEntity = BaseGameEntity.Cast(entityToTeleport);
100 vector mat[4];
101 Math3D.MatrixIdentity4(mat);
102 mat[3] = positionToTeleport;
103
104 gEntity.Teleport(mat); // teleporting entity
105 return ENodeResult.SUCCESS;
106 }
107
108 //------------------------------------------------------------------------------------------------------------------------
109 static override bool CanReturnRunning()
110 {
111 return true;
112 }
113}
ENodeResult NodeError(Node node, AIAgent owner, string msg)
Error call to be used in scripted BT nodes.
Definition NodeError.c:3
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
CharacterControllerComponent m_charContr
BtVariableAISmartActionComponent TARGET_INFO_PORT
proto native external bool IsInherited(typename type)
proto external Managed FindComponent(typename typeName)
TStringArray GetVariablesIn()
Definition Node.c:27
proto bool GetVariableIn(string name, out void val)
bool VisibleInPalette()
proto external GetVariableType(bool inputPort, string name)
bool CanReturnRunning()
string GetOnHoverDescription()
Definition Node.c:30
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
ECloseDoorAfterActions