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