mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-21 04:56:01 +08:00
72 lines
1.7 KiB
C++
72 lines
1.7 KiB
C++
![]() |
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
|
|||
|
//
|
|||
|
// Purpose:
|
|||
|
//
|
|||
|
// $NoKeywords: $
|
|||
|
//=============================================================================//
|
|||
|
|
|||
|
#include "cbase.h"
|
|||
|
#include "terrainmodmgr.h"
|
|||
|
#include "terrainmodmgr_shared.h"
|
|||
|
#include "gameinterface.h"
|
|||
|
#include "player.h"
|
|||
|
|
|||
|
// memdbgon must be the last include file in a .cpp file!!!
|
|||
|
#include "tier0/memdbgon.h"
|
|||
|
|
|||
|
void TerrainMod_Add( TerrainModType type, const CTerrainModParams ¶ms )
|
|||
|
{
|
|||
|
if ( IsXbox() )
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// Move players out of the way so they don't get stuck on the terrain.
|
|||
|
float playerStartHeights[MAX_PLAYERS];
|
|||
|
|
|||
|
int i;
|
|||
|
int nPlayers = min( MAX_PLAYERS, gpGlobals->maxClients );
|
|||
|
for( i=0; i < nPlayers; i++ )
|
|||
|
{
|
|||
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex( i+1 );
|
|||
|
|
|||
|
if( !pPlayer )
|
|||
|
continue;
|
|||
|
|
|||
|
playerStartHeights[i] = pPlayer->GetAbsOrigin().z;
|
|||
|
|
|||
|
// Cast a ray upwards to see if we can move the player out of the way.
|
|||
|
trace_t trace;
|
|||
|
UTIL_TraceEntity(
|
|||
|
pPlayer, pPlayer->GetAbsOrigin(),
|
|||
|
pPlayer->GetAbsOrigin() + Vector( 0, 0, params.m_flRadius*2 ),
|
|||
|
MASK_SOLID,
|
|||
|
&trace );
|
|||
|
|
|||
|
pPlayer->SetLocalOrigin( trace.endpos );
|
|||
|
}
|
|||
|
|
|||
|
// Apply the mod.
|
|||
|
engine->ApplyTerrainMod( type, params );
|
|||
|
|
|||
|
// Move players back down.
|
|||
|
for( i=0; i < nPlayers; i++ )
|
|||
|
{
|
|||
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex( i+1 );
|
|||
|
|
|||
|
if( !pPlayer )
|
|||
|
continue;
|
|||
|
|
|||
|
// Cast a ray upwards to see if we can move the player out of the way.
|
|||
|
trace_t trace;
|
|||
|
UTIL_TraceEntity(
|
|||
|
pPlayer,
|
|||
|
pPlayer->GetAbsOrigin(),
|
|||
|
Vector( pPlayer->GetAbsOrigin().x, pPlayer->GetAbsOrigin().y, playerStartHeights[i] ),
|
|||
|
MASK_SOLID,
|
|||
|
&trace );
|
|||
|
|
|||
|
pPlayer->SetLocalOrigin( trace.endpos );
|
|||
|
}
|
|||
|
}
|