mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-20 04:26:03 +08:00
Added original SDK code for Alien Swarm.
This commit is contained in:
167
game/server/foundryhelpers_server.cpp
Normal file
167
game/server/foundryhelpers_server.cpp
Normal file
@ -0,0 +1,167 @@
|
||||
//====== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. =======
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#include "cbase.h"
|
||||
#include "foundryhelpers_server.h"
|
||||
#include "basetempentity.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: This just marshalls certain FoundryHelpers_ calls to the client.
|
||||
//-----------------------------------------------------------------------------
|
||||
class CTEFoundryHelpers : public CBaseTempEntity
|
||||
{
|
||||
public:
|
||||
DECLARE_CLASS( CTEFoundryHelpers, CBaseTempEntity );
|
||||
DECLARE_SERVERCLASS();
|
||||
|
||||
CTEFoundryHelpers( const char *pName ) :
|
||||
CBaseTempEntity( pName )
|
||||
{
|
||||
}
|
||||
|
||||
public:
|
||||
CNetworkVar( int, m_iEntity ); // -1 means turn the effect off for all entities.
|
||||
};
|
||||
|
||||
IMPLEMENT_SERVERCLASS_ST( CTEFoundryHelpers, DT_TEFoundryHelpers )
|
||||
SendPropInt( SENDINFO(m_iEntity), 32, 0 ),
|
||||
END_SEND_TABLE()
|
||||
|
||||
// Singleton to fire TEMuzzleFlash objects
|
||||
static CTEFoundryHelpers g_TEFoundryHelpers( "FoundryHelpers" );
|
||||
|
||||
|
||||
void FoundryHelpers_ClearEntityHighlightEffects()
|
||||
{
|
||||
g_TEFoundryHelpers.m_iEntity = -1;
|
||||
|
||||
CBroadcastRecipientFilter filter;
|
||||
g_TEFoundryHelpers.Create( filter, 0 );
|
||||
}
|
||||
|
||||
void FoundryHelpers_AddEntityHighlightEffect( CBaseEntity *pEnt )
|
||||
{
|
||||
g_TEFoundryHelpers.m_iEntity = pEnt->entindex();
|
||||
|
||||
CBroadcastRecipientFilter filter;
|
||||
g_TEFoundryHelpers.Create( filter, 0 );
|
||||
}
|
||||
|
||||
|
||||
CBasePlayer* CheckInFoundryMode()
|
||||
{
|
||||
if ( !serverfoundry )
|
||||
{
|
||||
Warning( "Not in Foundry mode.\n" );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return UTIL_GetListenServerHost();
|
||||
}
|
||||
|
||||
|
||||
void GetCrosshairOrNamedEntities( const CCommand &args, CUtlVector<CBaseEntity*> &entities )
|
||||
{
|
||||
if ( args.ArgC() < 2 )
|
||||
{
|
||||
CBasePlayer *pPlayer = UTIL_GetCommandClient();
|
||||
trace_t tr;
|
||||
Vector forward;
|
||||
pPlayer->EyeVectors( &forward );
|
||||
UTIL_TraceLine(pPlayer->EyePosition(), pPlayer->EyePosition() + forward * MAX_COORD_RANGE,
|
||||
MASK_SHOT_HULL|CONTENTS_GRATE|CONTENTS_DEBRIS, pPlayer, COLLISION_GROUP_NONE, &tr );
|
||||
|
||||
if ( tr.DidHit() && !tr.DidHitWorld() )
|
||||
{
|
||||
entities.AddToTail( tr.m_pEnt );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CBaseEntity *pEnt = NULL;
|
||||
while ((pEnt = gEntList.FindEntityGeneric( pEnt, args[1] ) ) != NULL)
|
||||
{
|
||||
entities.AddToTail( pEnt );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CON_COMMAND( foundry_update_entity, "Updates the entity's position/angles when in edit mode" )
|
||||
{
|
||||
if ( !CheckInFoundryMode() )
|
||||
return;
|
||||
|
||||
CUtlVector<CBaseEntity*> entities;
|
||||
GetCrosshairOrNamedEntities( args, entities );
|
||||
|
||||
for ( int i=0; i < entities.Count(); i++ )
|
||||
{
|
||||
CBaseEntity *pEnt = entities[i];
|
||||
serverfoundry->MoveEntityTo( pEnt->GetHammerID(), pEnt->GetAbsOrigin(), pEnt->GetAbsAngles() );
|
||||
}
|
||||
}
|
||||
|
||||
CON_COMMAND( foundry_sync_hammer_view, "Move Hammer's 3D view to the same position as the engine's 3D view." )
|
||||
{
|
||||
CBasePlayer *pPlayer = CheckInFoundryMode();
|
||||
if ( !pPlayer )
|
||||
return;
|
||||
|
||||
Vector vPos = pPlayer->EyePosition();
|
||||
QAngle vAngles = pPlayer->pl.v_angle;
|
||||
serverfoundry->MoveHammerViewTo( vPos, vAngles );
|
||||
}
|
||||
|
||||
CON_COMMAND( foundry_engine_get_mouse_control, "Give the engine control of the mouse." )
|
||||
{
|
||||
if ( !CheckInFoundryMode() )
|
||||
return;
|
||||
|
||||
serverfoundry->EngineGetMouseControl();
|
||||
}
|
||||
|
||||
|
||||
CON_COMMAND( foundry_engine_release_mouse_control, "Give the control of the mouse back to Hammer." )
|
||||
{
|
||||
if ( !CheckInFoundryMode() )
|
||||
return;
|
||||
|
||||
serverfoundry->EngineReleaseMouseControl();
|
||||
}
|
||||
|
||||
CON_COMMAND( foundry_select_entity, "Select the entity under the crosshair or select entities with the specified name." )
|
||||
{
|
||||
CUtlVector<CBaseEntity*> entities;
|
||||
GetCrosshairOrNamedEntities( args, entities );
|
||||
|
||||
CUtlVector<int> hammerIDs;
|
||||
for ( int i=0; i < entities.Count(); i++ )
|
||||
{
|
||||
CBaseEntity *pEnt = entities[i];
|
||||
hammerIDs.AddToTail( pEnt->GetHammerID() );
|
||||
}
|
||||
|
||||
if ( hammerIDs.Count() == 0 )
|
||||
{
|
||||
CBasePlayer *pPlayer = CheckInFoundryMode();
|
||||
if ( !pPlayer )
|
||||
return;
|
||||
|
||||
Vector vPos = pPlayer->EyePosition();
|
||||
QAngle vAngles = pPlayer->pl.v_angle;
|
||||
serverfoundry->SelectionClickInCenterOfView( vPos, vAngles );
|
||||
}
|
||||
else
|
||||
{
|
||||
serverfoundry->SelectEntities( hammerIDs.Base(), hammerIDs.Count() );
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user