PhysicsWorld.pkg 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. $#include "PhysicsWorld.h"
  2. struct PhysicsRaycastResult
  3. {
  4. PhysicsRaycastResult();
  5. ~PhysicsRaycastResult();
  6. Vector3 position_ @ position;
  7. Vector3 normal_ @ normal;
  8. float distance_ @ distance;
  9. RigidBody* body_ @ body;
  10. };
  11. class PhysicsWorld : public Component
  12. {
  13. void Update(float timeStep);
  14. void UpdateCollisions();
  15. void SetFps(int fps);
  16. void SetGravity(Vector3 gravity);
  17. void SetNumIterations(int num);
  18. void SetInterpolation(bool enable);
  19. void SetInternalEdge(bool enable);
  20. void SetSplitImpulse(bool enable);
  21. void SetMaxNetworkAngularVelocity(float velocity);
  22. // void Raycast(const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  23. tolua_outside const PODVector<PhysicsRaycastResult>& PhysicsWorldRaycast @ Raycast(const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  24. // void RaycastSingle(PhysicsRaycastResult& result, const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  25. tolua_outside PhysicsRaycastResult PhysicsWorldRaycastSingle @ RaycastSingle(const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  26. // void SphereCast(PhysicsRaycastResult& result, const Ray& ray, float radius, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  27. tolua_outside PhysicsRaycastResult PhysicsWorldSphereCast @ SphereCast(const Ray& ray, float radius, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED);
  28. // void ConvexCast(PhysicsRaycastResult& result, CollisionShape* shape, const Vector3& startPos, const Quaternion& startRot, const Vector3& endPos, const Quaternion& endRot, unsigned collisionMask = M_MAX_UNSIGNED);
  29. tolua_outside PhysicsRaycastResult PhysicsWorldConvexCast @ ConvexCast(CollisionShape* shape, const Vector3& startPos, const Quaternion& startRot, const Vector3& endPos, const Quaternion& endRot, unsigned collisionMask = M_MAX_UNSIGNED);
  30. // void GetRigidBodies(PODVector<RigidBody*>& result, const Sphere& sphere, unsigned collisionMask = M_MAX_UNSIGNED);
  31. tolua_outside const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesSphere @ GetRigidBodies(const Sphere& sphere, unsigned collisionMask = M_MAX_UNSIGNED);
  32. // void GetRigidBodies(PODVector<RigidBody*>& result, const BoundingBox& box, unsigned collisionMask = M_MAX_UNSIGNED);
  33. tolua_outside const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesBox @ GetRigidBodies(const BoundingBox& box, unsigned collisionMask = M_MAX_UNSIGNED);
  34. // void GetRigidBodies(PODVector<RigidBody*>& result, const RigidBody* body);
  35. tolua_outside const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesBody @ GetRigidBodies(const RigidBody* body);
  36. void DrawDebugGeometry(bool depthTest);
  37. void RemoveCachedGeometry(Model* model);
  38. Vector3 GetGravity() const;
  39. int GetNumIterations() const;
  40. bool GetInterpolation() const;
  41. bool GetInternalEdge() const;
  42. bool GetSplitImpulse() const;
  43. int GetFps() const;
  44. float GetMaxNetworkAngularVelocity() const;
  45. tolua_property__get_set Vector3 gravity;
  46. tolua_property__get_set int numIterations;
  47. tolua_property__get_set bool interpolation;
  48. tolua_property__get_set bool internalEdge;
  49. tolua_property__get_set bool splitImpulse;
  50. tolua_property__get_set int fps;
  51. tolua_property__get_set float maxNetworkAngularVelocity;
  52. tolua_property__is_set bool applyingTransforms;
  53. };
  54. ${
  55. static const PODVector<PhysicsRaycastResult>& PhysicsWorldRaycast(PhysicsWorld* physicsWorld, const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED)
  56. {
  57. static PODVector<PhysicsRaycastResult> result;
  58. result.Clear();
  59. physicsWorld->Raycast(result, ray, maxDistance, collisionMask);
  60. return result;
  61. }
  62. static PhysicsRaycastResult PhysicsWorldRaycastSingle(PhysicsWorld* physicsWorld, const Ray& ray, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED)
  63. {
  64. PhysicsRaycastResult result;
  65. physicsWorld->RaycastSingle(result, ray, maxDistance, collisionMask);
  66. return result;
  67. }
  68. PhysicsRaycastResult PhysicsWorldSphereCast(PhysicsWorld* physicsWorld, const Ray& ray, float radius, float maxDistance, unsigned collisionMask = M_MAX_UNSIGNED)
  69. {
  70. PhysicsRaycastResult result;
  71. physicsWorld->SphereCast(result, ray, radius, maxDistance, collisionMask);
  72. return result;
  73. }
  74. PhysicsRaycastResult PhysicsWorldConvexCast(PhysicsWorld* physicsWorld, CollisionShape* shape, const Vector3& startPos, const Quaternion& startRot, const Vector3& endPos, const Quaternion& endRot, unsigned collisionMask = M_MAX_UNSIGNED)
  75. {
  76. PhysicsRaycastResult result;
  77. physicsWorld->ConvexCast(result, shape, startPos, startRot, endPos, endRot, collisionMask);
  78. return result;
  79. }
  80. static const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesSphere(PhysicsWorld* physicsWorld, const Sphere& sphere, unsigned collisionMask = M_MAX_UNSIGNED)
  81. {
  82. static PODVector<RigidBody*> result;
  83. result.Clear();
  84. physicsWorld->GetRigidBodies(result, sphere, collisionMask);
  85. return result;
  86. }
  87. static const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesBox(PhysicsWorld* physicsWorld, const BoundingBox& box, unsigned collisionMask = M_MAX_UNSIGNED)
  88. {
  89. static PODVector<RigidBody*> result;
  90. result.Clear();
  91. physicsWorld->GetRigidBodies(result, box, collisionMask);
  92. return result;
  93. }
  94. static const PODVector<RigidBody*>& PhysicsWorldGetRigidBodiesBody(PhysicsWorld* physicsWorld, const RigidBody* body)
  95. {
  96. static PODVector<RigidBody*> result;
  97. result.Clear();
  98. physicsWorld->GetRigidBodies(result, body);
  99. return result;
  100. }
  101. $}