ScriptPhysics.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #pragma once
  2. #include <Atomic/Core/Variant.h>
  3. #include <Atomic/Physics/RigidBody.h>
  4. #include <Atomic/Scene/Node.h>
  5. namespace Atomic
  6. {
  7. class Node;
  8. class PhysicsContact : public RefCounted
  9. {
  10. friend class PhysicsNodeCollision;
  11. ATOMIC_REFCOUNTED(PhysicsNodeContact)
  12. public:
  13. PhysicsContact() {};
  14. const Vector3& GetPosition() const { return position_; }
  15. const Vector3& GetNormal() const { return normal_; }
  16. float GetDistance() const { return distance_; }
  17. float GetImpulse() const { return impulse_; }
  18. private:
  19. PhysicsContact(const Vector3& position, const Vector3& normal, float distance, float impulse) :
  20. position_(position),
  21. normal_(normal),
  22. distance_(distance),
  23. impulse_(impulse)
  24. {
  25. }
  26. Vector3 position_;
  27. Vector3 normal_;
  28. float distance_;
  29. float impulse_;
  30. };
  31. class PhysicsNodeCollision : public RefCounted
  32. {
  33. ATOMIC_REFCOUNTED(PhysicsNodeCollision)
  34. public:
  35. PhysicsNodeCollision() : trigger_(false)
  36. {
  37. }
  38. RigidBody* GetBody() const { return body_; }
  39. Node* GetOtherNode() const { return otherNode_; }
  40. RigidBody* GetOtherBody() const { return otherBody_; }
  41. bool GetTrigger() const { return trigger_; }
  42. const Vector<SharedPtr<PhysicsContact>>& GetContacts() const { return contacts_; }
  43. void SetFromNodeCollisionEvent(VariantMap& eventData);
  44. private:
  45. SharedPtr<RigidBody> body_;
  46. SharedPtr<Node> otherNode_;
  47. SharedPtr<RigidBody> otherBody_;
  48. bool trigger_;
  49. Vector<SharedPtr<PhysicsContact>> contacts_;
  50. };
  51. }