Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
actionpushcar.c
Go to the documentation of this file.
1class ActionPushCarData : ActionPushObjectData
2{
3 int m_PushDirection = -1;
4 float m_HorizontalDirectionRandom = 1.0;
5 float m_VerticalDirectionRandom = 1.0;
6
7 // deprecated
8 CarScript m_Car;
9}
10
11class CAContinuousRepeatPushCar : CAContinuousRepeatPushObject
12{
13 override float GetProgressWidgetMultiplier()
14 {
15 return 2.5;
16 }
17}
18
19class ActionPushCarCB : ActionPushObjectCB
20{
21 protected float PUSH_FORCE_IMPULSE_INCREMENT = 200.0;
22
23 private ActionPushCarData m_ActionDataPushCar;
24
25 override void CreateActionComponent()
26 {
27 m_ActionData.m_ActionComponent = new CAContinuousRepeatPushCar(UATimeSpent.PUSH_CAR);
28 }
29
30 override protected void ApplyForce(ActionPushObjectData actionData)
31 {
32 m_ActionDataPushCar = ActionPushCarData.Cast(m_ActionData);
33 CarScript car = CarScript.Cast(actionData.m_Object);
34
35 m_ActionDataPushCar.m_HorizontalDirectionRandom = Math.RandomFloat(1.0, 3.5);
36 m_ActionDataPushCar.m_VerticalDirectionRandom = Math.RandomFloat(-0.5, 0.5);
37
38 float bodyMass = dBodyGetMass(car);
39 float invBodyMass = 1.0 / bodyMass;
41
42 float easedProgress = Easing.EaseInOutSine(actionData.m_ActionComponent.GetProgress());
43
44 vector impulse = car.GetDirection() * force * (float)m_ActionDataPushCar.m_PushDirection;
45 impulse = impulse * invBodyMass;
46 impulse[0] = impulse[0] * m_ActionDataPushCar.m_HorizontalDirectionRandom;
47 impulse[1] = impulse[1] * m_ActionDataPushCar.m_VerticalDirectionRandom;
48 impulse = impulse * easedProgress;
49
50 actionData.m_Player.DepleteStamina(EStaminaModifiers.PUSH_CAR);
51
52 dBodyApplyImpulseAt(car, impulse, car.ModelToWorld(car.GetEnginePos()));
53 }
54}
55
57{
58 void ActionPushCar()
59 {
60 m_CallbackClass = ActionPushCarCB;
61 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_VEHICLE_PUSH;
62 m_FullBody = true;
63 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
64
65 m_Text = "#push_car";
66 }
67
68 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
69 {
70 if (!super.ActionCondition(player, target, item))
71 return false;
72
73 if (!IsInReach(player, target, UAMaxDistances.SMALL))
74 return false;
75
76 return true;
77 }
78
79 override ActionData CreateActionData()
80 {
81 ActionPushObjectData data = new ActionPushCarData();
82 return data;
83 }
84
85 override void OnStartServer(ActionData action_data)
86 {
87 super.OnStartServer(action_data);
88
89 ActionPushCarData data = ActionPushCarData.Cast(action_data);
90 Car carObj = Car.Cast(data.m_Object);
91 if (carObj)
92 {
93 carObj.SetBrake(0.0);
94 carObj.SetHandbrake(0.0);
95 carObj.SetBrakesActivateWithoutDriver(false);
96 }
97
98 data.m_PushDirection = -1;
99 if (GetDirectionDot(data.m_Object, data.m_Player) > 0)
100 data.m_PushDirection = 1;
101
102 }
103
104 override void OnEndServer(ActionData action_data)
105 {
106 super.OnEndServer(action_data);
107
108 ActionPushObjectData data = ActionPushObjectData.Cast(action_data);
109 Car carObj = Car.Cast(data.m_Object);
110 if (carObj)
111 carObj.SetBrakesActivateWithoutDriver(true);
112 }
113
114 protected float GetDirectionDot(Object target, EntityAI player)
115 {
116 return vector.Dot(target.GetDirection(), player.GetDirection());
117 }
118
120 private CarScript GetCar(ActionTarget target)
121 {
122 return CarScript.Cast(GetPushObject(target));
123 }
124}
125
126// deprecated
127class ActionPushCarDataReceiveData : ActionPushObjectDataReceiveData
128{
129 CarScript m_Car;
130}
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
int m_CommandUID
Definition actionbase.c:31
int m_StanceMask
Definition actionbase.c:33
ActionPushCarCB ActionPushObjectCB ActionPushCar()
float GetDirectionDot(Object target, EntityAI player)
override ActionData CreateActionData()
bool IsInReach(PlayerBase player, ActionTarget target, float maxDistance=1.0)
float PUSH_FORCE_IMPULSE_INCREMENT
void ApplyForce(ActionPushObjectData actionData)
Object GetPushObject(ActionTarget target)
override void OnStartServer(ActionData action_data)
override void OnEndServer(ActionData action_data)
float GetProgressWidgetMultiplier()
Definition cabase.c:67
override float GetPushForceCoefficientMultiplier()
Input value between 0 and 1, returns value adjusted by easing, no automatic clamping of input(do your...
Definition easing.c:3
Definition enmath.c:7
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
EStaminaModifiers
proto void dBodyApplyImpulseAt(notnull IEntity body, vector impulse, vector pos)
Applies impuls on a pos position in world coordinates.
proto native float dBodyGetMass(notnull IEntity ent)