// #pragma once // #include // #include // Squirrel核心头文件 // #include // Squirrel标准IO库 // #include // 新增:包含 sqstd_seterrorhandlers 等辅助函数 // #include // 新增:包含 sqstd_register_bloblib 函数 // #include // 新增:包含 sqstd_register_systemlib 函数 // #include // 新增:包含 sqstd_register_mathlib 函数 // #include // 新增:包含 sqstd_register_stringlib 函数 // #include "EngineCore/Asset_ImagePack.h" // #include "EngineCore/Game.h" // #include // #include // #include // // 辅助函数:检查SDL错误并抛出Squirrel异常 // static void checkSDLError(HSQUIRRELVM v) // { // const char *err = SDL_GetError(); // if (err && *err) // { // sq_throwerror(v, err); // SDL_ClearError(); // } // } // // SDL_GetTicks 绑定 // static SQInteger sdl_GetTicks(HSQUIRRELVM v) // { // sq_pushinteger(v, SDL_GetTicks()); // return 1; // } // static SQInteger sdl_CreateTexture(HSQUIRRELVM v) // { // const SQChar *imgPath; // SQInteger Index; // sq_getstring(v, 2, &imgPath); // sq_getinteger(v, 3, &Index); // Asset_ImagePack::IMG *Info = Asset_ImagePack::GetInstance().GetIMG(imgPath); // Asset_ImagePack::ImgInfo &Buf = Info->lp_lplist[Index]; // SDL_Texture *m_texture = SDL_CreateTexture( // Game::GetInstance().GetRenderer(), // SDL_PIXELFORMAT_ARGB8888, // 匹配RGBA数据格式 // SDL_TEXTUREACCESS_STREAMING, // Buf.Width, Buf.Height); // int pitch = Buf.Width * 4; // SDL_UpdateTexture(m_texture, NULL, Buf.PNGdata, pitch); // sq_pushuserpointer(v, m_texture); // return 1; // } // static SQInteger sdl_DrawImg(HSQUIRRELVM v) // { // SQUserPointer m_texture; // SQInteger PosX, PosY, Width, Height; // sq_getuserpointer(v, 2, &m_texture); // sq_getinteger(v, 3, &PosX); // sq_getinteger(v, 4, &PosY); // sq_getinteger(v, 5, &Width); // sq_getinteger(v, 6, &Height); // SDL_Rect Rect = {(int)PosX, (int)PosY, (int)Width, (int)Height}; // SDL_RenderCopy(Game::GetInstance().GetRenderer(), (SDL_Texture *)m_texture, NULL, &Rect); // return 0; // } // static SQInteger sdl_DrawImgEx(HSQUIRRELVM v) // { // const SQChar *imgPath; // SQInteger Index, PosX, PosY, BlendMode; // SQFloat Rotate; // sq_getstring(v, 2, &imgPath); // sq_getinteger(v, 3, &Index); // sq_getinteger(v, 4, &PosX); // sq_getinteger(v, 5, &PosY); // sq_getinteger(v, 6, &BlendMode); // sq_getfloat(v, 7, &Rotate); // Asset_ImagePack::IMG *Info = Asset_ImagePack::GetInstance().GetIMG(imgPath); // Asset_ImagePack::ImgInfo &Buf = Info->lp_lplist[Index]; // SDL_Point pivotPoint = { // (int)(0.5 * Buf.Width), // (int)(0.5 * Buf.Height)}; // SDL_Texture *m_texture = SDL_CreateTexture( // Game::GetInstance().GetRenderer(), // SDL_PIXELFORMAT_ARGB8888, // 匹配RGBA数据格式 // SDL_TEXTUREACCESS_STREAMING, // Buf.Width, Buf.Height); // SDL_SetTextureBlendMode(m_texture, (SDL_BlendMode)BlendMode); // int pitch = Buf.Width * 4; // SDL_UpdateTexture(m_texture, NULL, Buf.PNGdata, pitch); // SDL_Rect Rect = {(int)PosX, (int)PosY, Buf.Width, Buf.Height}; // SDL_RenderCopyEx(Game::GetInstance().GetRenderer(), m_texture, NULL, &Rect, Rotate, &pivotPoint, SDL_FLIP_NONE); // SDL_DestroyTexture(m_texture); // return 0; // } // void RegisterSDLFunctions(HSQUIRRELVM v) // { // // 创建SDL命名空间 // sq_pushstring(v, "SDL", -1); // sq_newtable(v); // // 注册SDL函数 // // 获取Ticks函数 // sq_pushstring(v, "GetTicks", -1); // sq_newclosure(v, sdl_GetTicks, 0); // sq_setparamscheck(v, 1, NULL); // sq_rawset(v, -3); // // 创建纹理 // sq_pushstring(v, "CreateTexture", -1); // sq_newclosure(v, sdl_CreateTexture, 0); // // sq_setparamscheck(v, 3, NULL); // sq_rawset(v, -3); // // 渲染一个Img // sq_pushstring(v, "DrawImg", -1); // sq_newclosure(v, sdl_DrawImg, 0); // // sq_setparamscheck(v, 5, NULL); // sq_rawset(v, -3); // // 渲染一个ImgEx // sq_pushstring(v, "DrawImgEx", -1); // sq_newclosure(v, sdl_DrawImgEx, 0); // sq_rawset(v, -3); // // 注册SDL常量 // sq_pushstring(v, "RENDERER_ACCELERATED", -1); // sq_pushinteger(v, SDL_RENDERER_ACCELERATED); // sq_rawset(v, -3); // // 将SDL表添加到全局命名空间 // sq_rawset(v, -3); // }