Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_TutorialLogic_Heli.c
Go to the documentation of this file.
3{
4 protected const float TIME_FOR_ANGLE_WARNING = 3000;
5 protected const float TIME_FOR_ALTITUDE_WARNING = 2500;
6
7 protected SCR_TutorialGamemodeComponent m_TutorialGamemode;
9 protected SCR_HelicopterControllerComponent m_HelicopterController;
14
15 //------------------------------------------------------------------------------------------------
16 protected void RotorCheck()
17 {
19 return;
20
23
25 return;
26
27 if (m_HelicopterSimulation.RotorGetState(0) == RotorState.DESTROYED || m_HelicopterSimulation.RotorGetState(1) == RotorState.DESTROYED)
28 m_TutorialGamemode.RequestBreakCourse(SCR_ETutorialBreakType.FORCED);
29 }
30
31 //------------------------------------------------------------------------------------------------
32 protected void HelicopterDrownedCheck()
33 {
35 return;
36
37 VehicleControllerComponent vehicleController = VehicleControllerComponent.Cast(m_CourseHelicopter.FindComponent(VehicleControllerComponent));
38 if (!vehicleController)
39 return;
40
41 if (!vehicleController.GetEngineDrowned())
42 return;
43
44 m_TutorialGamemode.RequestBreakCourse(SCR_ETutorialBreakType.FORCED);
45 }
46
47 //------------------------------------------------------------------------------------------------
48 protected void PrepareDamageInvokers()
49 {
51 return;
52
53 //general helicopter damage check
55 if (damageManager)
56 damageManager.GetOnDamageStateChanged().Insert(OnHelicopterDamaged);
57
58 SlotManagerComponent slotManager = SlotManagerComponent.Cast(m_CourseHelicopter.FindComponent(SlotManagerComponent));
59 if (!slotManager)
60 return;
61
62 IEntity rotor;
63 EntitySlotInfo slot = slotManager.GetSlotByName("RotorMain");
64 if (slot)
65 {
66 rotor = slot.GetAttachedEntity();
67 SCR_RotorDamageManagerComponent rotorDmgComp = SCR_RotorDamageManagerComponent.Cast(rotor.FindComponent(SCR_RotorDamageManagerComponent));
68 rotorDmgComp.GetOnDamageStateChanged().Insert(OnHelicopterDamaged);
69 }
70
71 slot = slotManager.GetSlotByName("RotorTail");
72 if (slot)
73 {
74 rotor = slot.GetAttachedEntity();
75 SCR_RotorDamageManagerComponent rotorDmgComp = SCR_RotorDamageManagerComponent.Cast(rotor.FindComponent(SCR_RotorDamageManagerComponent));
76 rotorDmgComp.GetOnDamageStateChanged().Insert(OnHelicopterDamaged);
77 }
78 }
79
80 //------------------------------------------------------------------------------------------------
81 protected void RemoveHelicopterInvokers()
82 {
84 return;
85
86 //General damage invoker
88 if (heliDamageManager)
89 heliDamageManager.GetOnDamageStateChanged().Remove(OnHelicopterDamaged);
90
91 //Rotor damage invoker
92 SlotManagerComponent slotManager = SlotManagerComponent.Cast(m_CourseHelicopter.FindComponent(SlotManagerComponent));
93 if (!slotManager)
94 return;
95
96 EntitySlotInfo slot = slotManager.GetSlotByName("RotorMain");
97 if (slot)
98 {
99 IEntity rotor = slot.GetAttachedEntity();
100 if (!rotor)
101 return;
102
103 SCR_RotorDamageManagerComponent rotorDmgComp = SCR_RotorDamageManagerComponent.Cast(rotor.FindComponent(SCR_RotorDamageManagerComponent));
104 if (!rotorDmgComp)
105 return;
106
107 rotorDmgComp.GetOnDamageStateChanged().Remove(OnHelicopterDamaged);
108 }
109
110 slot = slotManager.GetSlotByName("RotorTail");
111 if (slot)
112 {
113 IEntity rotor = slot.GetAttachedEntity();
114 if (!rotor)
115 return;
116
117 SCR_RotorDamageManagerComponent rotorDmgComp = SCR_RotorDamageManagerComponent.Cast(rotor.FindComponent(SCR_RotorDamageManagerComponent));
118 if (!rotorDmgComp)
119 return;
120
121 rotorDmgComp.GetOnDamageStateChanged().Remove(OnHelicopterDamaged);
122 }
123
124 }
125
126 //------------------------------------------------------------------------------------------------
127 protected void OnHelicopterDamaged(EDamageState state)
128 {
129 if (state == EDamageState.DESTROYED)
130 return;
131
132 m_TutorialGamemode.RequestBreakCourse(SCR_ETutorialBreakType.FORCED);
133 }
134
135 //------------------------------------------------------------------------------------------------
136 protected void ContinuousCheck()
137 {
139 m_TutorialGamemode.SetCourseConfig(SCR_ETutorialCourses.FREE_ROAM);
140
141 if (m_bForceAutohover && !m_HelicopterController.GetAutohoverEnabled())
142 {
143 if (m_TutorialGamemode.GetCurrentStage().Type() != SCR_Tutorial_Heli_AUTOHOVER_ON)
144 {
145 m_TutorialGamemode.InsertStage("TURN_AUTOHOVER", m_TutorialGamemode.GetActiveStageIndex());
146 m_TutorialGamemode.SetStage(m_TutorialGamemode.GetActiveStageIndex());
147 }
148 }
149
150 if (m_bCheckAngle)
151 {
152 float angle = m_SignalsManagerComponent.GetSignalValue(m_SignalsManagerComponent.AddOrFindSignal("PitchAngle"));
153 float roll = m_SignalsManagerComponent.GetSignalValue(m_SignalsManagerComponent.AddOrFindSignal("RollAngle"));
154
155 if ((angle <= -60 || angle >= 50) || (roll <= -45 || roll >= 45))
156 {
157 if (m_fAngleTimer == 0)
158 m_fAngleTimer = GetGame().GetWorld().GetWorldTime();
159
160 if (((m_fAngleTimer + TIME_FOR_ANGLE_WARNING) < GetGame().GetWorld().GetWorldTime()) && (m_TutorialGamemode.GetCurrentStage().Type() != SCR_Tutorial_Heli_DANGER_ANGLE))
161 {
162 m_TutorialGamemode.InsertStage("Danger_ANGLE", m_TutorialGamemode.GetActiveStageIndex());
163 m_TutorialGamemode.SetStage(m_TutorialGamemode.GetActiveStageIndex());
164 }
165 }
166 else
167 {
168 m_fAngleTimer = 0;
169 }
170 }
171
173 {
174 if (m_SignalsManagerComponent.GetSignalValue(m_SignalsManagerComponent.AddOrFindSignal("AltitudeAGL")) < 10)
175 {
176 if (m_fAltitudeTimer == 0)
177 m_fAltitudeTimer = GetGame().GetWorld().GetWorldTime();
178
179 if (((m_fAltitudeTimer + TIME_FOR_ALTITUDE_WARNING) < GetGame().GetWorld().GetWorldTime()) && (m_TutorialGamemode.GetCurrentStage().Type() != SCR_Tutorial_Heli_DANGER_ALTITUDE))
180 {
181 m_TutorialGamemode.InsertStage("DANGER_ALTITUDE", m_TutorialGamemode.GetActiveStageIndex());
182 m_TutorialGamemode.SetStage(m_TutorialGamemode.GetActiveStageIndex());
183 }
184 }
185 else
186 {
188 }
189 }
190
192 RotorCheck();
193 }
194
195 //------------------------------------------------------------------------------------------------
196 override void OnCourseStart()
197 {
198 m_TutorialGamemode = SCR_TutorialGamemodeComponent.GetInstance();
200 return;
201
202 m_CourseHelicopter = Vehicle.Cast(GetGame().GetWorld().FindEntityByName("UH1COURSE"));
204 return;
205
206 ChimeraCharacter copilot = ChimeraCharacter.Cast(GetGame().GetWorld().FindEntityByName("HELICOPTER_Copilot"));
207 if (copilot)
208 m_TutorialGamemode.MoveCharacterIntoVehicle(copilot, m_CourseHelicopter, ECompartmentType.PILOT, 1);
209
211
212 m_HelicopterController = SCR_HelicopterControllerComponent.Cast(m_CourseHelicopter.FindComponent(SCR_HelicopterControllerComponent));
214
215 GetGame().GetCallqueue().CallLater(ContinuousCheck, 500, true);
216 }
217
218 //------------------------------------------------------------------------------------------------
219 override void OnCourseEnd()
220 {
222 m_TutorialGamemode.ChangeVehicleLockState(m_CourseHelicopter, true);
223
224 m_bCheckAngle = false;
225 m_bCheckAltitude = false;
226 m_bForceAutohover = false;
227
228 m_fAngleTimer = 0;
230
231 GetGame().GetCallqueue().Remove(ContinuousCheck);
233 }
234}
ECompartmentType
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
SCR_ETutorialBreakType
SCR_ETutorialCourses
void SCR_VehicleDamageManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
Adds ability to attach an object to a slot.
proto external Managed FindComponent(typename typeName)
VehicleHelicopterSimulation m_HelicopterSimulation
SCR_HelicopterControllerComponent m_HelicopterController
void OnHelicopterDamaged(EDamageState state)
SCR_TutorialGamemodeComponent m_TutorialGamemode
SignalsManagerComponent m_SignalsManagerComponent
enum EPhysicsLayerPresets Vehicle
Definition gameLib.c:24
EDamageState
RotorState
Definition RotorState.c:13