You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
4.8 KiB
166 lines
4.8 KiB
//========= 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 ); |
|
} |