Extra2D/Easy2D/include/easy2d/script/script_engine.h

41 lines
1.0 KiB
C
Raw Normal View History

#pragma once
#include <easy2d/core/types.h>
#include <string>
#include <squirrel.h>
namespace easy2d {
class ScriptEngine {
public:
static ScriptEngine& getInstance();
ScriptEngine(const ScriptEngine&) = delete;
ScriptEngine& operator=(const ScriptEngine&) = delete;
bool initialize();
void shutdown();
bool executeString(const std::string& code);
bool executeFile(const std::string& filepath);
HSQUIRRELVM getVM() const { return vm_; }
bool isInitialized() const { return vm_ != nullptr; }
private:
ScriptEngine() = default;
~ScriptEngine();
bool compileAndRun(const std::string& source, const std::string& sourceName);
static void printFunc(HSQUIRRELVM vm, const SQChar* fmt, ...);
static void errorFunc(HSQUIRRELVM vm, const SQChar* fmt, ...);
static SQInteger errorHandler(HSQUIRRELVM vm);
static void compilerError(HSQUIRRELVM vm, const SQChar* desc,
const SQChar* source, SQInteger line, SQInteger column);
HSQUIRRELVM vm_ = nullptr;
};
} // namespace easy2d