//========= 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 ); }