summaryrefslogtreecommitdiff
path: root/app/legion/worldmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'app/legion/worldmanager.cpp')
-rw-r--r--app/legion/worldmanager.cpp166
1 files changed, 166 insertions, 0 deletions
diff --git a/app/legion/worldmanager.cpp b/app/legion/worldmanager.cpp
new file mode 100644
index 0000000..abd5d96
--- /dev/null
+++ b/app/legion/worldmanager.cpp
@@ -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 );
+} \ No newline at end of file