physics.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #ifndef __PHYSICS_H
  2. #define __PHYSICS_H
  3. #include "phys math.h"
  4. #include "sgp.h"
  5. #include "worlddef.h"
  6. #include "items.h"
  7. #include "Soldier Control.h"
  8. extern UINT32 guiNumObjectSlots;
  9. typedef struct
  10. {
  11. BOOLEAN fAllocated;
  12. BOOLEAN fAlive;
  13. BOOLEAN fApplyFriction;
  14. BOOLEAN fColliding;
  15. BOOLEAN fZOnRest;
  16. BOOLEAN fVisible;
  17. BOOLEAN fInWater;
  18. BOOLEAN fTestObject;
  19. BOOLEAN fTestEndedWithCollision;
  20. BOOLEAN fTestPositionNotSet;
  21. real TestZTarget;
  22. real OneOverMass;
  23. real AppliedMu;
  24. vector_3 Position;
  25. vector_3 TestTargetPosition;
  26. vector_3 OldPosition;
  27. vector_3 Velocity;
  28. vector_3 OldVelocity;
  29. vector_3 InitialForce;
  30. vector_3 Force;
  31. vector_3 CollisionNormal;
  32. vector_3 CollisionVelocity;
  33. real CollisionElasticity;
  34. INT16 sGridNo;
  35. INT32 iID;
  36. LEVELNODE *pNode;
  37. LEVELNODE *pShadow;
  38. INT16 sConsecutiveCollisions;
  39. INT16 sConsecutiveZeroVelocityCollisions;
  40. INT32 iOldCollisionCode;
  41. FLOAT dLifeLength;
  42. FLOAT dLifeSpan;
  43. OBJECTTYPE Obj;
  44. BOOLEAN fFirstTimeMoved;
  45. INT16 sFirstGridNo;
  46. UINT8 ubOwner;
  47. UINT8 ubActionCode;
  48. UINT32 uiActionData;
  49. BOOLEAN fDropItem;
  50. UINT32 uiNumTilesMoved;
  51. BOOLEAN fCatchGood;
  52. BOOLEAN fAttemptedCatch;
  53. BOOLEAN fCatchAnimOn;
  54. BOOLEAN fCatchCheckDone;
  55. BOOLEAN fEndedWithCollisionPositionSet;
  56. vector_3 EndedWithCollisionPosition;
  57. BOOLEAN fHaveHitGround;
  58. BOOLEAN fPotentialForDebug;
  59. INT16 sLevelNodeGridNo;
  60. INT32 iSoundID;
  61. UINT8 ubLastTargetTakenDamage;
  62. UINT8 ubPadding[1];
  63. } REAL_OBJECT;
  64. #define NUM_OBJECT_SLOTS 50
  65. extern REAL_OBJECT ObjectSlots[ NUM_OBJECT_SLOTS ];
  66. // OBJECT LIST STUFF
  67. INT32 CreatePhysicalObject( OBJECTTYPE *pGameObj, real dLifeLength, real xPos, real yPos, real zPos, real xForce, real yForce, real zForce, UINT8 ubOwner, UINT8 ubActionCode, UINT32 uiActionData );
  68. BOOLEAN RemoveObjectSlot( INT32 iObject );
  69. void RemoveAllPhysicsObjects( );
  70. FLOAT CalculateLaunchItemAngle( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubHeight, real dForce, OBJECTTYPE *pItem, INT16 *psGridNo );
  71. BOOLEAN CalculateLaunchItemChanceToGetThrough( SOLDIERTYPE *pSoldier, OBJECTTYPE *pItem, INT16 sGridNo, UINT8 ubLevel, INT16 sEndZ, INT16 *psFinalGridNo, BOOLEAN fArmed, INT8 *pbLevel, BOOLEAN fFromUI );
  72. void CalculateLaunchItemParamsForThrow( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubLevel, INT16 sZPos, OBJECTTYPE *pItem, INT8 bMissBy, UINT8 ubActionCode, UINT32 uiActionData );
  73. // SIMULATE WORLD
  74. void SimulateWorld( );
  75. BOOLEAN SavePhysicsTableToSaveGameFile( HWFILE hFile );
  76. BOOLEAN LoadPhysicsTableFromSavedGameFile( HWFILE hFile );
  77. #endif