source-engine-2018-hl2_src/app/legion/worldmanager.cpp

166 lines
4.8 KiB
C++
Raw Permalink Normal View History

2020-04-23 00:56:21 +08:00
//========= 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 );
}