DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Transport.c
См. документацию.
1
4#ifdef FEATURE_NETWORK_RECONCILIATION
5
6class TransportOwnerState : PawnOwnerState
7{
8 proto native void SetWorldTransform(vector transform[4]);
9 proto native void GetWorldTransform(out vector transform[4]);
10
11 proto native void SetLinearVelocity(vector value);
12 proto native void GetLinearVelocity(out vector value);
13
14 proto native void SetAngularVelocity(vector value);
15 proto native void GetAngularVelocity(out vector value);
16
17 proto native void SetBuoyancySubmerged(float value);
18 proto native float GetBuoyancySubmerged();
19
20#ifdef DIAG_DEVELOPER
21 override event void GetTransform(inout vector transform[4])
22 {
23 GetWorldTransform(transform);
24 }
25#endif
26};
27
28class TransportMove : PawnMove
29{
30 proto native void SetWorldTransform(vector transform[4]);
31 proto native void GetWorldTransform(out vector transform[4]);
32
33 proto native void SetLinearVelocity(vector value);
34 proto native void GetLinearVelocity(out vector value);
35
36 proto native void SetAngularVelocity(vector value);
37 proto native void GetAngularVelocity(out vector value);
38
39#ifdef DIAG_DEVELOPER
40 override event void GetTransform(inout vector transform[4])
41 {
42 GetWorldTransform(transform);
43 }
44#endif
45};
46
48class Transport extends Pawn
49#else
50class Transport extends EntityAI
51#endif
52{
55
59
61 protected vector m_fuelPos;
62
63 protected ref set<int> m_UnconsciousCrewMemberIndices;
64 protected ref set<int> m_DeadCrewMemberIndices;
65
66 void Transport()
67 {
68 RegisterNetSyncVariableBool("m_EngineZoneReceivedHit");
69
70 if ( MemoryPointExists("refill") )
71 m_fuelPos = GetMemoryPointPos("refill");
72 else
73 m_fuelPos = "0 0 0";
74
75 m_UnconsciousCrewMemberIndices = new set<int>();
76 m_DeadCrewMemberIndices = new set<int>();
77 }
78
79 override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
80 {
81 super.EEHitBy(damageResult, damageType, source, component, dmgZone, ammo, modelPos, speedCoef);
82
83 SetEngineZoneReceivedHit(dmgZone == "Engine");
84 }
85
86 override int GetMeleeTargetType()
87 {
88 return EMeleeTargetType.NONALIGNABLE;
89 }
90
92 protected override event typename GetOwnerStateType()
93 {
94 return TransportOwnerState;
95 }
96
98 protected override event typename GetMoveType()
99 {
100 return TransportMove;
101 }
102
104 proto native void Synchronize();
105
107 proto native int CrewSize();
108
111 proto native int CrewPositionIndex( int componentIdx );
112
115 proto native int CrewMemberIndex( Human player );
116
119 proto native Human CrewMember( int posIdx );
120
123 proto native Human CrewDriver();
124
126 proto void CrewEntry( int posIdx, out vector pos, out vector dir );
127
129 proto void CrewEntryWS( int posIdx, out vector pos, out vector dir );
130
132 proto void CrewTransform( int posIdx, out vector mat[4] );
133
135 proto void CrewTransformWS( int posIdx, out vector mat[4] );
136
138 proto native void CrewGetIn( Human player, int posIdx );
139
141 proto native Human CrewGetOut( int posIdx );
142
144 proto native void CrewDeath( int posIdx );
145
146 override bool IsTransport()
147 {
148 return true;
149 }
150
152 {
153 return false;
154 }
155
156 override bool IsHealthVisible()
157 {
158 return true;
159 }
160
161 override bool ShowZonesHealth()
162 {
163 return true;
164 }
165
166 override int GetHideIconMask()
167 {
168 return EInventoryIconVisibility.HIDE_VICINITY;
169 }
170
172 {
173 return GetVelocity(this).Length() * dBodyGetMass(this);
174 }
175
177 {
178 return true;
179 }
180
182 {
183 return "VehicleTypeUndefined";
184 }
185
187 {
188 return "refill";
189 }
190
192 {
193 return 1.5;
194 }
195
197 {
198 return ModelToWorld( m_fuelPos );
199 }
200
202 {
203 if (!m_FlippedContext)
204 {
206 }
207
208#ifdef DIAG_DEVELOPER
209 m_FlippedContext.Reset(DiagMenu.GetBool(DiagMenuIDs.VEHICLE_DRAW_FLIP_CONTEXT));
210#endif
211
212 return m_FlippedContext;
213 }
214
215 protected bool DetectFlippedUsingSurface(VehicleFlippedContext ctx, float angleTolerance)
216 {
217 vector corners[4];
218 GetTightlyPackedCorners(ETransformationAxis.BOTTOM, corners);
219
220 // compute the average position to find the lowest "center-most" position
221 vector avgPosition = vector.Zero;
222 for (int i = 0; i < 4; i++)
223 {
224 avgPosition = avgPosition + corners[i];
225 }
226
227 avgPosition = avgPosition * 0.25;
228
229 // get depth of the water to determine if we should use the roadway surface normal or just up vector
230 float depth = GetGame().GetWaterDepth(avgPosition);
231
232 vector normal = vector.Up;
233 vector dirUp = GetDirectionUp();
234
235 bool testLand = depth < -1.0;
236
237 // iterate over the corners to find the average normal
238 if (testLand)
239 {
240 // trace roadway, incase the vehicle is on a rock, or bridge
242
243 // ignore expensive water computation, we already know we are above land
244 ctx.m_SurfaceParams.includeWater = false;
245
246 // ignore this vehicle, it may have a roadway LOD
247 ctx.m_SurfaceParams.ignore = this;
248
249 // detect closest to the given point
250 ctx.m_SurfaceParams.rsd = RoadSurfaceDetection.CLOSEST;
251
252 for (i = 0; i < 4; i++)
253 {
254 ctx.m_SurfaceParams.position = corners[i];
255
257
258 corners[i][1] = ctx.m_SurfaceResult.height;
259 }
260
261 vector d0 = vector.Direction(corners[0], corners[1]);
262 vector d1 = vector.Direction(corners[0], corners[2]);
263
264 d0.Normalize();
265 d1.Normalize();
266
267 // cross product the two directions to get the normal vector of the land
268 normal = d0 * d1;
269 }
270
271 bool isFlipped = vector.Dot(normal, dirUp) < Math.Cos(angleTolerance * Math.DEG2RAD);
272
273#ifdef DIAG_DEVELOPER
274 if (ctx.IsDebug())
275 {
276 int color = 0xFF00FF00;
277 if (isFlipped)
278 color = 0xFFFF0000;
279
280 ctx.AddShape(Shape.Create(ShapeType.LINE, color, ShapeFlags.NOZBUFFER, corners[0], corners[0] + normal));
281 ctx.AddShape(Shape.Create(ShapeType.LINE, color, ShapeFlags.NOZBUFFER, corners[1], corners[1] + normal));
282 ctx.AddShape(Shape.Create(ShapeType.LINE, color, ShapeFlags.NOZBUFFER, corners[2], corners[2] + normal));
283 ctx.AddShape(Shape.Create(ShapeType.LINE, color, ShapeFlags.NOZBUFFER, corners[3], corners[3] + normal));
284 }
285#endif
286
287 return isFlipped;
288 }
289
292 {
293 return false;
294 }
295
297 /*sealed*/ bool IsFlipped()
298 {
300 ctx.m_bIsAction = false;
301 ctx.m_ActionPlayer = null;
302 return DetectFlipped(ctx);
303 }
304
306 /*sealed*/ bool IsActionFlipped(Man player)
307 {
309 ctx.m_bIsAction = true;
310 ctx.m_ActionPlayer = player;
311 return DetectFlipped(ctx);
312 }
313
315 {
316 for (int index = 0; index < CrewSize(); ++index)
317 {
318 if (CrewMember(index) != null)
319 return true;
320 }
321
322 return false;
323 }
324
326 {
327 return 4.0;
328 }
329
330 void MarkCrewMemberUnconscious(int crewMemberIndex)
331 {
332 set<int> crewMemberIndicesCopy = new set<int>();
333 crewMemberIndicesCopy.Copy(m_UnconsciousCrewMemberIndices);
334 crewMemberIndicesCopy.Insert(crewMemberIndex);
335
336 m_UnconsciousCrewMemberIndices = crewMemberIndicesCopy;
337 }
338
339 void MarkCrewMemberDead(int crewMemberIndex)
340 {
341 set<int> crewMemberIndicesCopy = new set<int>();
342 crewMemberIndicesCopy.Copy(m_DeadCrewMemberIndices);
343 crewMemberIndicesCopy.Insert(crewMemberIndex);
344
345 m_DeadCrewMemberIndices = crewMemberIndicesCopy;
346 }
348
350 {
351 return "0 1.3 0";
352 }
353
355 {
356#ifndef CFGMODS_DEFINE_TEST
357 Error("GetAnimInstance() not implemented");
358 return 0;
359#else
360 return 2;
361#endif
362 }
363
364 int GetSeatAnimationType( int posIdx )
365 {
366#ifndef CFGMODS_DEFINE_TEST
367 Error("GetSeatAnimationType() not implemented");
368#endif
369 return 0;
370 }
371
373 {
374#ifndef CFGMODS_DEFINE_TEST
375 Error("Get3rdPersonCameraType() not implemented");
376 return 0;
377#else
378 return 31;
379#endif
380 }
381
382 bool CrewCanGetThrough( int posIdx )
383 {
384#ifndef CFGMODS_DEFINE_TEST
385 return false;
386#else
387 return true;
388#endif
389 }
390
391 bool CanReachSeatFromSeat( int currentSeat, int nextSeat )
392 {
393#ifndef CFGMODS_DEFINE_TEST
394 return false;
395#else
396 return true;
397#endif
398 }
399
400 bool CanReachSeatFromDoors( string pSeatSelection, vector pFromPos, float pDistance = 1.0 )
401 {
402#ifndef CFGMODS_DEFINE_TEST
403 return false;
404#else
405 return true;
406#endif
407 }
408
409 bool CanReachDoorsFromSeat( string pDoorsSelection, int pCurrentSeat )
410 {
411#ifndef CFGMODS_DEFINE_TEST
412 return false;
413#else
414 return true;
415#endif
416 }
417
418 int GetSeatIndexFromDoor( string pDoorSelection )
419 {
420 //Potientially could be fixed some other way, currently follows the unfortunate pattern that CanReachDoorsFromSeat has created
421 switch (pDoorSelection)
422 {
423 case "DoorsDriver":
424 return 0;
425 break;
426 case "DoorsCoDriver":
427 return 1;
428 break;
429 case "DoorsCargo1":
430 return 2;
431 break;
432 case "DoorsCargo2":
433 return 3;
434 break;
435 }
436 return -1;
437 }
438
440 {
441 if (!o)
442 return false;
443
445 int layer = dBodyGetInteractionLayer(o);
446 bool interacts = dGetInteractionLayer(this, PhxInteractionLayers.CHARACTER, layer);
447 if (!interacts)
448 {
449 return true;
450 }
451
452 DayZPlayer player;
453 if (Class.CastTo(player, o))
454 {
456 HumanCommandVehicle hcv = player.GetCommand_Vehicle();
457 if (hcv && hcv.GetTransport() == this)
458 {
459 return true;
460 }
461 }
462
463 EntityAI e = EntityAI.Cast(o);
464 // CanBeSkinned means it is a dead entity which should not block the door
465 return ( ( e && (e.IsZombie() || e.IsHologram()) ) || o.CanBeSkinned() || o.IsBush() || o.IsTree() );
466 }
467
468 void SetEngineZoneReceivedHit(bool pState)
469 {
471 SetSynchDirty();
472 }
473
475 {
477 }
478
479 bool IsAreaAtDoorFree( int currentSeat, float maxAllowedObjHeight, inout vector extents, out vector transform[4] )
480 {
481 GetTransform(transform);
482
483 vector crewPos;
484 vector crewDir;
485 CrewEntry( currentSeat, crewPos, crewDir );
486
487 vector entry[4];
488 entry[2] = crewDir;
489 entry[0] = vector.Up * crewDir;
490 entry[1] = entry[2] * entry[0];
491 entry[3] = crewPos;
492
493 Math3D.MatrixMultiply4( transform, entry, transform );
494
495 vector position = transform[3];
496 vector orientation = Math3D.MatrixToAngles(transform);
497
498 position[1] = position[1] + maxAllowedObjHeight + (extents[1] * 0.5);
499
500 array<Object> excluded = new array<Object>;
501 array<Object> collided = new array<Object>;
502
503 excluded.Insert(this);
504
505 GetGame().IsBoxColliding(position, orientation, extents, excluded, collided);
506
507 orientation.RotationMatrixFromAngles(transform);
508 transform[3] = position;
509
510 foreach (Object o : collided)
511 {
512 EntityAI e = EntityAI.Cast(o);
513 if (IsIgnoredObject(o))
514 continue;
515
516 vector minmax[2];
517 if (o.GetCollisionBox(minmax))
518 return false;
519 }
520
521 return true;
522 }
523
524 bool IsAreaAtDoorFree( int currentSeat, float maxAllowedObjHeight = 0.5, float horizontalExtents = 0.5, float playerHeight = 1.7 )
525 {
526 vector transform[4];
527 vector extents;
528
529 extents[0] = horizontalExtents;
530 extents[1] = playerHeight;
531 extents[2] = horizontalExtents;
532
533 return IsAreaAtDoorFree( currentSeat, maxAllowedObjHeight, extents, transform );
534 }
535
536 Shape DebugFreeAreaAtDoor( int currentSeat, float maxAllowedObjHeight = 0.5, float horizontalExtents = 0.5, float playerHeight = 1.7 )
537 {
538 int color = ARGB(20, 0, 255, 0);
539
540 vector transform[4];
541 vector extents;
542
543 extents[0] = horizontalExtents;
544 extents[1] = playerHeight;
545 extents[2] = horizontalExtents;
546
547 if (!IsAreaAtDoorFree( currentSeat, maxAllowedObjHeight, extents, transform ))
548 {
549 color = ARGB(20, 255, 0, 0);
550 }
551
552 Shape shape = Debug.DrawBox(-extents * 0.5, extents * 0.5, color);
553 shape.SetMatrix(transform);
554 return shape;
555 }
556};
557
559{
563
564 void SetData(vector localPos, IEntity other, float impulse)
565 {
566 m_LocalPos = localPos;
567 m_Other = other;
568 m_Impulse = impulse;
569 }
570};
571
573{
574 bool m_bIsAction = false;
576
579
580#ifdef DIAG_DEVELOPER
581 private ref array<Shape> m_DebugShapes;
582 private bool m_bIsDebug;
583
585 {
586 m_DebugShapes = new array<Shape>();
587 }
588
590 {
591 Reset();
592 }
593
594 void Reset(bool isDebug = false)
595 {
596 foreach (Shape shape : m_DebugShapes)
597 {
598 shape.Destroy();
599 }
600
601 m_DebugShapes.Clear();
602
603 m_bIsDebug = isDebug;
604 }
605
606 void AddShape(Shape shape)
607 {
608 m_DebugShapes.Insert(shape);
609 }
610
611 bool IsDebug()
612 {
613 return m_bIsDebug;
614 }
615#endif
616};
void Reset()
Определения Inventory.c:1109
override bool DetectFlipped(VehicleFlippedContext ctx)
Определения CarScript.c:1190
PhxInteractionLayers
Определения DayZPhysics.c:2
ECrewMemberState
Определения ECrewMemberState.c:2
DiagMenuIDs
Определения EDiagMenuIDs.c:2
EMeleeTargetType
Определения EMeleeTargetType.c:2
ETransformationAxis
Определения ETransformationAxis.c:2
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
SurfaceDetectionType
Определения SurfaceInfo.c:66
proto native float GetWaterDepth(vector posWS)
proto native bool IsBoxColliding(vector center, vector orientation, vector edgeLength, array< Object > excludeObjects, array< Object > collidedObjects=NULL)
Finds all objects that are in choosen oriented bounding box (OBB)
proto native bool GetSurface(SurfaceDetectionParameters params, SurfaceDetectionResult result)
API for surface detection.
Super root of all classes in Enforce script.
Определения EnScript.c:11
static Shape DrawBox(vector pos1, vector pos2, int color=0x1fff7f7f)
Определения Debug.c:286
Определения Debug.c:2
Определения EnDebug.c:233
bool CanReachSeatFromSeat(int currentSeat, int nextSeat)
Определения Transport.c:391
ref TIntArray m_InteractActions
Определения Building.c:234
vector m_fuelPos
Определения Transport.c:61
ref TIntArray m_SingleUseActions
Определения Transport.c:56
override bool IsHealthVisible()
Определения Transport.c:156
override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
Определения Transport.c:79
int GetAnimInstance()
Определения Transport.c:354
proto void CrewEntryWS(int posIdx, out vector pos, out vector dir)
Reads entry point and direction into vehicle on given position in world space.
bool DetectFlippedUsingSurface(VehicleFlippedContext ctx, float angleTolerance)
Определения Transport.c:215
float GetActionDistanceFuel()
Определения Transport.c:191
bool DetectFlipped(VehicleFlippedContext ctx)
Override based on vehicle implementation (Car, Boat, modded, etc.)
Определения Transport.c:291
string GetVehicleType()
Определения Transport.c:181
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()
Определения Transport.c:161
bool m_EngineZoneReceivedHit
Определения Transport.c:60
bool IsActionFlipped(Man player)
Don't override, may change to native for caching 'DetectFlipped' in the future based on active-ness (...
Определения Transport.c:306
override int GetHideIconMask()
Определения Transport.c:166
proto native Human CrewMember(int posIdx)
proto void CrewTransform(int posIdx, out vector mat[4])
Returns crew transformation indside vehicle in model space.
void Man()
Определения Man.c:39
proto native Human CrewGetOut(int posIdx)
Performs transfer of player from vehicle into world from given position.
float GetTransportCameraDistance()
Определения Transport.c:325
override int GetMeleeTargetType()
Определения Transport.c:86
void HandleByCrewMemberState(ECrewMemberState state)
override event GetOwnerStateType()
Определения Transport.c:92
void MarkCrewMemberUnconscious(int crewMemberIndex)
Определения Transport.c:330
void SetEngineZoneReceivedHit(bool pState)
Определения Transport.c:468
proto native int CrewPositionIndex(int componentIdx)
proto native int CrewMemberIndex(Human player)
float GetMomentum()
Определения Transport.c:171
bool IsAreaAtDoorFree(int currentSeat, float maxAllowedObjHeight, inout vector extents, out vector transform[4])
Определения Transport.c:479
override bool IsTransport()
Определения Transport.c:146
proto native Human CrewDriver()
string GetActionCompNameFuel()
Определения Transport.c:186
VehicleFlippedContext GetFlipContext()
Определения Transport.c:201
proto native void Synchronize()
Synchronizes car's state in case the simulation is not running.
bool IsAnyCrewPresent()
Определения Transport.c:314
override event GetMoveType()
Определения Transport.c:98
proto void CrewTransformWS(int posIdx, out vector mat[4])
Returns crew transformation indside vehicle in world space.
vector GetTransportCameraOffset()
Определения Transport.c:349
proto native int CrewSize()
Returns crew capacity of this vehicle.
bool CrewCanGetThrough(int posIdx)
Определения Transport.c:382
int GetSeatIndexFromDoor(string pDoorSelection)
Определения Transport.c:418
bool IsFlipped()
Don't override, may change to native for caching 'DetectFlipped' in the future based on active-ness (...
Определения Transport.c:297
proto native void CrewGetIn(Human player, int posIdx)
Performs transfer of player from world into vehicle on given position.
ref TIntArray m_ContinuousActions
Определения Transport.c:57
static ref VehicleFlippedContext m_FlippedContext
Shared context across all vehicles for flipping.
Определения Transport.c:54
Shape DebugFreeAreaAtDoor(int currentSeat, float maxAllowedObjHeight=0.5, float horizontalExtents=0.5, float playerHeight=1.7)
Определения Transport.c:536
int GetSeatAnimationType(int posIdx)
Определения Transport.c:364
bool IsAreaAtDoorFree(int currentSeat, float maxAllowedObjHeight=0.5, float horizontalExtents=0.5, float playerHeight=1.7)
Определения Transport.c:524
bool HasEngineZoneReceivedHit()
Определения Transport.c:474
int Get3rdPersonCameraType()
Определения Transport.c:372
ref set< int > m_DeadCrewMemberIndices
Определения Transport.c:64
void Transport()
Определения Transport.c:66
void MarkCrewMemberDead(int crewMemberIndex)
Определения Transport.c:339
bool IsVitalSparkPlug()
Определения Transport.c:176
override bool IsIgnoredByConstruction()
Определения Transport.c:151
bool CanReachDoorsFromSeat(string pDoorsSelection, int pCurrentSeat)
Определения Transport.c:409
bool CanReachSeatFromDoors(string pSeatSelection, vector pFromPos, float pDistance=1.0)
Определения Transport.c:400
ref set< int > m_UnconsciousCrewMemberIndices
Определения Transport.c:63
proto native void CrewDeath(int posIdx)
Handles death of player in vehicle and awakes its physics if needed.
vector GetRefillPointPosWS()
Определения Transport.c:196
bool IsIgnoredObject(Object o)
Определения Transport.c:439
Определения Building.c:6
proto native Transport GetTransport()
Определения human.c:690
Определения EnEntity.c:165
Определения EnMath3D.c:28
Определения EnMath.c:7
Определения ObjectTyped.c:2
bool includeWater
Include water in the surface detection, will return the water if it is higher than the surface.
Определения SurfaceInfo.c:83
SurfaceDetectionType type
Type of surface to detect.
Определения SurfaceInfo.c:77
RoadSurfaceDetection rsd
See RoadSurfaceDetection, SurfaceTraceType.Roadway only.
Определения SurfaceInfo.c:92
Object ignore
Object to ignore tracing against, SurfaceTraceType.Roadway only.
Определения SurfaceInfo.c:89
vector position
3D position to trace the surface from
Определения SurfaceInfo.c:80
float height
Height position.
Определения SurfaceInfo.c:102
Определения DamageSystem.c:2
override bool IsAreaAtDoorFree(int currentSeat, float maxAllowedObjHeight=0.5, float horizontalExtents=0.5, float playerHeight=1.7)
Определения Car.c:102
Base native class for all motorized wheeled vehicles.
Определения Boat.c:28
void SetData(vector localPos, IEntity other, float impulse)
Определения Transport.c:564
IEntity m_Other
Определения Transport.c:561
vector m_LocalPos
Определения Transport.c:560
float m_Impulse
Определения Transport.c:562
Определения Transport.c:559
Man m_ActionPlayer
Определения Transport.c:575
ref SurfaceDetectionParameters m_SurfaceParams
Определения Transport.c:577
bool m_bIsAction
Определения Transport.c:574
ref SurfaceDetectionResult m_SurfaceResult
Определения Transport.c:578
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native float Length()
Returns length of vector (magnitude)
static float Dot(vector v1, vector v2)
Returns Dot product of vector v1 and vector v2.
Определения EnConvert.c:271
static const vector Zero
Определения EnConvert.c:110
proto float Normalize()
Normalizes vector. Returns length.
static vector Direction(vector p1, vector p2)
Returns direction vector from point p1 to point p2.
Определения EnConvert.c:220
proto void RotationMatrixFromAngles(out vector mat[3])
Creates rotation matrix from angles.
static const vector Up
Определения EnConvert.c:107
Определения EnConvert.c:106
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
ShapeType
Определения EnDebug.c:116
ShapeFlags
Определения EnDebug.c:126
static proto bool GetBool(int id, bool reverse=false)
Get value as bool from the given script id.
class DiagMenu Shape
don't call destructor directly. Use Destroy() instead
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
array< int > TIntArray
Определения EnScript.c:687
static proto vector MatrixToAngles(vector mat[3])
Returns angles of rotation matrix.
static proto void MatrixMultiply4(vector mat0[4], vector mat1[4], out vector res[4])
Transforms matrix.
static proto float Cos(float angle)
Returns cosinus of angle in radians.
static const float DEG2RAD
Определения EnMath.c:17
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)
int ARGB(int a, int r, int g, int b)
Определения proto.c:322