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_AIChangeCompartment.c
Go to the documentation of this file.
1
class
SCR_AIChangeCompartment
:
AITaskScripted
2
{
3
protected
static
const
int
COMPARTMENT_INIT
= 0;
4
protected
static
const
int
COMPARTMENT_WITH_CORPSE
= 1;
5
protected
static
const
int
COMPARTMENT_EMPTYING
= 2;
6
protected
static
const
int
COMPARTMENT_EMPTY
= 3;
7
protected
static
const
int
COMPARTMENT_CHANGING
= 4;
8
protected
static
const
int
COMPARTMENT_CHANGED
= 5;
9
protected
static
const
int
NO_COMPARTMENT_AVAILABLE
= 6;
10
11
[
Attribute
(
"0"
,
UIWidgets
.EditBox,
"Which compartment type owner switches to"
,
""
, ParamEnumArray.FromEnum(
ECompartmentType
))]
12
ECompartmentType
m_eCompartmentType
;
13
14
protected
static
const
string
TARGET_VEHICLE_PORT
=
"TargetVehicle"
;
15
protected
static
const
string
COMPARTMENT_TYPE_PORT
=
"CompartmentType"
;
16
protected
static
const
string
TELEPORT_IN_PORT
=
"TeleportInside"
;
17
18
protected
static
ref
TStringArray
s_aVarsIn
= {
TARGET_VEHICLE_PORT
,
COMPARTMENT_TYPE_PORT
,
TELEPORT_IN_PORT
};
19
override
TStringArray
GetVariablesIn
() {
return
s_aVarsIn
; }
20
21
protected
SCR_CompartmentAccessComponent
m_compartmentAccess
;
22
protected
SCR_CompartmentAccessComponent
m_compartmentAccessOccupant
;
23
protected
ChimeraCharacter
m_target
;
24
protected
int
m_compartmentSwitchState
;
25
protected
BaseCompartmentSlot
m_compartmentSlot
;
26
protected
IEntity
m_vehicle
;
27
protected
bool
m_TeleportInside
;
28
29
//----------------------------------------------------------------------------------------------------------------------------------------
30
override
void
OnInit
(AIAgent owner)
31
{
32
m_compartmentSwitchState
=
COMPARTMENT_INIT
;
33
m_compartmentSlot
= null;
34
m_target
=
ChimeraCharacter
.Cast(owner.GetControlledEntity());
35
if
(
m_target
)
36
m_compartmentAccess
=
SCR_CompartmentAccessComponent
.Cast(
m_target
.GetCompartmentAccessComponent());
37
}
38
39
//----------------------------------------------------------------------------------------------------------------------------------------
40
override
void
OnEnter
(AIAgent owner)
41
{
42
if
(!
GetVariableIn
(
TARGET_VEHICLE_PORT
,
m_vehicle
))
43
m_vehicle
=
m_compartmentAccess
.GetVehicleIn(
m_target
);
44
45
if
(!
GetVariableIn
(
TELEPORT_IN_PORT
,
m_TeleportInside
))
46
m_TeleportInside
=
false
;
47
48
ECompartmentType
compartmentType;
49
if
(
GetVariableIn
(
COMPARTMENT_TYPE_PORT
,compartmentType))
50
m_eCompartmentType
= compartmentType;
51
}
52
53
//----------------------------------------------------------------------------------------------------------------------------------------
54
override
ENodeResult
EOnTaskSimulate
(AIAgent owner,
float
dt)
55
{
56
if
(!
m_target
|| !
m_compartmentAccess
)
57
return
ENodeResult
.FAIL;
58
59
return
UpdateCompartmentSwitchState
(
m_compartmentSwitchState
,
m_compartmentSwitchState
);
60
}
61
62
//----------------------------------------------------------------------------------------------------------------------------------------
64
ENodeResult
UpdateCompartmentSwitchState
(
int
currentState, out
int
newState)
65
{
66
switch
(currentState)
67
{
68
case
COMPARTMENT_INIT
:
69
{
70
if
(!
m_vehicle
)
71
{
72
newState =
NO_COMPARTMENT_AVAILABLE
;
73
return
ENodeResult
.FAIL;
74
}
75
SCR_BaseCompartmentManagerComponent compMan = SCR_BaseCompartmentManagerComponent.Cast(
m_vehicle
.FindComponent(SCR_BaseCompartmentManagerComponent));
76
if
(!compMan)
77
{
78
newState =
NO_COMPARTMENT_AVAILABLE
;
79
return
ENodeResult
.FAIL;
80
}
81
82
array<BaseCompartmentSlot> compartmentSlots = {};
83
compMan.GetCompartmentsOfType(compartmentSlots,
m_eCompartmentType
);
84
85
foreach
(
BaseCompartmentSlot
slot : compartmentSlots)
86
{
87
if
(slot.IsOccupied())
88
{
89
ChimeraCharacter
occupant =
ChimeraCharacter
.Cast(slot.GetOccupant());
90
if
(!occupant)
91
continue
;
92
CharacterControllerComponent contr = occupant.GetCharacterController();
93
if
(!contr)
94
continue
;
95
if
(contr.GetLifeState() ==
ECharacterLifeState
.ALIVE)
96
continue
;
97
m_compartmentAccessOccupant
=
SCR_CompartmentAccessComponent
.Cast(occupant.GetCompartmentAccessComponent());
98
if
(!
m_compartmentAccessOccupant
)
99
continue
;
100
newState =
COMPARTMENT_WITH_CORPSE
;
101
}
102
else
103
newState =
COMPARTMENT_EMPTY
;
104
m_compartmentSlot
= slot;
105
}
106
if
(!
m_compartmentSlot
)
107
{
108
newState =
NO_COMPARTMENT_AVAILABLE
;
109
return
ENodeResult
.FAIL;
110
}
111
return
ENodeResult
.RUNNING;
112
}
113
case
COMPARTMENT_WITH_CORPSE
:
114
{
115
vector
teleportLocation[4];
116
m_compartmentAccessOccupant
.FindSuitableTeleportLocation(teleportLocation);
117
m_compartmentAccessOccupant
.GetOutVehicle_NoDoor(teleportLocation,
false
,
false
);
118
newState =
COMPARTMENT_EMPTYING
;
119
return
ENodeResult
.RUNNING;
120
}
121
case
COMPARTMENT_EMPTYING
:
122
{
123
if
(!
m_compartmentSlot
.IsOccupied())
124
newState =
COMPARTMENT_EMPTY
;
125
return
ENodeResult
.RUNNING;
126
}
127
case
COMPARTMENT_EMPTY
:
128
{
129
m_compartmentAccess
.GetInVehicle(
m_vehicle
,
m_compartmentSlot
,
m_TeleportInside
, -1,
ECloseDoorAfterActions
.INVALID,
false
);
130
newState =
COMPARTMENT_CHANGING
;
131
return
ENodeResult
.RUNNING;
132
}
133
case
COMPARTMENT_CHANGING
:
134
{
135
if
(
m_compartmentSlot
.IsOccupied())
136
{
137
newState =
COMPARTMENT_CHANGED
;
138
return
ENodeResult
.SUCCESS;
139
}
140
return
ENodeResult
.RUNNING;
141
}
142
default
:
143
return
ENodeResult
.RUNNING;
144
}
145
return
ENodeResult
.FAIL;
146
}
147
148
//----------------------------------------------------------------------------------------------------------------------------------------
149
bool
EjectOccupant
(
ChimeraCharacter
occupant)
150
{
151
CompartmentAccessComponent acc = occupant.GetCompartmentAccessComponent();
152
return
acc.GetOutVehicle(
EGetOutType
.TELEPORT, -1,
ECloseDoorAfterActions
.INVALID,
false
);
153
}
154
155
//----------------------------------------------------------------------------------------------------------------------------------------
156
static
override
bool
VisibleInPalette
() {
return
true
; }
157
158
//----------------------------------------------------------------------------------------------------------------------------------------
159
static
override
bool
CanReturnRunning
() {
return
true
; }
160
161
//----------------------------------------------------------------------------------------------------------------------------------------
162
static
override
string
GetOnHoverDescription
()
163
{
164
return
"ChangeCompartment: Changes compartment within the vehicle and keeps running until the character is in the desired slottype. \nIf slot is occupied by corpse, it kicks the corpse out"
;
165
}
166
};
ECompartmentType
ECompartmentType
Definition
ECompartmentType.c:8
AITaskScripted
Definition
AITaskScripted.c:13
BaseCompartmentSlot
Definition
BaseCompartmentSlot.c:2
ChimeraCharacter
Definition
ChimeraCharacter.c:13
IEntity
Definition
IEntity.c:13
Node::GetVariableIn
proto bool GetVariableIn(string name, out void val)
SCR_AIChangeCompartment
Definition
SCR_AIChangeCompartment.c:2
SCR_AIChangeCompartment::EjectOccupant
bool EjectOccupant(ChimeraCharacter occupant)
Definition
SCR_AIChangeCompartment.c:149
SCR_AIChangeCompartment::COMPARTMENT_INIT
static const int COMPARTMENT_INIT
Definition
SCR_AIChangeCompartment.c:3
SCR_AIChangeCompartment::NO_COMPARTMENT_AVAILABLE
static const int NO_COMPARTMENT_AVAILABLE
Definition
SCR_AIChangeCompartment.c:9
SCR_AIChangeCompartment::m_TeleportInside
bool m_TeleportInside
Definition
SCR_AIChangeCompartment.c:27
SCR_AIChangeCompartment::m_compartmentSwitchState
int m_compartmentSwitchState
Definition
SCR_AIChangeCompartment.c:24
SCR_AIChangeCompartment::m_eCompartmentType
ECompartmentType m_eCompartmentType
Definition
SCR_AIChangeCompartment.c:12
SCR_AIChangeCompartment::OnEnter
override void OnEnter(AIAgent owner)
Definition
SCR_AIChangeCompartment.c:40
SCR_AIChangeCompartment::m_compartmentAccessOccupant
SCR_CompartmentAccessComponent m_compartmentAccessOccupant
Definition
SCR_AIChangeCompartment.c:22
SCR_AIChangeCompartment::TELEPORT_IN_PORT
static const string TELEPORT_IN_PORT
Definition
SCR_AIChangeCompartment.c:16
SCR_AIChangeCompartment::TARGET_VEHICLE_PORT
static const string TARGET_VEHICLE_PORT
Definition
SCR_AIChangeCompartment.c:14
SCR_AIChangeCompartment::m_compartmentAccess
SCR_CompartmentAccessComponent m_compartmentAccess
Definition
SCR_AIChangeCompartment.c:21
SCR_AIChangeCompartment::COMPARTMENT_EMPTYING
static const int COMPARTMENT_EMPTYING
Definition
SCR_AIChangeCompartment.c:5
SCR_AIChangeCompartment::m_compartmentSlot
BaseCompartmentSlot m_compartmentSlot
Definition
SCR_AIChangeCompartment.c:25
SCR_AIChangeCompartment::s_aVarsIn
static ref TStringArray s_aVarsIn
Definition
SCR_AIChangeCompartment.c:18
SCR_AIChangeCompartment::OnInit
override void OnInit(AIAgent owner)
Definition
SCR_AIChangeCompartment.c:30
SCR_AIChangeCompartment::EOnTaskSimulate
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
Definition
SCR_AIChangeCompartment.c:54
SCR_AIChangeCompartment::GetOnHoverDescription
static override string GetOnHoverDescription()
Definition
SCR_AIChangeCompartment.c:162
SCR_AIChangeCompartment::VisibleInPalette
static override bool VisibleInPalette()
Definition
SCR_AIChangeCompartment.c:156
SCR_AIChangeCompartment::COMPARTMENT_EMPTY
static const int COMPARTMENT_EMPTY
Definition
SCR_AIChangeCompartment.c:6
SCR_AIChangeCompartment::CanReturnRunning
static override bool CanReturnRunning()
Definition
SCR_AIChangeCompartment.c:159
SCR_AIChangeCompartment::m_vehicle
IEntity m_vehicle
Definition
SCR_AIChangeCompartment.c:26
SCR_AIChangeCompartment::UpdateCompartmentSwitchState
ENodeResult UpdateCompartmentSwitchState(int currentState, out int newState)
Returns node result and state of the compartment switching process.
Definition
SCR_AIChangeCompartment.c:64
SCR_AIChangeCompartment::COMPARTMENT_CHANGED
static const int COMPARTMENT_CHANGED
Definition
SCR_AIChangeCompartment.c:8
SCR_AIChangeCompartment::COMPARTMENT_WITH_CORPSE
static const int COMPARTMENT_WITH_CORPSE
Definition
SCR_AIChangeCompartment.c:4
SCR_AIChangeCompartment::COMPARTMENT_TYPE_PORT
static const string COMPARTMENT_TYPE_PORT
Definition
SCR_AIChangeCompartment.c:15
SCR_AIChangeCompartment::m_target
ChimeraCharacter m_target
Definition
SCR_AIChangeCompartment.c:23
SCR_AIChangeCompartment::GetVariablesIn
override TStringArray GetVariablesIn()
Definition
SCR_AIChangeCompartment.c:19
SCR_AIChangeCompartment::COMPARTMENT_CHANGING
static const int COMPARTMENT_CHANGING
Definition
SCR_AIChangeCompartment.c:7
SCR_CompartmentAccessComponent
Definition
SCR_CompartmentAccessComponent.c:16
UIWidgets
Definition
attributes.c:40
vector
Definition
vector.c:13
ENodeResult
ENodeResult
Definition
ENodeResult.c:13
ECharacterLifeState
ECharacterLifeState
Definition
ECharacterLifeState.c:13
Attribute
SCR_FieldOfViewSettings Attribute
Definition
SendGoalMessage.c:170
TStringArray
array< string > TStringArray
Definition
Types.c:385
ECloseDoorAfterActions
ECloseDoorAfterActions
Definition
ECloseDoorAfterActions.c:13
EGetOutType
EGetOutType
Definition
EGetOutType.c:13
scripts
Game
AI
ScriptedNodes
Vehicles
SCR_AIChangeCompartment.c
Generated by
1.17.0