34 const plRTTI* m_pMessageType =
nullptr;
35 plUInt32 m_uiMessageTypeNameHash = 0;
59 void RegisterMessageHandlersForComponentType(
const char* szComponent,
const plUuid& componentType);
61 PL_ALWAYS_INLINE plDuktapeContext& GetDukTapeContext() {
return m_Duk; }
62 PL_ALWAYS_INLINE duk_context* GetDukContext() {
return m_Duk.GetContext(); }
69 plDuktapeContext m_Duk;
70 bool m_bInitialized =
false;
85 static void GenerateComponentsFile(
const char* szFile);
86 static void InjectComponentImportExport(
plStringBuilder& content,
const char* szComponentFile);
87 static void InjectMessageImportExport(
plStringBuilder& content,
const char* szComponentFile);
89 static void InjectEnumImportExport(
plStringBuilder& content,
const char* szEnumFile);
90 static void InjectFlagsImportExport(
plStringBuilder& content,
const char* szEnumFile);
109 static const FunctionBinding* FindFunctionBinding(plUInt32 uiFunctionHash);
113 static void SetupRttiFunctionBindings();
114 static const char* TsType(
const plRTTI* pRtti);
115 static int __CPP_Binding_RegisterMessageHandler(duk_context* pDuk);
132 static void SyncPlObjectToTsObject(duk_context* pDuk,
const plRTTI* pRtti,
const void* pObject, plInt32 iObjIdx);
133 static void SyncTsObjectPlTsObject(duk_context* pDuk,
const plRTTI* pRtti,
void* pObject, plInt32 iObjIdx);
137 static void SetupRttiPropertyBindings();
147 static void DukPutMessage(duk_context* pDuk,
const plMessage& msg);
154 static void GenerateMessagesFile(
const char* szFile);
159 plInt32 m_iMsgDeliveryRecursion = 0;
160 plUuid m_CurrentTsMsgHandlerRegistrator;
168 static int DukSearchModule(duk_context* pDuk);
193 static plWorld* RetrieveWorld(duk_context* pDuk);
196 plWorld* GetWorld() {
return m_pWorld; }
199 void StoreWorld(
plWorld* pWorld);
208 static plGameObjectHandle RetrieveGameObjectHandle(duk_context* pDuk, plInt32 iObjIdx = 0 );
209 static plGameObject* ExpectGameObject(duk_context* pDuk, plInt32 iObjIdx = 0 );
217 void DukPutComponentObject(
plComponent* pComponent);
218 static plComponentHandle RetrieveComponentHandle(duk_context* pDuk, plInt32 iObjIdx = 0 );
220 template <
typename ComponentType>
221 static ComponentType* ExpectComponent(duk_context* pDuk, plInt32 iObjIdx = 0 );
227 static void PushVec2(duk_context* pDuk,
const plVec2& value);
228 static void SetVec2(duk_context* pDuk, plInt32 iObjIdx,
const plVec2& value);
229 static void SetVec2Property(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plVec2& value);
231 static plVec2 GetVec2Property(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plVec2& vFallback =
plVec2::MakeZero());
233 static void PushVec3(duk_context* pDuk,
const plVec3& value);
234 static void SetVec3(duk_context* pDuk, plInt32 iObjIdx,
const plVec3& value);
235 static void SetVec3Property(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plVec3& value);
237 static plVec3 GetVec3Property(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plVec3& vFallback =
plVec3::MakeZero());
239 static void PushMat3(duk_context* pDuk,
const plMat3& value);
240 static void SetMat3(duk_context* pDuk, plInt32 iObjIdx,
const plMat3& value);
241 static void SetMat3Property(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plMat3& value);
245 static void PushMat4(duk_context* pDuk,
const plMat4& value);
246 static void SetMat4(duk_context* pDuk, plInt32 iObjIdx,
const plMat4& value);
247 static void SetMat4Property(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plMat4& value);
251 static void PushQuat(duk_context* pDuk,
const plQuat& value);
252 static void SetQuat(duk_context* pDuk, plInt32 iObjIdx,
const plQuat& value);
253 static void SetQuatProperty(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plQuat& value);
257 static void PushColor(duk_context* pDuk,
const plColor& value);
258 static void SetColor(duk_context* pDuk, plInt32 iObjIdx,
const plColor& value);
259 static void SetColorProperty(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plColor& value);
261 static plColor GetColorProperty(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plColor& fallback =
plColor::White);
263 static void PushTransform(duk_context* pDuk,
const plTransform& value);
264 static void SetTransform(duk_context* pDuk, plInt32 iObjIdx,
const plTransform& value);
265 static void SetTransformProperty(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plTransform& value);
269 static void PushVariant(duk_context* pDuk,
const plVariant& value);
270 static void SetVariantProperty(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plVariant& value);
271 static plVariant GetVariant(duk_context* pDuk, plInt32 iObjIdx,
const plRTTI* pType);
272 static plVariant GetVariantProperty(duk_context* pDuk,
const char* szPropertyName, plInt32 iObjIdx,
const plRTTI* pType);
284 plUInt32 m_uiFuncStashIdx = 0;
298 void ExecuteConsoleFuncs();
300 struct ConsoleFuncCall
316 void CleanupStash(plUInt32 uiNumIterations);
318 plUInt32 AcquireStashObjIndex();
319 void ReleaseStashObjIndex(plUInt32 uiIdx);
322 static void StoreReferenceInStash(duk_context* pDuk, plUInt32 uiStashIdx);
323 static bool DukPushStashObject(duk_context* pDuk, plUInt32 uiStashIdx);
325 static constexpr plUInt32 c_uiMaxMsgStash = 512;
326 static constexpr plUInt32 c_uiFirstStashMsgIdx = 512;
327 static constexpr plUInt32 c_uiLastStashMsgIdx = c_uiFirstStashMsgIdx + c_uiFirstStashMsgIdx;
328 static constexpr plUInt32 c_uiFirstStashObjIdx = c_uiLastStashMsgIdx;
329 plUInt32 m_uiNextStashMsgIdx = c_uiFirstStashMsgIdx;
330 plUInt32 m_uiNextStashObjIdx = c_uiFirstStashObjIdx;