DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionPushObject.c
См. документацию.
5
6class ActionPushObjectData : ActionData
7{
9 int m_EndType = 0;
10 vector m_Origin = "0 0 0";
11
13}
14
16{
17 void CAContinuousRepeatPushObject(float time_to_complete_action)
18 {
19 m_DefaultTimeToComplete = time_to_complete_action;
20 }
21
22 override int Execute(ActionData action_data)
23 {
24 if (!action_data.m_Player)
25 return UA_ERROR;
26
28 {
29 m_TimeElpased += action_data.m_Player.GetDeltaT();
30 m_TotalTimeElpased += action_data.m_Player.GetDeltaT();
31 return UA_PROCESSING;
32 }
33 else
34 {
38 OnCompletePogress(action_data);
39
40 return UA_CANCEL;
41 }
42
43 return UA_FINISHED;
44 }
45}
46
47class ActionPushObjectCB : ActionContinuousBaseCB
48{
49 protected float PUSH_FORCE_INCREMENT = 3000.0;
50 protected ActionPushObjectData m_ActionDataPushObject;
51
52 override void CreateActionComponent()
53 {
54 m_ActionData.m_ActionComponent = new CAContinuousRepeatPushObject(10);
55 }
56
58 {
59 super.ProgressActionComponent();
60
61 ActionPushObjectData data = ActionPushObjectData.Cast(m_ActionData);
62 ApplyForce(data);
63 }
64
65 override void EndActionComponent()
66 {
67 m_ActionDataPushObject = ActionPushObjectData.Cast(m_ActionData);
68
70 {
71 super.EndActionComponent();
72 return;
73 }
74
76 {
77 if (m_ActionDataPushObject.m_EndType == 1)
78 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_FINISH);
79 else if (m_ActionDataPushObject.m_EndType == 0)
80 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_END);
81 }
82 else if (m_ActionDataPushObject.m_State == UA_CANCEL)
83 {
85 if (action.HasAlternativeInterrupt())
86 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_FINISH);
87 else
88 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_END);
89
90 return;
91 }
92
94 }
95
96 protected void ApplyForce(ActionPushObjectData actionData)
97 {
98 Object entity = actionData.m_Object;
99
100 float bodyMass = dBodyGetMass(entity);
101 float invBodyMass = 1.0 / bodyMass;
102 float force = bodyMass * PUSH_FORCE_INCREMENT;
103 float easedProgress = Easing.EaseInOutSine(actionData.m_ActionComponent.GetProgress());
104
105 vector impulse = force * actionData.m_Player.GetDirection() * invBodyMass * easedProgress;
106
107 actionData.m_Player.DepleteStamina(EStaminaModifiers.PUSH_CAR);
108
109 dBodyApplyImpulseAt(entity, impulse, entity.ModelToWorld(vector.Zero));
110 }
111}
112
114{
115
116 override typename GetInputType()
117 {
119 }
120
126
128 {
129 return true;
130 }
131
133 {
134 ActionPushObjectData data = new ActionPushObjectData();
135 return data;
136 }
137
138 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
139 {
140 if (!player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_ERECT|DayZPlayerConstants.STANCEMASK_CROUCH))
141 return false;
142
143 if (player.PhysicsGetLinkedEntity() == target.GetObject())
144 return false;
145
146 if (!player.GetSurfaceType())
147 return false;
148
149 if (!player.CanConsumeStamina(EStaminaConsumers.PUSH))
150 return false;
151
152 return true;
153 }
154
155 override void OnUpdate(ActionData action_data)
156 {
157 super.OnUpdate(action_data);
158
159 ActionPushObjectData data = ActionPushObjectData.Cast(action_data);
160 if (data.m_NeedUpdate)
161 {
162 if (!data.m_Player.CanConsumeStamina(EStaminaConsumers.PUSH))
163 {
164 data.m_State = UA_CANCEL;
165 data.m_NeedUpdate = false;
166
167 return;
168 }
169
170 if (vector.Distance(data.m_Object.GetPosition(), data.m_Origin) > 0.5)
171 {
172 data.m_State = UA_FINISHED;
173 data.m_EndType = 0;
174 data.m_NeedUpdate = false;
175 }
176 }
177 }
178
179 override void OnStart(ActionData action_data)
180 {
181 super.OnStart(action_data);
182
183 ActionPushObjectData data = ActionPushObjectData.Cast(action_data);
184 data.m_Object = GetPushObject(action_data.m_Target);
185 data.m_Origin = data.m_Object.GetPosition();
186 data.m_NeedUpdate = true;
187 }
188
189 override void OnEndInput(ActionData action_data)
190 {
191 super.OnEndInput(action_data);
192
193 ActionPushObjectData data = ActionPushObjectData.Cast(action_data);
194 data.m_State = UA_CANCEL;
195 data.m_EndType = 1;
196 data.m_NeedUpdate = false;
197 }
198
200 {
201 if (target.IsProxy())
202 return target.GetParent();
203
204 return target.GetObject();
205 }
206}
ActionBase ActionData
Определения ActionBase.c:30
ActionEat CreateActionComponent
Определения ActionEat.c:39
void ApplyForce(ActionPushObjectData actionData)
Определения ActionPushCar.c:68
ActionPushObjectData m_ActionDataPushObject
Определения ActionPushObject.c:50
Object m_Object
Определения ActionPushObject.c:12
vector m_Origin
Определения ActionPushObject.c:10
int m_EndType
Определения ActionPushObject.c:9
override void ProgressActionComponent()
Определения ActionPushObject.c:57
ActionPushObjectDataReceiveData m_NeedUpdate
CAContinuousRepeatPushObject PUSH_FORCE_INCREMENT
override void EndActionComponent()
Определения ActionPushObject.c:65
class ActionTargets ActionTarget
EStaminaConsumers
Определения EStaminaConsumers.c:2
EStaminaModifiers
Определения EStaminaModifiers.c:2
ref CCIBase m_ConditionItem
Определения ActionBase.c:64
ref CCTBase m_ConditionTarget
Определения ActionBase.c:65
bool HasAlternativeInterrupt()
Определения ActionContinuousBase.c:147
void ActionContinuousBase()
Определения ActionContinuousBase.c:124
override void CreateConditionComponents()
Определения ActionPushObject.c:121
override void OnStart(ActionData action_data)
Определения ActionPushObject.c:179
override void OnEndInput(ActionData action_data)
Определения ActionPushObject.c:189
override void OnUpdate(ActionData action_data)
Определения ActionPushObject.c:155
override GetInputType()
Определения ActionPushObject.c:116
override ActionData CreateActionData()
Определения ActionPushObject.c:132
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionPushObject.c:138
override bool HasAlternativeInterrupt()
Определения ActionPushObject.c:127
Object GetPushObject(ActionTarget target)
Определения ActionPushObject.c:199
void SetACData(Param units)
Определения CABase.c:40
void OnCompletePogress(ActionData action_data)
Определения CAContinuousBase.c:8
float m_TimeElpased
Определения CAContinuousRepeat.c:3
float m_DefaultTimeToComplete
Определения CAContinuousRepeat.c:6
float m_TotalTimeElpased
Определения CAContinuousRepeat.c:4
float m_TimeToComplete
Определения CAContinuousRepeat.c:5
ref Param1< float > m_SpentUnits
Определения CAContinuousRepeat.c:7
void CAContinuousRepeat(float time_to_complete_action)
Определения CAContinuousRepeat.c:9
override int Execute(ActionData action_data)
Определения ActionPushObject.c:22
void CAContinuousRepeatPushObject(float time_to_complete_action)
Определения ActionPushObject.c:17
Определения CCINotPresent.c:2
static float EaseInOutSine(float t)
Определения Easing.c:14
Input value between 0 and 1, returns value adjusted by easing, no automatic clamping of input(do your...
Определения Easing.c:3
Определения InventoryItem.c:731
Определения ObjectTyped.c:2
Определения PlayerBaseClient.c:2
const float DEFAULT
Определения ActionConstants.c:112
static const vector Zero
Определения EnConvert.c:110
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
Определения EnConvert.c:106
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
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)
const int UA_FINISHED
Определения constants.c:464
const int UA_ERROR
Определения constants.c:483
const int UA_PROCESSING
Определения constants.c:462
const int UA_CANCEL
Определения constants.c:465