예제 #1
0
 /// \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.");
   }
 }
예제 #2
0
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);
      }
    }    
  }