TriggerComponent.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright (C) 2009-present, 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/PhysicsBody.h>
  8. namespace anki {
  9. /// @addtogroup scene
  10. /// @{
  11. /// @memberof TriggerComponent
  12. enum class TriggerComponentShapeType
  13. {
  14. kSphere,
  15. kBox,
  16. kCount
  17. };
  18. /// Trigger component.
  19. class TriggerComponent : public SceneComponent
  20. {
  21. ANKI_SCENE_COMPONENT(TriggerComponent)
  22. public:
  23. TriggerComponent(SceneNode* node);
  24. ~TriggerComponent();
  25. void setType(TriggerComponentShapeType type);
  26. WeakArray<SceneNode*> getSceneNodesEnter()
  27. {
  28. return WeakArray<SceneNode*>(m_bodiesEnter);
  29. }
  30. WeakArray<SceneNode*> getSceneNodesExit()
  31. {
  32. return WeakArray<SceneNode*>(m_bodiesExit);
  33. }
  34. private:
  35. class MyPhysicsTriggerCallbacks;
  36. SceneNode* m_node;
  37. PhysicsCollisionShapePtr m_shape;
  38. PhysicsBodyPtr m_trigger;
  39. SceneDynamicArray<SceneNode*> m_bodiesEnter;
  40. SceneDynamicArray<SceneNode*> m_bodiesExit;
  41. TriggerComponentShapeType m_type = TriggerComponentShapeType::kCount;
  42. Bool m_resetEnter = true;
  43. Bool m_resetExit = true;
  44. static MyPhysicsTriggerCallbacks m_callbacks;
  45. void update(SceneComponentUpdateInfo& info, Bool& updated) override;
  46. };
  47. /// @}
  48. } // end namespace anki