9#ifdef FEATURE_NETWORK_RECONCILIATION
11class TransportOwnerState : PawnOwnerState
13 proto native
void SetWorldTransform(
vector transform[4]);
14 proto native
void GetWorldTransform(out
vector transform[4]);
16 proto native
void SetLinearVelocity(
vector value);
17 proto native
void GetLinearVelocity(out
vector value);
19 proto native
void SetAngularVelocity(
vector value);
20 proto native
void GetAngularVelocity(out
vector value);
22 proto native
void SetBuoyancySubmerged(
float value);
23 proto native
float GetBuoyancySubmerged();
26 override event void GetTransform(inout
vector transform[4])
28 GetWorldTransform(transform);
33class TransportMove : PawnMove
35 proto native
void SetWorldTransform(vector transform[4]);
36 proto native
void GetWorldTransform(out vector transform[4]);
38 proto native
void SetLinearVelocity(vector value);
39 proto native
void GetLinearVelocity(out vector value);
41 proto native
void SetAngularVelocity(vector value);
42 proto native
void GetAngularVelocity(out vector value);
45 override event void GetTransform(inout vector transform[4])
47 GetWorldTransform(transform);
59 private static ref VehicleFlippedContext m_FlippedContext;
73 RegisterNetSyncVariableBool(
"m_EngineZoneReceivedHit");
75 if ( MemoryPointExists(
"refill") )
86 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
99 return TransportOwnerState;
105 return TransportMove;
143 proto native
void CrewGetIn( Human player,
int posIdx );
241 return Random01() * (max - min) + min;
295 return EInventoryIconVisibility.HIDE_VICINITY;
310 return "VehicleTypeUndefined";
330 if (!m_FlippedContext)
339 return m_FlippedContext;
349 for (
int i = 0; i < 4; i++)
351 avgPosition = avgPosition + corners[i];
354 avgPosition = avgPosition * 0.25;
357 float depth =
g_Game.GetWaterDepth(avgPosition);
360 vector dirUp = GetDirectionUp();
362 bool testLand = depth < -1.0;
371 ctx.m_SurfaceParams.includeWater =
false;
374 ctx.m_SurfaceParams.ignore =
this;
377 ctx.m_SurfaceParams.rsd = RoadSurfaceDetection.CLOSEST;
379 for (i = 0; i < 4; i++)
381 ctx.m_SurfaceParams.position = corners[i];
383 g_Game.GetSurface(ctx.m_SurfaceParams, ctx.m_SurfaceResult);
385 corners[i][1] = ctx.m_SurfaceResult.height;
398 bool isFlipped =
vector.Dot(normal, dirUp) <
Math.Cos(angleTolerance *
Math.DEG2RAD);
403 int color = 0xFF00FF00;
427 ctx.m_bIsAction =
false;
428 ctx.m_ActionPlayer = null;
436 ctx.m_bIsAction =
true;
437 ctx.m_ActionPlayer = player;
443 for (
int index = 0; index <
CrewSize(); ++index)
467#ifndef CFGMODS_DEFINE_TEST
468 Error(
"GetAnimInstance() not implemented");
477#ifndef CFGMODS_DEFINE_TEST
478 Error(
"GetSeatAnimationType() not implemented");
485#ifndef CFGMODS_DEFINE_TEST
486 Error(
"Get3rdPersonCameraType() not implemented");
495#ifndef CFGMODS_DEFINE_TEST
504#ifndef CFGMODS_DEFINE_TEST
513#ifndef CFGMODS_DEFINE_TEST
522#ifndef CFGMODS_DEFINE_TEST
532 switch (pDoorSelection)
537 case "DoorsCoDriver":
564 if (
Class.CastTo(player, o))
567 HumanCommandVehicle hcv = player.GetCommand_Vehicle();
568 if (hcv && hcv.GetTransport() ==
this)
576 return ( ( e && (e.IsZombie() || e.IsHologram()) ) || o.CanBeSkinned() || o.IsBush() || o.IsTree() );
592 super.GetDebugActions(outputList);
595 if (Gizmo_IsSupported())
603 if (super.OnAction(action_id, player, ctx))
636 GetTransform(transform);
640 CrewEntry( currentSeat, crewPos, crewDir );
644 entry[0] =
vector.Up * crewDir;
645 entry[1] = entry[2] * entry[0];
648 Math3D.MatrixMultiply4( transform, entry, transform );
650 vector position = transform[3];
653 position[1] = position[1] + maxAllowedObjHeight + (extents[1] * 0.5);
658 excluded.Insert(
this);
660 g_Game.IsBoxColliding(position, orientation, extents, excluded, collided);
662 orientation.RotationMatrixFromAngles(transform);
663 transform[3] = position;
665 foreach (
Object o : collided)
672 if (o.GetCollisionBox(minmax))
679 bool IsAreaAtDoorFree(
int currentSeat,
float maxAllowedObjHeight = 0.5,
float horizontalExtents = 0.5,
float playerHeight = 1.7 )
684 extents[0] = horizontalExtents;
685 extents[1] = playerHeight;
686 extents[2] = horizontalExtents;
688 return IsAreaAtDoorFree( currentSeat, maxAllowedObjHeight, extents, transform );
691 Shape DebugFreeAreaAtDoor(
int currentSeat,
float maxAllowedObjHeight = 0.5,
float horizontalExtents = 0.5,
float playerHeight = 1.7 )
693 int color =
ARGB(20, 0, 255, 0);
698 extents[0] = horizontalExtents;
699 extents[1] = playerHeight;
700 extents[2] = horizontalExtents;
702 if (!
IsAreaAtDoorFree( currentSeat, maxAllowedObjHeight, extents, transform ))
704 color =
ARGB(20, 255, 0, 0);
707 Shape shape =
Debug.DrawBox(-extents * 0.5, extents * 0.5, color);
708 shape.SetMatrix(transform);
721 m_LocalPos = localPos;
729 bool m_bIsAction =
false;
737 private bool m_bIsDebug;
749 void Reset(
bool isDebug =
false)
751 foreach (
Shape shape : m_DebugShapes)
756 m_DebugShapes.Clear();
758 m_bIsDebug = isDebug;
761 void AddShape(
Shape shape)
763 m_DebugShapes.Insert(shape);
Param4< int, int, string, int > TSelectableActionInfoWithColor
Super root of all classes in Enforce script.
bool CanReachSeatFromSeat(int currentSeat, int nextSeat)
override bool IsHealthVisible()
override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
proto void CrewEntryWS(int posIdx, out vector pos, out vector dir)
Reads entry point and direction into vehicle on given position in world space.
void UpdateLights(int new_gear=-1)
void OnDriverEnter(Human player)
bool DetectFlippedUsingSurface(VehicleFlippedContext ctx, float angleTolerance)
proto native void LightToggle()
Calls LightOn/LightOff depending on current light state.
float GetActionDistanceFuel()
bool DetectFlipped(VehicleFlippedContext ctx)
Override based on vehicle implementation (Car, Boat, modded, etc.).
proto void CrewEntry(int posIdx, out vector pos, out vector dir)
Reads entry point and direction into vehicle on given position in model space.
override bool ShowZonesHealth()
bool m_EngineZoneReceivedHit
bool IsActionFlipped(Man player)
Don't override, may change to native for caching 'DetectFlipped' in the future based on active-ness (...
override int GetHideIconMask()
proto native Human CrewMember(int posIdx)
proto void CrewTransform(int posIdx, out vector mat[4])
Returns crew transformation indside vehicle in model space.
proto native Human CrewGetOut(int posIdx)
Performs transfer of player from vehicle into world from given position.
float GetTransportCameraDistance()
override int GetMeleeTargetType()
override event GetOwnerStateType()
void OnContact(string zoneName, vector localPos, IEntity other, Contact data)
proto native float Random01()
Random number in range of <0,1> - !!! use this only during deterministic simulation (EOnSimulate/EOnP...
void MarkCrewMemberUnconscious(int crewMemberIndex)
proto native int Random()
-------------— deterministic random numbers ---------------------—
void SetEngineZoneReceivedHit(bool pState)
proto native int CrewPositionIndex(int componentIdx)
proto native int CrewMemberIndex(Human player)
bool IsAreaAtDoorFree(int currentSeat, float maxAllowedObjHeight, inout vector extents, out vector transform[4])
override bool IsTransport()
proto native Human CrewDriver()
string GetActionCompNameFuel()
VehicleFlippedContext GetFlipContext()
proto void ApplyImpulseAt(vector pos, vector force)
Applies impulse on the physics body at a position (world space coordinates).
proto void ApplyForceAt(vector pos, vector force)
Applies constant force on the physics body at a position (world space coordinates).
override bool OnAction(int action_id, Man player, ParamsReadContext ctx)
proto native void Synchronize()
Synchronizes car's state in case the simulation is not running.
float RandomFloat(float min, float max)
Random number in range of <min,max> - !!! use this only during deterministic simulation (EOnSimulate/...
proto void ApplyTorque(vector force)
Applies constant torque on the physics body.
override event GetMoveType()
proto void CrewTransformWS(int posIdx, out vector mat[4])
Returns crew transformation indside vehicle in world space.
vector GetTransportCameraOffset()
proto native int CrewSize()
Returns crew capacity of this vehicle.
proto native void LightOn()
Signals for LightIsOn to return true.
bool CrewCanGetThrough(int posIdx)
int GetSeatIndexFromDoor(string pDoorSelection)
bool IsFlipped()
Don't override, may change to native for caching 'DetectFlipped' in the future based on active-ness (...
proto native void CrewGetIn(Human player, int posIdx)
Performs transfer of player from world into vehicle on given position.
proto native void LightOff()
Signals for LightIsOn to return false.
proto void ApplyTorqueImpulse(vector torqueImpulse)
Applies impulse torque on the physics body.
Shape DebugFreeAreaAtDoor(int currentSeat, float maxAllowedObjHeight=0.5, float horizontalExtents=0.5, float playerHeight=1.7)
proto void ApplyCentralImpulse(vector centralImpulse)
Applies impulse on the physics body (at origin).
int GetSeatAnimationType(int posIdx)
bool IsAreaAtDoorFree(int currentSeat, float maxAllowedObjHeight=0.5, float horizontalExtents=0.5, float playerHeight=1.7)
bool HasEngineZoneReceivedHit()
proto void ApplyForce(vector force)
-------------— deterministic physics ---------------------—
int Get3rdPersonCameraType()
ref set< int > m_DeadCrewMemberIndices
override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
proto native bool LightIsOn()
Returns true when lights are on, false otherwise.
void MarkCrewMemberDead(int crewMemberIndex)
override bool IsIgnoredByConstruction()
bool CanReachDoorsFromSeat(string pDoorsSelection, int pCurrentSeat)
bool CanReachSeatFromDoors(string pSeatSelection, vector pFromPos, float pDistance=1.0)
ref set< int > m_UnconsciousCrewMemberIndices
proto native void CrewDeath(int posIdx)
Handles death of player in vehicle and awakes its physics if needed.
vector GetRefillPointPosWS()
proto native float RandomRange(int pRange)
Random number in range of <0,pRange-1> - !!! use this only during deterministic simulation (EOnSimula...
void OnDriverExit(Human player)
bool IsIgnoredObject(Object o)
Native class for boats - handles physics simulation.
override bool IsAreaAtDoorFree(int currentSeat, float maxAllowedObjHeight=0.5, float horizontalExtents=0.5, float playerHeight=1.7)
void HandleByCrewMemberState(ECrewMemberState state)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native float Random01()
Random number in range of <0,1> - !!! use this only during deterministic simulation (CommandHandler).
Serializer ParamsReadContext
proto GizmoApi GetGizmoApi()
void Error(string err)
Messagebox with error message.
void Obsolete(string msg="")
proto native bool dGetInteractionLayer(notnull IEntity worldEntity, int mask1, int mask2)
proto native vector GetVelocity(notnull IEntity ent)
Returns linear velocity.
proto native float dBodyGetMass(notnull IEntity ent)
proto native int dBodyGetInteractionLayer(notnull IEntity ent)
const int SAT_DEBUG_ACTION
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
ref TIntArray m_SingleUseActions
ref TIntArray m_InteractActions
ref TIntArray m_ContinuousActions
int ARGB(int a, int r, int g, int b)