void Framework3D::ResetRenderer() { XTRACE_FUNCTION; if (m_Renderer->Reset()) { // TODO: RefreshDisplay also resets the renderer--could that be problematic? WB_MAKE_EVENT(RefreshDisplay, NULL); WB_DISPATCH_EVENT(GetEventManager(), RefreshDisplay, this); } else { // Defer the command WB_MAKE_EVENT(ResetRenderer, NULL); WB_QUEUE_EVENT(GetEventManager(), ResetRenderer, this); } }
void WBCompEldMesh::Load(const IDataStream& Stream) { XTRACE_FUNCTION; ASSERT(m_Mesh); const uint Version = Stream.ReadUInt32(); if (Version >= VERSION_MESHNAME) { const SimpleString MeshName = Stream.ReadString(); if (MeshName != m_MeshName) { SetMesh(MeshName); } } if (Version >= VERSION_TEXTURENAME) { const SimpleString TextureName = Stream.ReadString(); if (TextureName != m_TextureName) { SetTexture(TextureName); } } if (Version >= VERSION_MESHSCALE) { Stream.Read(sizeof(Vector), &m_Mesh->m_Scale); } if (Version >= VERSION_HIDDEN) { m_Hidden = Stream.ReadBool(); } if (Version >= VERSION_ANIMATION) { const int AnimationIndex = Stream.ReadInt32(); const float AnimationTime = Stream.ReadFloat(); const int AnimationEndBehavior = Stream.ReadInt32(); const float AnimationPlayRate = (Version >= VERSION_ANIMRATE) ? Stream.ReadFloat() : 1.0f; if (m_Mesh->IsAnimated()) { WB_MAKE_EVENT(SetAnim, GetEntity()); WB_SET_AUTO(SetAnim, Int, AnimationIndex, AnimationIndex); WB_SET_AUTO(SetAnim, Float, AnimationTime, AnimationTime); WB_SET_AUTO(SetAnim, Int, AnimationEndBehavior, AnimationEndBehavior); WB_SET_AUTO(SetAnim, Float, AnimationPlayRate, AnimationPlayRate); WB_QUEUE_EVENT(GetEventManager(), SetAnim, GetEntity()); } } }
/*virtual*/ void WBActionEldSetLight::Execute() { WBAction::Execute(); STATIC_HASHED_STRING( EventOwner ); WBEntity* const pEntity = WBActionStack::Top().GetEntity( sEventOwner ); if( pEntity ) { if( m_AddLight ) { // Queue because if we do this during spawning, the world won't accept a light yet. WB_MAKE_EVENT( AddLight, pEntity ); WB_QUEUE_EVENT( WBWorld::GetInstance()->GetEventManager(), AddLight, pEntity ); } else { WB_MAKE_EVENT( RemoveLight, pEntity ); WB_DISPATCH_EVENT( WBWorld::GetInstance()->GetEventManager(), RemoveLight, pEntity ); } } }
void EldritchGame::GoToLevel() { XTRACE_FUNCTION; PRINTF( "Traveling to level %s\n", m_NextLevelName.CStr() ); const bool IsRestarting = m_IsRestarting; const bool FlushHubOnRestart = m_FlushHubOnRestart; if( IsRestarting ) { if( FlushHubOnRestart ) { // Don't save the current world, and flush everything. GetSaveLoad()->FlushWorldFiles(); } else { // Don't save the current world, but wait to flush until we're done traveling. } } else { // Store a record of the world we're leaving so we can come back to it. GetSaveLoad()->SaveWorld( DecorateWorldFileName( m_CurrentLevelName ) ); } m_GoToLevelOnNextTick = false; m_IsRestarting = false; m_FlushHubOnRestart = false; SetCurrentLevelName( m_NextLevelName ); if( GetSaveLoad()->TryLoadWorld( DecorateWorldFileName( m_NextLevelName ) ) ) { // We're good! } else { EldritchFramework::GetInstance()->GoToLevel( m_NextWorldDef ); } RefreshUIReturnToHubEnabled(); if( IsRestarting && !FlushHubOnRestart ) { // Flush worlds now that we're back in the library. GetSaveLoad()->FlushWorldFiles(); } WBEventManager* const pEventManager = WBWorld::GetInstance()->GetEventManager(); WB_MAKE_EVENT( PostLevelTransition, NULL ); WB_SET_AUTO( PostLevelTransition, Bool, RestoreSpawnPoint, m_RestoreSpawnPoint ); WB_DISPATCH_EVENT( pEventManager, PostLevelTransition, NULL ); // Top off player's health if we're returning to the hub. if( IsInHub() ) { WB_MAKE_EVENT( RestoreHealth, NULL ); WB_LOG_EVENT( RestoreHealth ); WB_DISPATCH_EVENT( pEventManager, RestoreHealth, GetPlayer() ); } // Make a checkpoint save, for crash protection // (Queued because we want to pump the event queue once to initialize the world.) WB_MAKE_EVENT( Checkpoint, NULL ); WB_LOG_EVENT( Checkpoint ); WB_QUEUE_EVENT( pEventManager, Checkpoint, this ); // Clear travel persistence now that we've successfully traveled and don't need it. ClearTravelPersistence(); // And fade up. static const float kFadeInDuration = 0.5f; WB_MAKE_EVENT( FadeIn, NULL ); WB_SET_AUTO( FadeIn, Float, Duration, kFadeInDuration ); WB_DISPATCH_EVENT( pEventManager, FadeIn, NULL ); PRINTF( "Travel finished\n" ); }