/*virtual*/ void WBActionEldGoToLevel::Execute() { WBAction::Execute(); EldritchGame* const pGame = EldritchFramework::GetInstance()->GetGame(); ASSERT( pGame ); WBEventManager* const pEventManager = WBWorld::GetInstance()->GetEventManager(); ASSERT( pEventManager ); if( m_GoToNextLevel ) { WB_MAKE_EVENT( GoToNextLevel, NULL ); WB_LOG_EVENT( GoToNextLevel ); WB_DISPATCH_EVENT( pEventManager, GoToNextLevel, pGame ); } else if( m_GoToPrevLevel ) { WB_MAKE_EVENT( GoToPrevLevel, NULL ); WB_LOG_EVENT( GoToPrevLevel ); WB_DISPATCH_EVENT( pEventManager, GoToPrevLevel, pGame ); } else if( m_ReturnToHub ) { WB_MAKE_EVENT( ReturnToHub, NULL ); WB_LOG_EVENT( ReturnToHub ); WB_SET_AUTO( ReturnToHub, Bool, Restart, m_Restart || m_FullRestart ); WB_SET_AUTO( ReturnToHub, Bool, FlushHub, m_FullRestart ); WB_DISPATCH_EVENT( pEventManager, ReturnToHub, pGame ); } else { WB_MAKE_EVENT( GoToLevel, NULL ); WB_LOG_EVENT( GoToLevel ); WB_SET_AUTO( GoToLevel, Hash, Level, m_Level ); WB_SET_AUTO( GoToLevel, Hash, WorldDef, m_WorldDef ); WB_DISPATCH_EVENT( pEventManager, GoToLevel, pGame ); } if( m_Immediate ) { WB_MAKE_EVENT( GoToLevelImmediate, NULL ); WB_LOG_EVENT( GoToLevelImmediate ); WB_DISPATCH_EVENT( pEventManager, GoToLevelImmediate, pGame ); } }
void WBCompEldLock::Unlock() { m_Locked = false; EldritchPersistence* const pPersistence = GetGame()->GetPersistence(); ASSERT( pPersistence ); pPersistence->AddOpenLock( m_Key ); WB_MAKE_EVENT( OnUnlocked, GetEntity() ); WB_LOG_EVENT( OnUnlocked ); WB_DISPATCH_EVENT( GetEventManager(), OnUnlocked, GetEntity() ); }
/*virtual*/ void WBActionEldTweetRIP::Execute() { WBAction::Execute(); EldritchGame* const pGame = EldritchFramework::GetInstance()->GetGame(); ASSERT(pGame); WBEventManager* const pEventManager = WBWorld::GetInstance()->GetEventManager(); ASSERT(pEventManager); WB_MAKE_EVENT(TweetRIP, NULL); WB_LOG_EVENT(TweetRIP); WB_DISPATCH_EVENT(pEventManager, TweetRIP, pGame); }
/*virtual*/ void WBActionEldBankTransaction::Execute() { WBAction::Execute(); EldritchGame* const pGame = EldritchFramework::GetInstance()->GetGame(); ASSERT( pGame ); EldritchBank* const pBank = pGame->GetBank(); ASSERT( pBank ); WBEventManager* const pEventManager = WBWorld::GetInstance()->GetEventManager(); ASSERT( pEventManager ); WB_MAKE_EVENT( BankTransaction, NULL ); WB_LOG_EVENT( BankTransaction ); WB_SET_AUTO( BankTransaction, Int, Amount, m_Amount ); WB_DISPATCH_EVENT( pEventManager, BankTransaction, pBank ); }
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" ); }