Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

116 lines
3.2 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "mapdata_shared.h"
#include "sharedinterface.h"
#include "baseentity.h"
#include "world.h"
#include "player.h"
class CMapData_Server : public IMapData
{
public:
// World data queries.
void GetMapBounds( Vector &vecMins, Vector &vecMaxs );
void GetMapOrigin( Vector &vecOrigin );
void GetMapSize( Vector &vecSize );
// 3D Skybox data queries.
void Get3DSkyboxOrigin( Vector &vecOrigin );
float Get3DSkyboxScale( void );
};
static CMapData_Server g_MapData;
IMapData *g_pMapData = &g_MapData;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMapData_Server::GetMapBounds( Vector &vecMins, Vector &vecMaxs )
{
CWorld *pWorld = static_cast<CWorld*>( GetWorldEntity() );
if ( pWorld )
{
// Get the world bounds.
pWorld->GetWorldBounds( vecMins, vecMaxs );
// Backward compatability...
if ( ( vecMins.LengthSqr() == 0.0f ) && ( vecMaxs.LengthSqr() == 0.0f ) )
{
vecMins.Init( -6500.0f, -6500.0f, -6500.0f );
vecMaxs.Init( 6500.0f, 6500.0f, 6500.0f );
}
}
else
{
Assert( 0 );
vecMins.Init( 0.0f, 0.0f, 0.0f );
vecMaxs.Init( 1.0f, 1.0f, 1.0f );
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMapData_Server::GetMapOrigin( Vector &vecOrigin )
{
Vector vecMins, vecMaxs;
GetMapBounds( vecMins, vecMaxs );
VectorAdd( vecMins, vecMaxs, vecOrigin );
VectorMultiply( vecOrigin, 0.5f, vecOrigin );
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMapData_Server::GetMapSize( Vector &vecSize )
{
Vector vecMins, vecMaxs;
GetMapBounds( vecMins, vecMaxs );
VectorSubtract( vecMaxs, vecMins, vecSize );
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CMapData_Server::Get3DSkyboxOrigin( Vector &vecOrigin )
{
// NOTE: If the player hasn't been created yet -- this doesn't work!!!
// We need to pass the data along in the map - requires a tool change.
CBasePlayer *pPlayer = UTIL_GetLocalPlayer();
if ( pPlayer )
{
CPlayerLocalData *pLocalData = &pPlayer->m_Local;
VectorCopy( pLocalData->m_skybox3d.origin, vecOrigin );
}
else
{
// Debugging!
Assert( 0 );
vecOrigin.Init();
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
float CMapData_Server::Get3DSkyboxScale( void )
{
// NOTE: If the player hasn't been created yet -- this doesn't work!!!
// We need to pass the data along in the map - requires a tool change.
CBasePlayer *pPlayer = UTIL_GetLocalPlayer();
if ( pPlayer )
{
CPlayerLocalData *pLocalData = &pPlayer->m_Local;
return pLocalData->m_skybox3d.scale;
}
else
{
// Debugging!
Assert( 0 );
return 1.0f;
}
}