Polyphase Game Engine
Loading...
Searching...
No Matches
ScriptUtils.h
Go to the documentation of this file.
1#pragma once
2
3#include "ScriptMacros.h"
4#include <functional>
5#include <unordered_map>
6#include <unordered_set>
7
8class Script;
9
11{
12public:
13
14 static bool IsScriptLoaded(const std::string& className);
15 static bool ReloadScriptFile(const std::string& fileName);
16 static bool CallLuaFunc(int numArgs, int numResults = 0);
17 static bool LoadScriptFile(const std::string& fileName, const std::string& className);
18 // Optional progress callback. Called once per file with (fileName, done,
19 // total). Return false to abort the loop after the current file. Default
20 // nullptr keeps non-editor callers unchanged.
21 using ReloadProgressFn = std::function<bool(const std::string&, int, int)>;
22 static void ReloadAllScriptFiles(const ReloadProgressFn& onProgress = nullptr);
23 static void LoadAllScripts();
24 static void LoadScriptDirectory(const std::string& dirName, bool recurse = true);
25 // Wipe the loaded-script registry. The Lua globals themselves are left in
26 // place (re-running a class chunk overwrites its table), but subsequent
27 // Script attaches will re-read the .lua from disk instead of seeing the
28 // IsScriptLoaded fast-path and reusing the stale prototype. Called on
29 // project switch so addon Lua edits made between sessions take effect.
30 static void ClearLoadedScripts();
31
32 static std::string GetClassNameFromFileName(const std::string& fileName);
33 static void SetEmbeddedScripts(EmbeddedFile* embeddedScripts, uint32_t numEmbeddedScripts);
34 static EmbeddedFile* FindEmbeddedScript(const std::string& className);
35 static bool RunScript(const char* fileName, Datum* ret = nullptr);
36
37 static uint32_t GetNextScriptInstanceNumber();
38
39 static void CallMethod(Node* node, const char* funcName, uint32_t numParams, const Datum** params, Datum* ret);
40 static void SetBreakOnScriptError(bool enableBreak);
41
42 static void GarbageCollect();
43
44 static Datum GetField(Node* node, const char* key);
45 static void SetField(Node* node, const char* key, const Datum& value);
46 static Datum GetField(Node* node, int32_t key);
47 static void SetField(Node* node, int32_t key, const Datum& value);
48
49 static Datum GetField(const char* table, const char* key);
50 static void SetField(const char* table, const char* key, const Datum& value);
51 static Datum GetField(const char* table, int32_t key);
52 static void SetField(const char* table, int32_t key, const Datum& value);
53
54 static void DumpStack();
55
56private:
57
58 // className -> last fileName used to load it. The fileName is preserved so
59 // ReloadAllScriptFiles can re-route addon paths (e.g. "Packages/Foo/Bar")
60 // through RunScript's Packages/ branch on the next pass; a className-only
61 // entry like "Bar" would fall through to the legacy Scripts/ probe and
62 // silently fail to reload.
63 static std::unordered_map<std::string, std::string> sLoadedLuaFiles;
64 static std::unordered_set<std::string> sLoadingLuaFiles;
65 static EmbeddedFile* sEmbeddedScripts;
66 static uint32_t sNumEmbeddedScripts;
67 static uint32_t sNumScriptInstances;
68
69 static bool sBreakOnScriptError;
70};
Definition Datum.h:169
Definition Node.h:67
Definition ScriptUtils.h:11
static void CallMethod(Node *node, const char *funcName, uint32_t numParams, const Datum **params, Datum *ret)
Definition ScriptUtils.cpp:554
static bool RunScript(const char *fileName, Datum *ret=nullptr)
Definition ScriptUtils.cpp:417
static void ReloadAllScriptFiles(const ReloadProgressFn &onProgress=nullptr)
Definition ScriptUtils.cpp:215
static void LoadScriptDirectory(const std::string &dirName, bool recurse=true)
Definition ScriptUtils.cpp:296
static void GarbageCollect()
Definition ScriptUtils.cpp:596
static void LoadAllScripts()
Definition ScriptUtils.cpp:291
static void SetEmbeddedScripts(EmbeddedFile *embeddedScripts, uint32_t numEmbeddedScripts)
Definition ScriptUtils.cpp:395
static bool ReloadScriptFile(const std::string &fileName)
Definition ScriptUtils.cpp:37
static std::string GetClassNameFromFileName(const std::string &fileName)
Definition ScriptUtils.cpp:358
static void ClearLoadedScripts()
Definition ScriptUtils.cpp:286
static void DumpStack()
Definition ScriptUtils.cpp:761
static bool LoadScriptFile(const std::string &fileName, const std::string &className)
Definition ScriptUtils.cpp:84
static uint32_t GetNextScriptInstanceNumber()
Definition ScriptUtils.cpp:547
static bool IsScriptLoaded(const std::string &className)
Definition ScriptUtils.cpp:32
static void SetBreakOnScriptError(bool enableBreak)
Definition ScriptUtils.cpp:591
std::function< bool(const std::string &, int, int)> ReloadProgressFn
Definition ScriptUtils.h:21
static bool CallLuaFunc(int numArgs, int numResults=0)
Definition ScriptUtils.cpp:52
static void SetField(Node *node, const char *key, const Datum &value)
Definition ScriptUtils.cpp:631
static EmbeddedFile * FindEmbeddedScript(const std::string &className)
Definition ScriptUtils.cpp:401
static Datum GetField(Node *node, const char *key)
Definition ScriptUtils.cpp:610
Definition Script.h:29
Definition EmbeddedFile.h:6