Files
simian/include/scripting/ScriptEngine.h
T
nick 35589b9620
CI / build-and-test (push) Successful in 2m12s
feat: adding some drawing and image functions
2025-11-17 22:20:21 +13:00

46 lines
1.6 KiB
C++

#pragma once
#include "angelscript.h"
#include "scriptbuilder.h"
#include <string>
#include <vector>
class ScriptEngine {
public:
ScriptEngine();
~ScriptEngine();
bool Initialize();
void Shutdown();
bool CompileScript(const std::string& filename);
void CallScriptFunction(asIScriptFunction* func, float dt = 0.0f);
void GarbageCollect();
// Add a path used to resolve #include directives in scripts
void AddIncludePath(const std::string& path);
// Try to preserve script state across hot-reloads by calling optional
// __SerializeState()/__DeserializeState() hooks in the script module.
std::string CaptureScriptState();
void RestoreScriptState(const std::string &state);
asIScriptEngine* GetEngine() const { return engine; }
asIScriptFunction* GetUpdateFunction() const { return updateFunc; }
asIScriptFunction* GetDrawFunction() const { return drawFunc; }
asIScriptFunction* GetInitFunction() const { return initFunc; }
asIScriptFunction* GetShutdownFunction() const { return shutdownFunc; }
private:
asIScriptEngine* engine;
asIScriptFunction* updateFunc;
asIScriptFunction* drawFunc;
asIScriptFunction* initFunc;
asIScriptFunction* shutdownFunc;
asIScriptModule* currentModule;
bool hasValidScript;
std::vector<std::string> includePaths;
static void MessageCallback(const asSMessageInfo* msg, void* param);
static int IncludeCallback(const char* include, const char* from, CScriptBuilder* builder, void* userParam);
std::string ReadFile(const std::string& filename);
void ClearCachedFunctions();
};