166 lines
4.8 KiB
C++
166 lines
4.8 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose: Contains all world state--the main game database
|
|
//
|
|
// $Revision: $
|
|
// $NoKeywords: $
|
|
//===========================================================================//
|
|
|
|
#include "worldmanager.h"
|
|
#include "legion.h"
|
|
#include "heightfield.h"
|
|
#include "rendermanager.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Singleton accessor
|
|
//-----------------------------------------------------------------------------
|
|
static CWorldManager s_WorldManager;
|
|
extern CWorldManager *g_pWorldManager = &s_WorldManager;
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ConVars
|
|
//-----------------------------------------------------------------------------
|
|
static ConVar cam_forwardspeed( "cam_forwardspeed", "100", FCVAR_CHEAT, "Sets the camera forward speed" );
|
|
static ConVar cam_backwardspeed( "cam_backwardspeed", "100", FCVAR_CHEAT, "Sets the camera backward speed" );
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Constructor, destructor
|
|
//-----------------------------------------------------------------------------
|
|
CWorldManager::CWorldManager()
|
|
{
|
|
m_pHeightField = NULL;
|
|
}
|
|
|
|
CWorldManager::~CWorldManager()
|
|
{
|
|
Assert( m_pHeightField == NULL );
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Level init, shutdown
|
|
//-----------------------------------------------------------------------------
|
|
LevelRetVal_t CWorldManager::LevelInit( bool bFirstCall )
|
|
{
|
|
if ( !bFirstCall )
|
|
return FINISHED;
|
|
|
|
Assert( !m_pHeightField );
|
|
m_pHeightField = new CHeightField( 6, 6, 4 );
|
|
if ( !m_pHeightField->LoadHeightFromFile( "maps/testheight.psd" ) )
|
|
return FAILED;
|
|
|
|
CreateEntities();
|
|
SetInitialLocalPlayerPosition();
|
|
return FINISHED;
|
|
}
|
|
|
|
LevelRetVal_t CWorldManager::LevelShutdown( bool bFirstCall )
|
|
{
|
|
if ( !bFirstCall )
|
|
return FINISHED;
|
|
|
|
DestroyEntities();
|
|
|
|
if ( m_pHeightField )
|
|
{
|
|
delete m_pHeightField;
|
|
m_pHeightField = NULL;
|
|
}
|
|
return FINISHED;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Create/ destroy entities
|
|
//-----------------------------------------------------------------------------
|
|
void CWorldManager::CreateEntities()
|
|
{
|
|
m_PlayerEntity.m_pCameraProperty = g_pRenderManager->CreateCameraProperty();
|
|
}
|
|
|
|
void CWorldManager::DestroyEntities()
|
|
{
|
|
g_pRenderManager->DestroyCameraProperty( m_PlayerEntity.m_pCameraProperty );
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Gets the camera to world matrix
|
|
//-----------------------------------------------------------------------------
|
|
CPlayerEntity* CWorldManager::GetLocalPlayer()
|
|
{
|
|
return &m_PlayerEntity;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Sets the initial camera position
|
|
//-----------------------------------------------------------------------------
|
|
void CWorldManager::SetInitialLocalPlayerPosition()
|
|
{
|
|
float flDistance = 1024.0;
|
|
Vector vecCameraDirection( 1.0f, 1.0f, -0.5f );
|
|
VectorNormalize( vecCameraDirection );
|
|
|
|
VectorMA( Vector( 512, 512, 0 ), -flDistance, vecCameraDirection, m_PlayerEntity.m_pCameraProperty->m_Origin );
|
|
|
|
QAngle angles;
|
|
VectorAngles( vecCameraDirection, m_PlayerEntity.m_pCameraProperty->m_Angles );
|
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Draws the UI
|
|
//-----------------------------------------------------------------------------
|
|
void CWorldManager::DrawWorld()
|
|
{
|
|
m_pHeightField->Draw( );
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Commands
|
|
//-----------------------------------------------------------------------------
|
|
void CWorldManager::ForwardStart( const CCommand &args )
|
|
{
|
|
CCameraProperty *pCamera = m_PlayerEntity.m_pCameraProperty;
|
|
|
|
Vector vecForward;
|
|
pCamera->GetForward( &vecForward );
|
|
|
|
VectorMA( pCamera->m_Velocity, cam_forwardspeed.GetFloat(), vecForward, pCamera->m_Velocity );
|
|
}
|
|
|
|
void CWorldManager::ForwardStop( const CCommand &args )
|
|
{
|
|
CCameraProperty *pCamera = m_PlayerEntity.m_pCameraProperty;
|
|
|
|
Vector vecForward;
|
|
pCamera->GetForward( &vecForward );
|
|
|
|
VectorMA( pCamera->m_Velocity, -cam_forwardspeed.GetFloat(), vecForward, pCamera->m_Velocity );
|
|
}
|
|
|
|
void CWorldManager::BackwardStart( const CCommand &args )
|
|
{
|
|
CCameraProperty *pCamera = m_PlayerEntity.m_pCameraProperty;
|
|
|
|
Vector vecForward;
|
|
pCamera->GetForward( &vecForward );
|
|
|
|
VectorMA( pCamera->m_Velocity, -cam_backwardspeed.GetFloat(), vecForward, pCamera->m_Velocity );
|
|
}
|
|
|
|
void CWorldManager::BackwardStop( const CCommand &args )
|
|
{
|
|
CCameraProperty *pCamera = m_PlayerEntity.m_pCameraProperty;
|
|
|
|
Vector vecForward;
|
|
pCamera->GetForward( &vecForward );
|
|
|
|
VectorMA( pCamera->m_Velocity, cam_backwardspeed.GetFloat(), vecForward, pCamera->m_Velocity );
|
|
} |