#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 #include #include "Tool/Tool_Network.h" #ifdef __SWITCH__ #else #include "sqdbg.h" #endif #ifdef SQUNICODE #define scvprintf vfwprintf #else #define scvprintf vfprintf #endif class SquirrelEx { public: SquirrelEx(const SquirrelEx &) = delete; SquirrelEx &operator=(const SquirrelEx &) = delete; SquirrelEx(SquirrelEx &&) = delete; SquirrelEx &operator=(SquirrelEx &&) = delete; // 全局访问点 static SquirrelEx &GetInstance() { static SquirrelEx instance; // 局部静态变量,保证只初始化一次 return instance; } // 打印控制台 static void printfunc(HSQUIRRELVM v, const SQChar *s, ...); // 错误打印控制台 static void errorfunc(HSQUIRRELVM v, const SQChar *s, ...); // 从字符串编译Sqr脚本 bool Compilebuffer(std::string Path, std::string Code); public: // 初始化 void Init(); // 请求网络脚本 void RequestNetScript(std::string Ip, std::string Port); // 加载本地脚本 void LoadLocalScript(); // 运行 void Run(); void Update(float Dt); // 清理 void Clean(); // 获取SquirrelVM HSQUIRRELVM GetSquirrelVM(); private: SquirrelEx(/* args */); ~SquirrelEx(); HSQUIRRELVM v = nullptr; #ifdef __SWITCH__ #else // 虚拟机调试对象 HSQDEBUGSERVER dbg; #endif //工作目录 std::string WorkPath; //热重载 bool HotReload = false; std::map _scriptmap; };