TriggerComponent.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Scene/Components/SceneComponent.h>
  7. #include <AnKi/Physics/PhysicsTrigger.h>
  8. namespace anki
  9. {
  10. // Forward
  11. class BodyComponent;
  12. /// @addtogroup scene
  13. /// @{
  14. /// Trigger component.
  15. class TriggerComponent : public SceneComponent
  16. {
  17. ANKI_SCENE_COMPONENT(TriggerComponent)
  18. public:
  19. TriggerComponent(SceneNode* node);
  20. ~TriggerComponent();
  21. Error update(SceneNode& node, Second prevTime, Second crntTime, Bool& updated) override;
  22. void setSphereVolumeRadius(F32 radius);
  23. Transform getWorldTransform() const
  24. {
  25. return (m_trigger.isCreated()) ? m_trigger->getTransform() : Transform::getIdentity();
  26. }
  27. void setWorldTransform(const Transform& trf)
  28. {
  29. if(m_trigger.isCreated())
  30. {
  31. m_trigger->setTransform(trf);
  32. }
  33. }
  34. WeakArray<BodyComponent*> getBodyComponentsEnter()
  35. {
  36. return WeakArray<BodyComponent*>(m_bodiesEnter);
  37. }
  38. WeakArray<BodyComponent*> getBodyComponentsInside()
  39. {
  40. return WeakArray<BodyComponent*>(m_bodiesInside);
  41. }
  42. WeakArray<BodyComponent*> getBodyComponentsExit()
  43. {
  44. return WeakArray<BodyComponent*>(m_bodiesExit);
  45. }
  46. private:
  47. class MyPhysicsTriggerProcessContactCallback;
  48. SceneNode* m_node;
  49. PhysicsCollisionShapePtr m_shape;
  50. PhysicsTriggerPtr m_trigger;
  51. DynamicArray<BodyComponent*> m_bodiesEnter;
  52. DynamicArray<BodyComponent*> m_bodiesInside;
  53. DynamicArray<BodyComponent*> m_bodiesExit;
  54. MyPhysicsTriggerProcessContactCallback* m_callbacks = nullptr;
  55. };
  56. /// @}
  57. } // end namespace anki