#include "DeerCore/Scripting/Helpers.h" #include "DeerRender/Scripting.h" #include "DeerRender/Scripting/InternalAPI/Resources.h" #include "DeerRender/FrameBuffer.h" #include "DeerRender/Mesh.h" #include "DeerRender/Resource.h" #include "DeerRender/Shader.h" #include "DeerRender/Texture.h" #include "angelscript.h" namespace Deer { namespace Scripting { extern asIScriptEngine* scriptEngine; void registerResources(); void registerResourceStructs(); void registerResourceFunctions(); template void registerResourceBasics(const char* objName) { REGISTER_EXT_OBJECT_METHOD(scriptEngine, objName, "bool isValid() const", static_cast&)>(&resource_isValid)); REGISTER_EXT_OBJECT_METHOD(scriptEngine, objName, "string get_name() const property", static_cast&)>(&resource_getName)); REGISTER_EXT_OBJECT_METHOD(scriptEngine, objName, "string get_path() const property", static_cast&)>(&resource_getPath)); } } // namespace Scripting void Scripting::registerResourceStructs() { AS_CHECK(scriptEngine->RegisterObjectType("GPUMesh", sizeof(Resource), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_ALLINTS | asGetTypeTraits>())); AS_CHECK(scriptEngine->RegisterObjectType("Shader", sizeof(Resource), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_ALLINTS | asGetTypeTraits>())); AS_CHECK(scriptEngine->RegisterObjectType("Texture", sizeof(Resource), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_ALLINTS | asGetTypeTraits>())); AS_CHECK(scriptEngine->RegisterObjectType("FrameBuffer", sizeof(Resource), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_ALLINTS | asGetTypeTraits>())); } int frameBuffer_getWidth(Resource&); int frameBuffer_getHeight(Resource&); void frameBuffer_clearRGBA(int, int, int, int, Resource&); bool frameBuffer_isValid(Resource&); void frameBuffer_resize(int, int, Resource&); Resource createFrameBuffer(const std::string name, int sixeX, int sizeY); void Scripting::registerResourceFunctions() { REGISTER_EXT_OBJECT_METHOD(scriptEngine, "FrameBuffer", "int get_width() const property", frameBuffer_getWidth); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "FrameBuffer", "int get_height() const property", frameBuffer_getHeight); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "FrameBuffer", "bool isValid()", frameBuffer_isValid); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "FrameBuffer", "void resize(int, int)", frameBuffer_resize); REGISTER_EXT_OBJECT_METHOD(scriptEngine, "FrameBuffer", "void clearRGBA(int, int, int, int)", frameBuffer_clearRGBA); scriptEngine->SetDefaultNamespace("Resource"); REGISTER_GLOBAL_FUNC(scriptEngine, "FrameBuffer createFrameBuffer(string&in name, int sizeX, int sizeY)", createFrameBuffer); scriptEngine->SetDefaultNamespace(""); } /* void ScriptSystem::registerResourceFunctions() { scriptEngine->SetDefaultNamespace("Resource"); REGISTER_GLOBAL_FUNC("GPUMesh loadGPUMesh(string&in path)", ResourceManager::loadResource); REGISTER_GLOBAL_FUNC("Shader loadShader(string&in path)", ResourceManager::loadResource); REGISTER_GLOBAL_FUNC("Texture loadTexture(string&in path)", ResourceManager::loadResource); REGISTER_GLOBAL_FUNC("array@ getResourceFolders(string&in path)", StudioAPI::getResourceFolders); REGISTER_GLOBAL_FUNC("array@ getResourceFiles(string&in path)", StudioAPI::getResourceFiles); REGISTER_GLOBAL_FUNC("ResourceType getResourceType(string&in path)", StudioAPI::getResourceType); scriptEngine->SetDefaultNamespace(""); } */ void Scripting::registerResources() { registerResourceStructs(); registerResourceBasics("GPUMesh"); registerResourceBasics("Shader"); registerResourceBasics("Texture"); registerResourceBasics("FrameBuffer"); registerResourceFunctions(); } } // namespace Deer