#pragma once #include "BsScriptEnginePrerequisites.h" #include "CmModule.h" #include namespace BansheeEngine { class BS_SCR_BE_EXPORT ScriptResourceManager : public CM::Module { public: ScriptResourceManager(); /** * @note Throws an exception if resource for the handle already exists. * Creates a new managed instance of the object. */ ScriptTexture2D* createScriptTexture(const CM::HTexture& resourceHandle); /** * @note Throws an exception if resource for the handle already exists. * Initializes the ScriptResource with an existing managed instance. */ ScriptTexture2D* createScriptTexture(MonoObject* existingInstance, const CM::HTexture& resourceHandle); /** * @note Throws an exception if resource for the handle already exists. * Creates a new managed instance of the object. */ ScriptSpriteTexture* createScriptSpriteTexture(const HSpriteTexture& resourceHandle); /** * @note Throws an exception if resource for the handle already exists. * Initializes the ScriptResource with an existing managed instance. */ ScriptSpriteTexture* createScriptSpriteTexture(MonoObject* existingInstance, const HSpriteTexture& resourceHandle); /** * @note Returns nullptr if script resource doesn't exist. */ ScriptTexture2D* getScriptTexture(const CM::HTexture& resourceHandle); /** * @note Returns nullptr if script resource doesn't exist. */ ScriptSpriteTexture* getScriptSpriteTexture(const HSpriteTexture& resourceHandle); /** * @note Returns nullptr if script resource doesn't exist. */ ScriptResource* getScriptResource(const CM::HResource& resourceHandle); void destroyScriptResource(ScriptResource* resource); private: CM::UnorderedMap::type mScriptResources; MonoClass* mTextureClass; MonoClass* mSpriteTextureClass; void throwExceptionIfInvalidOrDuplicate(const CM::String& uuid) const; }; }