#pragma once #include "CCallbackHandler.h" #include "CScriptObject.h" #include "CBufferWrapper.h" #include "sol/sol.hpp" #define LINK_ENTITY_COMPONENT_TO_CLASS(_class, name) std::string _class::GetType() const { return #name; }; CFactoryInitter<_class, CEntityComponent> __entity_component_initter_ ## name = CFactoryInitter<_class, CEntityComponent>(#name, std::function*)>([](CFactoryInitter<_class, CEntityComponent>* tter) -> void { tter->m_factory = &CEngine::GetInstance()->EntityComponentsFactory; })); #define DEFINE_ENTITY_COMPONENT() std::string GetType() const override class CEntity; class CEntityComponent : public CScriptObject { public: CEntityComponent(); virtual ~CEntityComponent(); void OverridePersistent(CEntity* ent); void Init(); void Update(); void DevalidateInit(); //TODO THAT'S A HACK virtual void V_Init(); virtual void V_Update(); virtual std::string GetType() const; virtual void FullPack(CBufferWrapper& packet); virtual void FullUnpack(CBufferWrapper& packet); bool V_BaseScriptInit(std::shared_ptr state, sol::table table) override; CEntity* GetEntity(); CCallbackHandler OnInit; //ret:nothing this_component CCallbackHandler OnUpdate; //ret:nothing this_component CCallbackHandler OnDestruct; //ret:nothing this_component DEFINE_SOL_USERTYPE(); bool NetSync = true; //TODO on change events private: CEntity* m_Entity = nullptr; bool m_Initted = false; };