Exemple #1
0
BOOL
MRE::FRefreshFileSysInfo() {
	
	OneTimeInit();

	// do a full file sys refresh always
	UpdateFilesAndChangeInfo ( fFalse );

	// update our time stamp in the file info stream
	UpdateFileInfoTimeStamp();

	return fTrue;
	}
// implements IVisCallbackHandler_cl
void vHavokBehaviorModule::OnHandleCallback(IVisCallbackDataObject_cl *pData)
{
	// Setup
	// Register vision callbacks
	if( pData->m_pSender == &Vision::Callbacks.OnUpdateSceneBegin )
	{
		checkEditorModeChanged();
		stepModule();
	}
	else if( pData->m_pSender == &Vision::Callbacks.OnAfterSceneLoaded )
	{
		// Set physics module
		vHavokPhysicsModule* physicsModule = vHavokPhysicsModule::GetInstance();
		if( physicsModule != HK_NULL )
		{
			hkpWorld* physicsWorld = physicsModule->GetPhysicsWorld();

			// Set world gravity
			physicsWorld->markForRead();
			{
				hkVector4 up;
				up.setNeg3( physicsWorld->getGravity() );
				up.normalize3();

				m_behaviorWorld->setUp( up );
			}
			physicsWorld->unmarkForRead();
		}
		else
		{
			hkVector4 up; vHavokConversionUtils::VisVecToPhysVec_noscale( m_visionCharacters[0]->getEntityOwner()->GetObjDir_Up(), up );
			m_behaviorWorld->setUp( up );
		}

	}
	else if( pData->m_pSender == &Vision::Callbacks.OnAfterSceneUnloaded )
	{
/*#if defined(HAVOK_SDK_VERSION_MAJOR) && (HAVOK_SDK_VERSION_MAJOR >= 2012)
		// destroy all unreferenced navmesh instances
		m_projectAssetManager->clearAssets();

		hkbOnHeapAssetLoader* assetLoader = static_cast<hkbOnHeapAssetLoader*>( m_assetLoader );
		assetLoader->unloadAllAssets();

		HK_ASSERT(0x21e79cc1, m_visionCharacters.getSize() == 0 );

		// unload all unused resources
		vHavokBehaviorResourceManager::GetInstance()->PurgeUnusedResources();

		HK_ASSERT(0xc5b3c4e, vHavokBehaviorResourceManager::GetInstance()->GetResourceCount() == 0 );
#endif*/
	}
	else if( pData->m_pSender == &vHavokPhysicsModule::OnBeforeInitializePhysics )
	{
		vHavokPhysicsModuleCallbackData *pHavokData = (vHavokPhysicsModuleCallbackData*)pData;
		VISION_HAVOK_SYNC_STATICS();
		VISION_HAVOK_SYNC_PER_THREAD_STATICS( pHavokData->GetHavokModule() );

		// Register Behavior classes
		{
			hkDefaultClassNameRegistry& dcnReg	= hkDefaultClassNameRegistry::getInstance();
			hkTypeInfoRegistry&			tyReg	= hkTypeInfoRegistry::getInstance();
			hkVtableClassRegistry&		vtcReg	= hkVtableClassRegistry::getInstance();

#ifndef VBASE_LIB  // DLL, so have a full set 
			dcnReg.registerList(hkBuiltinTypeRegistry::StaticLinkedClasses);
			tyReg.registerList(hkBuiltinTypeRegistry::StaticLinkedTypeInfos);
			vtcReg.registerList(hkBuiltinTypeRegistry::StaticLinkedTypeInfos, hkBuiltinTypeRegistry::StaticLinkedClasses);
#else // Static lib, just need to add Behavior ones and reg the Behavior patches which would not have been done yet
			dcnReg.registerList(hkBuiltinBehaviorTypeRegistry::StaticLinkedClasses);
			tyReg.registerList(hkBuiltinBehaviorTypeRegistry::StaticLinkedTypeInfos);
			vtcReg.registerList(hkBuiltinBehaviorTypeRegistry::StaticLinkedTypeInfos, hkBuiltinBehaviorTypeRegistry::StaticLinkedClasses);
#endif
		}

		registerAnimationBehaviorPatches();
		hkVersionPatchManager::getInstance().recomputePatchDependencies();

		OneTimeInit();
	}
	else if( pData->m_pSender == &vHavokPhysicsModule::OnAfterInitializePhysics )
	{
		vHavokPhysicsModuleCallbackData *pHavokData = (vHavokPhysicsModuleCallbackData*)pData;
		vHavokPhysicsModule* physicsModule = pHavokData->GetHavokModule();
		InitWorld( physicsModule );
	}
	else if( pData->m_pSender == &vHavokPhysicsModule::OnBeforeDeInitializePhysics )
	{
		DeInitWorld();
	}
	else if( pData->m_pSender == &vHavokPhysicsModule::OnAfterDeInitializePhysics )
	{
		// Unload everything, the scene gets deleted!
		OneTimeDeInit();
	}
	else if( pData->m_pSender == &vHavokPhysicsModule::OnUnsyncHavokStatics )
	{
		vHavokPhysicsModuleCallbackData *pHavokData = (vHavokPhysicsModuleCallbackData*)pData;
		VISION_HAVOK_UNSYNC_STATICS();
		VISION_HAVOK_UNSYNC_PER_THREAD_STATICS( pHavokData->GetHavokModule() );
	}
	else if( pData->m_pSender == &vHavokPhysicsModule::OnBeforeWorldCreated )
	{
		vHavokBeforeWorldCreateDataObject_cl *pEventData = (vHavokBeforeWorldCreateDataObject_cl *)pData;
		hkJobQueue* jobQueue = pEventData->GetHavokModule()->GetJobQueue();
		if( jobQueue != HK_NULL )
		{
			hkbBehaviorJobQueueUtils::registerWithJobQueue( jobQueue );
		}
	}
	else if( pData->m_pSender == &vHavokVisualDebugger::OnCreatingContexts )
	{
		hkbBehaviorContext::registerAllBehaviorViewers();

		vHavokVisualDebuggerCallbackData_cl *pEventData = (vHavokVisualDebuggerCallbackData_cl *)pData;
		pEventData->m_contexts->pushBack( m_behaviorContext );
	}
	else if( pData->m_pSender == &vHavokVisualDebugger::OnAddingDefaultViewers )
	{
		vHavokVisualDebuggerCallbackData_cl *pEventData = (vHavokVisualDebuggerCallbackData_cl *)pData;
		if( pEventData->m_pVisualDebugger != HK_NULL )
		{
			hkbBehaviorContext::addDefaultViewers( pEventData->m_pVisualDebugger );
		}
	}
#ifdef VLUA_USE_SWIG_BINDING
	else if( pData->m_pSender == &IVScriptManager::OnRegisterScriptFunctions )
	{
		EnsureHavokBehaviorScriptRegistration();
	}
	else if (pData->m_pSender==&IVScriptManager::OnScriptProxyCreation)
	{
		VScriptCreateStackProxyObject * pScriptData = (VScriptCreateStackProxyObject *)pData;

		// process data only if no other callback did that
		if(!pScriptData->m_bProcessed)
		{
			int iRetParams = 0;

			// call appropriate LUA cast function
			if(pScriptData->m_pInstance->IsOfType(V_RUNTIME_CLASS(vHavokBehaviorComponent)))
			{
				iRetParams = LUA_CallStaticFunction( pScriptData->m_pLuaState, "Behavior", "vHavokBehaviorComponent", "Cast", "E>E",  pScriptData->m_pInstance );
			}

			// could we handle the object?
			if(iRetParams>0)
			{
				// the cast failed if the result is a nil value
				if(lua_isnil(pScriptData->m_pLuaState, -1))
					lua_pop(pScriptData->m_pLuaState, iRetParams); //in case of a nil value we drop the params from the lua stack
				else
					pScriptData->m_bProcessed = true; //avoid further processing
			}
		}
	}
#endif

}