// Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors. // All rights reserved. // Code licensed under the BSD License. // http://www.anki3d.org/LICENSE #pragma once #include #include namespace anki { // Forward class BodyComponent; /// @addtogroup scene /// @{ /// Trigger component. class TriggerComponent : public SceneComponent { ANKI_SCENE_COMPONENT(TriggerComponent) public: TriggerComponent(SceneNode* node); ~TriggerComponent(); Error update(SceneNode& node, Second prevTime, Second crntTime, Bool& updated) override; void setSphereVolumeRadius(F32 radius); Transform getWorldTransform() const { return (m_trigger.isCreated()) ? m_trigger->getTransform() : Transform::getIdentity(); } void setWorldTransform(const Transform& trf) { if(m_trigger.isCreated()) { m_trigger->setTransform(trf); } } WeakArray getBodyComponentsEnter() { return WeakArray(m_bodiesEnter); } WeakArray getBodyComponentsInside() { return WeakArray(m_bodiesInside); } WeakArray getBodyComponentsExit() { return WeakArray(m_bodiesExit); } private: class MyPhysicsTriggerProcessContactCallback; SceneNode* m_node; PhysicsCollisionShapePtr m_shape; PhysicsTriggerPtr m_trigger; DynamicArray m_bodiesEnter; DynamicArray m_bodiesInside; DynamicArray m_bodiesExit; MyPhysicsTriggerProcessContactCallback* m_callbacks = nullptr; }; /// @} } // end namespace anki