Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_ScenarioFrameworkTaskDefend.c
Go to the documentation of this file.
4
6{
7 //------------------------------------------------------------------------------------------------
9 void OnObjectDamage(EDamageState state)
10 {
11 if (state != EDamageState.DESTROYED || !m_Asset)
12 return;
13
14 SCR_DamageManagerComponent objectDmgManager = SCR_DamageManagerComponent.GetDamageManager(m_Asset);
15 if (objectDmgManager)
16 {
17 objectDmgManager.GetOnDamageStateChanged().Remove(OnObjectDamage);
18 SCR_ScenarioFrameworkSystem.GetCallQueuePausable().Remove(CheckEngineDrowned);
19
20 VehicleControllerComponent vehicleController = VehicleControllerComponent.Cast(m_Asset.FindComponent(VehicleControllerComponent));
21 if (vehicleController)
22 vehicleController.GetOnEngineStop().Remove(CheckEngineDrowned);
23 }
24
25 m_LayerTask.ProcessLayerTaskState(SCR_ETaskState.FAILED);
26 }
27
28 //------------------------------------------------------------------------------------------------
30 void CheckEngineDrowned()
31 {
32 if (!m_Asset)
33 return;
34
35 VehicleControllerComponent vehicleController = VehicleControllerComponent.Cast(m_Asset.FindComponent(VehicleControllerComponent));
36 if (vehicleController && vehicleController.GetEngineDrowned())
37 {
38 vehicleController.GetOnEngineStop().Remove(CheckEngineDrowned);
39 SCR_ScenarioFrameworkSystem.GetCallQueuePausable().Remove(CheckEngineDrowned);
40
41 SCR_DamageManagerComponent objectDmgManager = SCR_DamageManagerComponent.GetDamageManager(m_Asset);
42 if (objectDmgManager)
43 objectDmgManager.GetOnDamageStateChanged().Remove(OnObjectDamage);
44
45 m_LayerTask.ProcessLayerTaskState(SCR_ETaskState.FAILED);
46 }
47 }
48
49 //------------------------------------------------------------------------------------------------
50 void OnGroupEmpty(AIGroup group)
51 {
52 SCR_AIGroup aiGroup = SCR_AIGroup.Cast(group);
53 if (!aiGroup)
54 return;
55
56 aiGroup.GetOnEmpty().Remove(OnGroupEmpty);
57 m_LayerTask.ProcessLayerTaskState(SCR_ETaskState.FAILED);
58 }
59
60 //------------------------------------------------------------------------------------------------
63 override void HookTaskAsset(IEntity object)
64 {
65 if (!object)
66 return;
67
68 super.HookTaskAsset(object);
69
70 SCR_AIGroup group = SCR_AIGroup.Cast(m_Asset);
71 if (!group)
72 {
73 SCR_DamageManagerComponent objectDmgManager = SCR_DamageManagerComponent.GetDamageManager(m_Asset);
74 if (objectDmgManager)
75 objectDmgManager.GetOnDamageStateChanged().Insert(OnObjectDamage);
76
77 if (Vehicle.Cast(m_Asset))
78 {
79 VehicleControllerComponent vehicleController = VehicleControllerComponent.Cast(m_Asset.FindComponent(VehicleControllerComponent));
80 if (vehicleController)
81 vehicleController.GetOnEngineStop().Insert(CheckEngineDrowned);
82
83 //---- REFACTOR NOTE START: This code will need to be refactored as current implementation is not conforming to the standards ----
84
85 // Since there is no invoker and no reliable way how to tackle drowned vehicles, in order to make it reliable,
86 // We cannot solely rely on GetOnEngineStop because vehicle could have been pushed/moved into the water without started engine.
87 SCR_ScenarioFrameworkSystem.GetCallQueuePausable().CallLater(CheckEngineDrowned, 5000, true);
88
89 //---- REFACTOR NOTE END ----
90 }
91 }
92 else
93 {
94 group.GetOnEmpty().Insert(OnGroupEmpty);
95 }
96 }
97}
SCR_ETaskState
Definition SCR_Task.c:3
ScriptInvoker_AIGroupOnEmpty GetOnEmpty()
static ScriptCallQueue GetCallQueuePausable()
SCR_ScenarioFrameworkLayerTask m_LayerTask
enum EPhysicsLayerPresets Vehicle
Definition gameLib.c:24
EDamageState