#pragma once #include "BsMonoPrerequisites.h" #include "BsScriptMeta.h" #include "CmModule.h" #include namespace BansheeEngine { /** * @brief Loads Mono script assemblies and manages script objects. */ class BS_MONO_EXPORT MonoManager : public CM::Module { public: MonoManager(); ~MonoManager(); MonoAssembly& loadAssembly(const CM::String& path, const CM::String& name, const CM::String& entryPoint = CM::StringUtil::BLANK); void unloadAssembly(MonoAssembly& assembly); MonoDomain* getDomain() const { return mDomain; } static void registerScriptType(ScriptMeta* metaData); private: static const CM::String MONO_LIB_DIR; static const CM::String MONO_ETC_DIR; static CM::UnorderedMap::type>::type& getTypesToInitialize() { static CM::UnorderedMap::type>::type mTypesToInitialize; return mTypesToInitialize; } CM::UnorderedMap::type mAssemblies; MonoDomain* mDomain; }; }