コード例 #1
0
/*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 );
	}
}
コード例 #2
0
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() );
}
コード例 #3
0
/*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);
}
コード例 #4
0
/*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 );
}
コード例 #5
0
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" );
}