TriggerComponent.h 1.3 KB

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