mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2024-12-23 01:59:43 +08:00
72 lines
1.7 KiB
C++
72 lines
1.7 KiB
C++
//========= Copyright © 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 );
|
|
}
|
|
}
|