TriggerComponent.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. // Forward
  10. class BodyComponent;
  11. /// @addtogroup scene
  12. /// @{
  13. /// Trigger component.
  14. class TriggerComponent : public SceneComponent
  15. {
  16. ANKI_SCENE_COMPONENT(TriggerComponent)
  17. public:
  18. TriggerComponent(SceneNode* node);
  19. ~TriggerComponent();
  20. Error update(SceneNode& node, Second prevTime, Second crntTime, Bool& updated) override;
  21. void setSphereVolumeRadius(F32 radius);
  22. Transform getWorldTransform() const
  23. {
  24. return (m_trigger.isCreated()) ? m_trigger->getTransform() : Transform::getIdentity();
  25. }
  26. void setWorldTransform(const Transform& trf)
  27. {
  28. if(m_trigger.isCreated())
  29. {
  30. m_trigger->setTransform(trf);
  31. }
  32. }
  33. WeakArray<BodyComponent*> getBodyComponentsEnter()
  34. {
  35. return WeakArray<BodyComponent*>(m_bodiesEnter);
  36. }
  37. WeakArray<BodyComponent*> getBodyComponentsInside()
  38. {
  39. return WeakArray<BodyComponent*>(m_bodiesInside);
  40. }
  41. WeakArray<BodyComponent*> getBodyComponentsExit()
  42. {
  43. return WeakArray<BodyComponent*>(m_bodiesExit);
  44. }
  45. private:
  46. class MyPhysicsTriggerProcessContactCallback;
  47. SceneNode* m_node;
  48. PhysicsCollisionShapePtr m_shape;
  49. PhysicsTriggerPtr m_trigger;
  50. DynamicArray<BodyComponent*> m_bodiesEnter;
  51. DynamicArray<BodyComponent*> m_bodiesInside;
  52. DynamicArray<BodyComponent*> m_bodiesExit;
  53. MyPhysicsTriggerProcessContactCallback* m_callbacks = nullptr;
  54. };
  55. /// @}
  56. } // end namespace anki