96 protected void ApplyForce(ActionPushObjectData actionData)
98 Object entity = actionData.m_Object;
101 float invBodyMass = 1.0 / bodyMass;
103 float easedProgress =
Easing.EaseInOutSine(actionData.m_ActionComponent.GetProgress());
105 vector impulse = force * actionData.m_Player.GetDirection() * invBodyMass * easedProgress;
116 override typename GetInputType()
121 override void CreateConditionComponents()
127 override bool HasAlternativeInterrupt()
132 override ActionData CreateActionData()
134 ActionPushObjectData data =
new ActionPushObjectData();
143 if (player.PhysicsGetLinkedEntity() == target.GetObject())
146 if (!player.GetSurfaceType())
155 override void OnUpdate(ActionData action_data)
157 super.OnUpdate(action_data);
159 ActionPushObjectData data = ActionPushObjectData.Cast(action_data);
160 if (data.m_NeedUpdate)
165 data.m_NeedUpdate =
false;
170 if (
vector.Distance(data.m_Object.GetPosition(), data.m_Origin) > 0.5)
174 data.m_NeedUpdate =
false;
179 override void OnStart(ActionData action_data)
181 super.OnStart(action_data);
183 ActionPushObjectData data = ActionPushObjectData.Cast(action_data);
185 data.m_Origin = data.m_Object.GetPosition();
186 data.m_NeedUpdate =
true;
189 override void OnEndInput(ActionData action_data)
191 super.OnEndInput(action_data);
193 ActionPushObjectData data = ActionPushObjectData.Cast(action_data);
196 data.m_NeedUpdate =
false;
201 if (target.IsProxy())
202 return target.GetParent();
204 return target.GetObject();
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)