mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
//========= 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 );
|
||||
}
|
||||
Reference in New Issue
Block a user