Polyphase Game Engine
Loading...
Searching...
No Matches
Script.h
Go to the documentation of this file.
1#pragma once
2
3#include "Nodes/Node.h"
4#include "ScriptFunc.h"
5#include "NetFunc.h"
6#include "Object.h"
7
8#include "NetworkManager.h"
9
10#include <set>
11#include <unordered_map>
12
13struct AnimEvent;
14struct Node_Lua;
15
17{
18 std::string mVarName;
19 std::string mDisplayName;
22 bool mIsArray = false;
23 std::vector<Datum> mArrayValues;
24};
25
26typedef std::unordered_map<std::string, ScriptNetFunc> ScriptNetFuncMap;
27
28class Script : public Object
29{
30public:
31
33
34 Script(Node* owner);
35 virtual ~Script();
36
37 Node* GetOwner();
38
39 virtual void Tick(float deltaTime);
40
41 void AppendScriptProperties(std::vector<Property>& outProps);
42
43 void SetFile(const char* filename);
44 const std::string& GetFile() const;
45 const std::string& GetScriptClassName() const;
46
47 void StartScript();
48 void RestartScript();
49 void StopScript();
50
51 bool IsActive() const;
52
53 void SetWorld(World* world);
54
55 bool ReloadScriptFile(const std::string& fileName, bool restartScript = true);
56
57 std::vector<ScriptNetDatum>& GetReplicatedData();
58
59 bool InvokeNetFunc(const char* name, uint32_t numParams, const Datum** params);
60 ScriptNetFunc* FindNetFunc(const char* funcName);
61 ScriptNetFunc* FindNetFunc(uint16_t index);
62 void ExecuteNetFunc(uint16_t index, uint32_t numParams, const Datum** params);
63
64 void BeginOverlap(Primitive3D* thisNode, Primitive3D* otherNode);
65 void EndOverlap(Primitive3D* thisNode, Primitive3D* otherNode);
66 void OnCollision(
67 Primitive3D* thisNode,
68 Primitive3D* otherNode,
69 glm::vec3 impactPoint,
70 glm::vec3 impactNormal,
71 btPersistentManifold* manifold);
72
73 void OnSerialMessage(uint32_t serialHandle, const std::string& data);
74
75 bool HasFunction(const char* name) const;
76
77 void CallFunction(const char* name);
78 void CallFunction(const char* name, const Datum& param0);
79 void CallFunction(const char* name, const Datum& param0, const Datum& param1);
80 void CallFunction(const char* name, const Datum& param0, const Datum& param1, const Datum& param2);
81 void CallFunction(const char* name, const Datum& param0, const Datum& param1, const Datum& param2, const Datum& param3);
82 void CallFunction(const char* name, const Datum& param0, const Datum& param1, const Datum& param2, const Datum& param3, const Datum& param4);
83 void CallFunction(const char* name, const Datum& param0, const Datum& param1, const Datum& param2, const Datum& param3, const Datum& param4, const Datum& param5);
84 void CallFunction(const char* name, const Datum& param0, const Datum& param1, const Datum& param2, const Datum& param3, const Datum& param4, const Datum& param5, const Datum& param6);
85 void CallFunction(const char* name, const Datum& param0, const Datum& param1, const Datum& param2, const Datum& param3, const Datum& param4, const Datum& param5, const Datum& param6, const Datum& param7);
86 Datum CallFunctionR(const char* name);
87 Datum CallFunctionR(const char* name, const Datum& param0);
88 Datum CallFunctionR(const char* name, const Datum& param0, const Datum& param1);
89 Datum CallFunctionR(const char* name, const Datum& param0, const Datum& param1, const Datum& param2);
90 Datum CallFunctionR(const char* name, const Datum& param0, const Datum& param1, const Datum& param2, const Datum& param3);
91 Datum CallFunctionR(const char* name, const Datum& param0, const Datum& param1, const Datum& param2, const Datum& param3, const Datum& param4);
92 Datum CallFunctionR(const char* name, const Datum& param0, const Datum& param1, const Datum& param2, const Datum& param3, const Datum& param4, const Datum& param5);
93 Datum CallFunctionR(const char* name, const Datum& param0, const Datum& param1, const Datum& param2, const Datum& param3, const Datum& param4, const Datum& param5, const Datum& param6);
94 Datum CallFunctionR(const char* name, const Datum& param0, const Datum& param1, const Datum& param2, const Datum& param3, const Datum& param4, const Datum& param5, const Datum& param6, const Datum& param7);
95 void CallFunction(const char* name, uint32_t numParams, const Datum** params, Datum* ret);
96 Datum CallFunction(const char* name, const std::vector<Datum>& params);
97
98 bool LuaFuncCall(int numArgs, int numResults = 0);
99
100 Datum GetField(const char* key);
101 void SetField(const char* key, const Datum& value);
102
103 void GatherFunctionNames(std::vector<std::string>& outNames) const;
104
105 void SetArrayScriptPropCount(const std::string& name, uint32_t count);
107 const std::vector<Property>& GetScriptProperties() const;
108 std::vector<Property>& GetScriptProperties();
109 void SetScriptProperties(const std::vector<Property>& srcProps);
110
111 // Auto property support
112 void AddAutoProperty(const std::string& varName, const std::string& displayName, DatumType type, const Datum& defaultValue);
113 void AddAutoPropertyArray(const std::string& varName, const std::string& displayName, DatumType type, const std::vector<Datum>& arrayValues);
114 void ClearAutoProperties();
116
117 static bool OnRepHandler(Datum* datum, uint32_t index, const void* newValue);
118
119protected:
120
121 static bool HandleScriptPropChange(Datum* datum, uint32_t index, const void* newValue);
122 static bool HandleForeignScriptPropChange(Datum* datum, uint32_t index, const void* newValue);
123
126
129 void RegisterNetFuncs();
130 void GatherNetFuncs(std::vector<ScriptNetFunc>& outFuncs);
132
133 bool DownloadDatum(lua_State* L, Datum& datum, int udIdx, const char* varName);
134 void UploadDatum(Datum& datum, const char* varName);
135
136 void CallTick(float deltaTime);
137
138 bool CheckIfFunctionExists(const char* funcName);
139
140 static std::unordered_map<std::string, ScriptNetFuncMap> sScriptNetFuncMap;
141
142 Node* mOwner = nullptr;
143 std::string mFileName;
144 std::string mClassName;
145 std::vector<Property> mScriptProps;
146 std::vector<ScriptNetDatum> mReplicatedData;
147 std::vector<AutoProperty> mAutoProperties;
148 bool mActive = false;
149 bool mTickEnabled = false;
151 bool mHandleEndOverlap = false;
152 bool mHandleOnCollision = false;
154};
155
DatumType
Definition Datum.h:28
std::unordered_map< std::string, ScriptNetFunc > ScriptNetFuncMap
Definition Script.h:26
Definition Datum.h:164
Definition Node.h:67
Definition Object.h:13
Definition Primitive3d.h:46
Definition Script.h:29
void SetScriptProperties(const std::vector< Property > &srcProps)
Definition Script.cpp:535
const std::vector< Property > & GetScriptProperties() const
Definition Script.cpp:525
Datum GetField(const char *key)
Definition Script.cpp:1966
void OnSerialMessage(uint32_t serialHandle, const std::string &data)
Definition Script.cpp:1655
bool mHandleOnSerialMessage
Definition Script.h:153
void GatherReplicatedData()
Definition Script.cpp:753
void EndOverlap(Primitive3D *thisNode, Primitive3D *otherNode)
Definition Script.cpp:1722
bool InvokeNetFunc(const char *name, uint32_t numParams, const Datum **params)
Definition Script.cpp:1615
bool mTickEnabled
Definition Script.h:149
void ClearAutoProperties()
Definition Script.cpp:563
void RestartScript()
Definition Script.cpp:1560
static bool OnRepHandler(Datum *datum, uint32_t index, const void *newValue)
Definition Script.cpp:1988
std::string mClassName
Definition Script.h:144
bool DownloadDatum(lua_State *L, Datum &datum, int udIdx, const char *varName)
Definition Script.cpp:1251
Node * GetOwner()
Definition Script.cpp:115
void AddAutoProperty(const std::string &varName, const std::string &displayName, DatumType type, const Datum &defaultValue)
Definition Script.cpp:540
void DownloadReplicatedData()
Definition Script.cpp:1135
void SetField(const char *key, const Datum &value)
Definition Script.cpp:1979
std::vector< ScriptNetDatum > mReplicatedData
Definition Script.h:146
std::vector< AutoProperty > mAutoProperties
Definition Script.h:147
bool mHandleBeginOverlap
Definition Script.h:150
bool mHandleEndOverlap
Definition Script.h:151
void ExecuteNetFunc(uint16_t index, uint32_t numParams, const Datum **params)
Definition Script.cpp:1204
std::vector< Property > mScriptProps
Definition Script.h:145
const std::string & GetFile() const
Definition Script.cpp:1542
void AddAutoPropertyArray(const std::string &varName, const std::string &displayName, DatumType type, const std::vector< Datum > &arrayValues)
Definition Script.cpp:551
void DestroyScriptInstance()
Definition Script.cpp:2171
void AppendScriptProperties(std::vector< Property > &outProps)
Definition Script.cpp:130
void GatherNetFuncs(std::vector< ScriptNetFunc > &outFuncs)
Definition Script.cpp:1050
void CallFunction(const char *name)
Definition Script.cpp:1822
bool IsActive() const
Definition Script.cpp:1571
Datum CallFunction(const char *name, const std::vector< Datum > &params)
std::vector< ScriptNetDatum > & GetReplicatedData()
Definition Script.cpp:1610
void SetArrayScriptPropCount(const std::string &name, uint32_t count)
Definition Script.cpp:152
void UploadDatum(Datum &datum, const char *varName)
Definition Script.cpp:1409
virtual ~Script()
Definition Script.cpp:110
static std::unordered_map< std::string, ScriptNetFuncMap > sScriptNetFuncMap
Definition Script.h:140
virtual void Tick(float deltaTime)
Definition Script.cpp:120
bool mHandleOnCollision
Definition Script.h:152
bool LuaFuncCall(int numArgs, int numResults=0)
Definition Script.cpp:2224
void GatherFunctionNames(std::vector< std::string > &outNames) const
Definition Script.cpp:2316
bool HasFunction(const char *name) const
Definition Script.cpp:1796
static bool HandleScriptPropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Script.cpp:27
void SetFile(const char *filename)
Definition Script.cpp:1537
bool ReloadScriptFile(const std::string &fileName, bool restartScript=true)
Definition Script.cpp:1590
std::string mFileName
Definition Script.h:143
void StartScript()
Definition Script.cpp:1552
void OnCollision(Primitive3D *thisNode, Primitive3D *otherNode, glm::vec3 impactPoint, glm::vec3 impactNormal, btPersistentManifold *manifold)
Definition Script.cpp:1758
ScriptNetFunc * FindNetFunc(const char *funcName)
Definition Script.cpp:1158
void StopScript()
Definition Script.cpp:1566
void RegisterNetFuncs()
Definition Script.cpp:1029
static bool HandleForeignScriptPropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Script.cpp:44
void GatherScriptProperties()
Definition Script.cpp:166
void UploadScriptProperties()
Definition Script.cpp:142
void SetWorld(World *world)
Definition Script.cpp:1576
bool mActive
Definition Script.h:148
Datum CallFunctionR(const char *name)
Definition Script.cpp:1875
void CreateScriptInstance()
Definition Script.cpp:2042
void CallTick(float deltaTime)
Definition Script.cpp:2231
Node * mOwner
Definition Script.h:142
const std::string & GetScriptClassName() const
Definition Script.cpp:1547
void GatherAutoProperties()
Definition Script.cpp:568
bool CheckIfFunctionExists(const char *funcName)
Definition Script.cpp:2290
void BeginOverlap(Primitive3D *thisNode, Primitive3D *otherNode)
Definition Script.cpp:1685
DECLARE_OBJECT(Script, Object)
Definition World.h:24
Definition SkeletalMesh.h:60
Definition Script.h:17
DatumType mType
Definition Script.h:20
std::vector< Datum > mArrayValues
Definition Script.h:23
bool mIsArray
Definition Script.h:22
std::string mVarName
Definition Script.h:18
Datum mDefaultValue
Definition Script.h:21
std::string mDisplayName
Definition Script.h:19
Definition NetFunc.h:33