summaryrefslogblamecommitdiffstats
path: root/game/code/contexts/exitcontext.cpp
blob: 3c8916a8c3a1736cc3035958110aa0536e25184d (plain) (tree)









































































































































































































































































                                                                                            
//=============================================================================
// Copyright (C) 2002 Radical Entertainment Ltd.  All rights reserved.
//
// File:        exitcontext.cpp
//
// Description: Implementation of ExitContext.
//
// History:     + Created -- Darwin Chau
//
//=============================================================================

//========================================
// System Includes
//========================================
#include <p3d/view.hpp>
#include <p3d/shadow.hpp>
#include <raddebug.hpp>

#include <p3d/shadow.hpp>
//========================================
// Project Includes
//========================================
#include <ai/vehicle/vehicleairender.h>
#include <contexts/pausecontext.h>
#include <contexts/exitcontext.h>
#include <memory/leakdetection.h>
#include <memory/srrmemory.h>
#include <worldsim/worldobject.h>
#include <camera/supercammanager.h>
#include <interiors/interiormanager.h>
#include <meta/triggervolumetracker.h>
#include <loading/loadingmanager.h>
#include <mission/gameplaymanager.h>
#include <presentation/gui/guisystem.h>
#include <render/RenderManager/RenderManager.h>
#include <render/DSG/StatePropDSG.h>
#include <sound/soundmanager.h>
#include <worldsim/worldphysicsmanager.h>
#include <worldsim/character/charactermanager.h>
#include <worldsim/character/footprint/footprintmanager.h>
#include <worldsim/avatarmanager.h>
#include <worldsim/traffic/trafficmanager.h>
#include <worldsim/ped/pedestrianmanager.h>
#include <worldsim/coins/coinmanager.h>
#include <worldsim/coins/sparkle.h>
#include <worldsim/hitnrunmanager.h>
#include <worldsim/parkedcars/parkedcarmanager.h>
#include <ai/actionbuttonmanager.h>
#include <render/breakables/breakablesmanager.h>
#include <render/particles/ParticleManager.h>
#include <worldsim/skidmarks/skidmarkgenerator.h>
#include <worldsim/skidmarks/skidmarkmanager.h>
#include <ai/actor/actormanager.h>
#include <gameflow/gameflow.h>
#include <roads/roadmanager.h>
#include <render/Loaders/AnimDynaPhysLoader.h>
#include <pedpaths/pathmanager.h>
#include <data/gamedatamanager.h>
#include <mission/animatedicon.h>
#include <render/animentitydsgmanager/animentitydsgmanager.h>
#include <presentation/presentation.h>
#include <main/game.h>

//******************************************************************************
//
// Global Data, Local Data, Local Classes
//
//******************************************************************************

// Static pointer to instance of singleton.
ExitContext* ExitContext::spInstance = NULL;

//******************************************************************************
//
// Public Member Functions
//
//******************************************************************************

//==============================================================================
// ExitContext::GetInstance
//==============================================================================
//
// Description: - Access point for the ExitContext singleton.  
//              - Creates the ExitContext if needed.
//
// Parameters:	None.
//
// Return:      Pointer to the ExitContext.
//
// Constraints: This is a singleton so only one instance is allowed.
//
//==============================================================================
ExitContext* ExitContext::GetInstance()
{
    if( spInstance == NULL )
    {
        spInstance = new(GMA_PERSISTENT) ExitContext;
        rAssert( spInstance );
    }
    
    return spInstance;
}


//******************************************************************************
//
// Protected Member Functions
//
//******************************************************************************

//==============================================================================
// ExitContext::OnStart
//==============================================================================
//
// Description: 
//
// Parameters:  
//
// Return:      
//
// Note:  Exiting is currently not valid from every context.  This needs more
//        checking and handling of special cases.
//
//==============================================================================
void ExitContext::OnStart( ContextEnum previousContext )
{
    MEMTRACK_PUSH_FLAG( "Exit" );

    if( previousContext == CONTEXT_GAMEPLAY || previousContext == CONTEXT_LOADING_GAMEPLAY )
    {
        // My precious little hack... my preciouss.
        GameFlow::GetInstance()->GetContext( CONTEXT_PAUSE )->Start( CONTEXT_GAMEPLAY );
        GameFlow::GetInstance()->GetContext( CONTEXT_PAUSE )->Stop( CONTEXT_EXIT );
    }

    GetLoadingManager()->CancelPendingRequests();
    p3d::loadManager->CancelAll();

    GetSoundManager()->OnGameplayEnd( false );
}


//==============================================================================
// ExitContext::OnStop
//==============================================================================
//
// Description: 
//
// Parameters:  
//
// Return:      
//
//==============================================================================
void ExitContext::OnStop( ContextEnum nextContext )
{
    MEMTRACK_POP_FLAG( "" );
    GetGame()->Stop();

    rAssertMsg( false, "No happen should." );
}


//==============================================================================
// ExitContext::OnUpdate
//==============================================================================
//
// Description: 
//
// Parameters:  
//
// Return:      
//
//==============================================================================
void ExitContext::OnUpdate( unsigned int elapsedTime )
{
}


//==============================================================================
// ExitContext::OnSuspend
//==============================================================================
//
// Description: 
//
// Parameters:  
//
// Return:      
//
//==============================================================================
void ExitContext::OnSuspend()
{
}


//==============================================================================
// ExitContext::OnResume
//==============================================================================
//
// Description: 
//
// Parameters:  
//
// Return:      
//
//==============================================================================
void ExitContext::OnResume()
{
}


//==============================================================================
// ExitContext::OnHandleEvent
//==============================================================================
//
// Description: 
//
// Parameters:  
//
// Return:      
//
//==============================================================================
void ExitContext::OnHandleEvent( EventEnum id, void* pEventData )
{
}



//******************************************************************************
//
// Private Member Functions
//
//******************************************************************************


//==============================================================================
// ExitContext::ExitContext
//==============================================================================
//
// Description: 
//
// Parameters:  
//
// Return:      
//
//==============================================================================// 
ExitContext::ExitContext()
{
}


//==============================================================================
// ExitContext::~ExitContext
//==============================================================================
//
// Description: 
//
// Parameters:  
//
// Return:      
//
//==============================================================================// 
ExitContext::~ExitContext()
{
    spInstance = NULL;
}