/// \brief Constructor. Allocates entry in TLS. VThreadBuffer() { if ( !TAllocate() ) { VASSERT_ALWAYS_MSG(FALSE, "Failed to allocate slot for thread-local value. This may result in unpredictable behavior."); } }
VAppBase::VAppBase() : VisionApp_cl() , m_pAppImpl(NULL) , m_pResourceRestorer(NULL) , m_eAppState(VAppHelper::AS_RUNNING) { VISION_INTER_LINKING_CHECK; VASSERT_ALWAYS_MSG(s_instance == NULL, "There must only be one VAppBase instance!"); s_instance = this; Vision::Callbacks.OnBeforeSceneLoaded += this; Vision::Callbacks.OnEngineInit += this; Vision::Callbacks.OnEngineDeInit += this; }
//Handle the callback virtual void OnHandleCallback(IVisCallbackDataObject_cl *pData) { IVisAppPtr spApp = Vision::GetApplication(); if (pData->m_pSender == &Vision::Callbacks.OnEngineInit) { // Register physics module VSmartPtr<vHavokPhysicsModule> spPhysMod = new vHavokPhysicsModule(); // spPhysMod->SetPhysicsTickCount(50); // since we are throwing objects, we need a high simulation framerate bool bSuceeded = spApp->SetPhysicsModule(spPhysMod); VASSERT_ALWAYS_MSG(bSuceeded, "Couldn't register Havok Physics plugin."); return; } if(pData->m_pSender==&IVScriptManager::OnRegisterScriptFunctions) { EnsureHavokScriptRegistration(); return; } if (pData->m_pSender==&IVScriptManager::OnScriptProxyCreation) { VScriptCreateStackProxyObject * pScriptData = (VScriptCreateStackProxyObject *)pData; //process data only as far as not handled until now if(!pScriptData->m_bProcessed) { int iRetParams = 0; if(pScriptData->m_pInstance->IsOfType(V_RUNTIME_CLASS(vHavokCharacterController))) { //call lua cast function for vHavokCharacterController which will push the result on the stack top iRetParams = LUA_CallStaticFunction(pScriptData->m_pLuaState, "Physics", "vHavokCharacterController", "Cast", "C>C", pScriptData->m_pInstance); } else if(pScriptData->m_pInstance->IsOfType(V_RUNTIME_CLASS(vHavokRigidBody))) { //call lua cast function for vHavokRigidBody which will push the result on the stack top iRetParams = LUA_CallStaticFunction(pScriptData->m_pLuaState, "Physics", "vHavokRigidBody", "Cast", "C>C", pScriptData->m_pInstance); } else if (pScriptData->m_pInstance->IsOfType(V_RUNTIME_CLASS(vHavokRagdoll))) { //call lua cast function for vHavokRagdoll which will push the result on the stack top iRetParams = LUA_CallStaticFunction(pScriptData->m_pLuaState, "Physics", "vHavokRagdoll", "Cast", "C>C", pScriptData->m_pInstance); } if(iRetParams>0) { if(lua_isnil(pScriptData->m_pLuaState, -1)) lua_pop(pScriptData->m_pLuaState, iRetParams); else pScriptData->m_bProcessed = true; } } return; } else { if (pData->m_pSender == &Vision::Callbacks.OnEngineDeInit) { spApp->SetPhysicsModule(NULL); } } }