summaryrefslogtreecommitdiff
path: root/game/server/tf2/tf_obj_mapdefined.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/tf2/tf_obj_mapdefined.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/server/tf2/tf_obj_mapdefined.cpp')
-rw-r--r--game/server/tf2/tf_obj_mapdefined.cpp140
1 files changed, 140 insertions, 0 deletions
diff --git a/game/server/tf2/tf_obj_mapdefined.cpp b/game/server/tf2/tf_obj_mapdefined.cpp
new file mode 100644
index 0000000..56b1efa
--- /dev/null
+++ b/game/server/tf2/tf_obj_mapdefined.cpp
@@ -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 );
+} \ No newline at end of file