Program Listing for File Component.hpp

Return to documentation for file (engine/include/Cacao/Component.hpp)

#pragma once

#include "Actor.hpp"
#include "Cacao/ComponentExporter.hpp"
#include "DllHelper.hpp"

#include <memory>

namespace Cacao {
    class CACAO_API Component {
      public:
        bool IsEnabled() const {
            return actor.lock()->IsActive() && enabled;
        }

        void SetEnabled(bool state) {
            enabled = state;
            if(IsEnabled()) {
                OnEnable();
            }
        }

        std::shared_ptr<Actor> GetOwner() const {
            Check<NonexistentValueException>(!actor.expired(), "Cannot get expired Actor from Component!");
            return actor.lock();
        }

        virtual ~Component() {}

      protected:
        Component();

        virtual void OnMount() {};

        virtual void OnEnable() {};

        virtual void OnDisable() {};

        std::weak_ptr<Actor> actor [[maybe_unused]];

        friend class Actor;
        friend class ComponentExporter;

      private:
        bool enabled;
        std::shared_ptr<ComponentExporter> expHnd;
    };
}