mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
#include "cbase.h"
|
||||
#include "tf_player.h"
|
||||
#include "tf_team.h"
|
||||
#include "tf_gamerules.h"
|
||||
#include "tf_obj.h"
|
||||
#include "tf_obj_mapdefined.h"
|
||||
#include "ndebugoverlay.h"
|
||||
|
||||
extern ConVar obj_damage_factor;
|
||||
|
||||
// Map defined object spawnflags
|
||||
#define SF_MAPDEFOBJ_SUPPRESS_MINIMAP 0x0001
|
||||
#define SF_MAPDEFOBJ_SUPPRESS_ATTACKNOTIFY 0x0002
|
||||
#define SF_MAPDEFOBJ_DOESNT_NEED_POWER 0x0004
|
||||
|
||||
BEGIN_DATADESC( CObjectMapDefined )
|
||||
// keys
|
||||
DEFINE_KEYFIELD_NOT_SAVED( m_iszCustomName , FIELD_STRING, "CustomName" ),
|
||||
END_DATADESC()
|
||||
|
||||
IMPLEMENT_SERVERCLASS_ST(CObjectMapDefined, DT_ObjectMapDefined)
|
||||
SendPropString( SENDINFO( m_szCustomName ) ),
|
||||
END_SEND_TABLE();
|
||||
|
||||
LINK_ENTITY_TO_CLASS(obj_mapdefined, CObjectMapDefined);
|
||||
LINK_ENTITY_TO_CLASS(func_obj_mapdefined, CObjectMapDefined);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
CObjectMapDefined::CObjectMapDefined()
|
||||
{
|
||||
UseClientSideAnimation();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CObjectMapDefined::Spawn()
|
||||
{
|
||||
// Get the model from the map
|
||||
char *szModel = (char *)STRING( GetModelName() );
|
||||
if (!szModel || !*szModel)
|
||||
{
|
||||
Warning( "obj_mapdefined at %.0f %.0f %0.f missing modelname\n", GetAbsOrigin().x, GetAbsOrigin().y, GetAbsOrigin().z );
|
||||
UTIL_Remove( this );
|
||||
return;
|
||||
}
|
||||
|
||||
memset( m_szCustomName.GetForModify(), 0, sizeof(m_szCustomName) );
|
||||
if ( m_iszCustomName != NULL_STRING )
|
||||
{
|
||||
Q_strncpy( m_szCustomName.GetForModify(), STRING(m_iszCustomName), sizeof(m_szCustomName) );
|
||||
}
|
||||
|
||||
Precache();
|
||||
|
||||
// Get the bounding box from the model
|
||||
if ( szModel[0] != '*' )
|
||||
{
|
||||
SetModel( szModel );
|
||||
Vector vecMins, vecMaxs;
|
||||
const model_t *pModel = GetModel();
|
||||
modelinfo->GetModelBounds( pModel, vecMins, vecMaxs );
|
||||
UTIL_SetSize(this, vecMins, vecMaxs );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Don't call our internal setmodel to avoid the error
|
||||
UTIL_SetModel( this, szModel );
|
||||
|
||||
// No control panels / power on map geometry objects
|
||||
m_fObjectFlags |= OF_DOESNT_HAVE_A_MODEL;
|
||||
m_fObjectFlags |= OF_DOESNT_NEED_POWER;
|
||||
}
|
||||
|
||||
SetSolid( SOLID_VPHYSICS );
|
||||
SetType( OBJ_MAPDEFINED );
|
||||
|
||||
// Setup object flags
|
||||
if ( HasSpawnFlags( SF_MAPDEFOBJ_SUPPRESS_MINIMAP ) )
|
||||
{
|
||||
m_fObjectFlags |= OF_SUPPRESS_APPEAR_ON_MINIMAP;
|
||||
}
|
||||
if ( HasSpawnFlags( SF_MAPDEFOBJ_SUPPRESS_ATTACKNOTIFY ) )
|
||||
{
|
||||
m_fObjectFlags |= OF_SUPPRESS_NOTIFY_UNDER_ATTACK;
|
||||
}
|
||||
if ( HasSpawnFlags( SF_MAPDEFOBJ_DOESNT_NEED_POWER ) )
|
||||
{
|
||||
m_fObjectFlags |= OF_DOESNT_NEED_POWER;
|
||||
}
|
||||
|
||||
// If I don't have health, make me invulnerable
|
||||
if ( !m_iHealth )
|
||||
{
|
||||
m_bInvulnerable = true;
|
||||
}
|
||||
|
||||
BaseClass::Spawn();
|
||||
|
||||
// Override base object settings
|
||||
SetCollisionGroup( COLLISION_GROUP_NONE );
|
||||
|
||||
FinishedBuilding();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CObjectMapDefined::Precache()
|
||||
{
|
||||
PrecacheModel( STRING( GetModelName() ) );
|
||||
BaseClass::Precache();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
int CObjectMapDefined::OnTakeDamage( const CTakeDamageInfo &info )
|
||||
{
|
||||
CTakeDamageInfo childInfo = info;
|
||||
|
||||
// Hack around the damage factor applied to objects
|
||||
if ( obj_damage_factor.GetFloat() )
|
||||
{
|
||||
float flDamage = info.GetDamage() * (1 / obj_damage_factor.GetFloat());
|
||||
childInfo.SetDamage( flDamage );
|
||||
}
|
||||
|
||||
return BaseClass::OnTakeDamage( childInfo );
|
||||
}
|
||||
Reference in New Issue
Block a user