summaryrefslogtreecommitdiff
path: root/game/server/tf2/info_resourceprocessor.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/info_resourceprocessor.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/server/tf2/info_resourceprocessor.cpp')
-rw-r--r--game/server/tf2/info_resourceprocessor.cpp139
1 files changed, 139 insertions, 0 deletions
diff --git a/game/server/tf2/info_resourceprocessor.cpp b/game/server/tf2/info_resourceprocessor.cpp
new file mode 100644
index 0000000..940202b
--- /dev/null
+++ b/game/server/tf2/info_resourceprocessor.cpp
@@ -0,0 +1,139 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: A team's resource processor back at their base
+//
+// $NoKeywords: $
+//=============================================================================//
+#include "cbase.h"
+#include "tf_team.h"
+#include "info_resourceprocessor.h"
+#include "tf_player.h"
+#include "npc_minicarrier.h"
+#include "tf_gamerules.h"
+
+BEGIN_DATADESC( CResourceProcessor )
+
+ // functions
+ DEFINE_FUNCTION( ProcessorTouch ),
+
+END_DATADESC()
+
+IMPLEMENT_SERVERCLASS_ST(CResourceProcessor, DT_ResourceProcessor)
+END_SEND_TABLE()
+
+LINK_ENTITY_TO_CLASS( info_resourceprocessor, CResourceProcessor);
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CResourceProcessor::Spawn( void )
+{
+ Precache();
+
+ SetSolid( SOLID_SLIDEBOX );
+ SetMoveType( MOVETYPE_NONE );
+ AddFlag( FL_NOTARGET );
+
+ UTIL_SetSize( pev, Vector(-32,-32,0), Vector(32,32, 128) );
+ SetModel( "models/objects/obj_resourceprocessor.mdl" );
+ SetTouch( ProcessorTouch );
+
+ m_flHackSpawnHeight = 256;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CResourceProcessor::Precache( void )
+{
+ PrecacheModel( "models/objects/obj_resourceprocessor.mdl" );
+
+ UTIL_PrecacheOther( "npc_minicarrier" );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CResourceProcessor::Activate( void )
+{
+ BaseClass::Activate();
+ if ( GetTeamNumber() < 0 || GetTeamNumber() >= GetNumberOfTeams() )
+ {
+ Warning( "Warning, info_resourceprocessor with invalid Team Number set.\n" );
+ UTIL_Remove( this );
+ return;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CResourceProcessor::ProcessorTouch( CBaseEntity *pOther )
+{
+ // Players
+ if ( pOther->IsPlayer() )
+ {
+ // Ignore touches from enemy players
+ if ( !InSameTeam( pOther ) )
+ return;
+
+ CBaseTFPlayer *pPlayer = (CBaseTFPlayer *)pOther;
+
+ // Remove all the player's resources and add them to the team's stash
+ for ( int i = 0; i < MAX_RESOURCE_TYPES; i++ )
+ {
+ int iCount = pPlayer->GetResourceChunkCount(i, false);
+ if ( iCount )
+ {
+ pPlayer->RemoveResourceChunks( i, iCount, false );
+ AddResources( i, iCount * CHUNK_RESOURCE_VALUE );
+ }
+
+ // Now remove processed versions too
+ iCount = pPlayer->GetResourceChunkCount(i, true);
+ if ( iCount )
+ {
+ pPlayer->RemoveResourceChunks( i, iCount, true );
+ AddResources( i, iCount * PROCESSED_CHUNK_RESOURCE_VALUE );
+ }
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Add resources to the processor, and hence the team's bank
+//-----------------------------------------------------------------------------
+void CResourceProcessor::AddResources( int iResourceType, float flResources )
+{
+ if ( !GetTeam() )
+ return;
+
+ ((CTFTeam *)GetTeam())->AddResources( iResourceType, flResources );
+ ((CTFTeam *)GetTeam())->ResourceLoadDeposited();
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Spawn a minicarrier
+//-----------------------------------------------------------------------------
+void CResourceProcessor::SpawnMiniCarrier( void )
+{
+ CNPC_MiniCarrier *pMiniCarrier = (CNPC_MiniCarrier*)CreateEntityByName( "npc_minicarrier" );
+ pMiniCarrier->Spawn();
+ pMiniCarrier->ChangeTeam( m_iTeamNumber );
+
+ // Find a clear spot near me & spawn in it
+ if ( !EntityPlacementTest( pMiniCarrier, GetAbsOrigin() + Vector(0,0,m_flHackSpawnHeight),
+ pMiniCarrier->GetAbsOrigin(), false ) )
+ {
+ Warning( "Failed to find empty space to spawn a minicarrier.\n" );
+ ( ( CTFTeam * )GetTeam() )->RemoveRobot( pMiniCarrier );
+ UTIL_Remove( pMiniCarrier );
+ return;
+ }
+
+ m_flHackSpawnHeight += 64;
+
+ engine->SetOrigin( pMiniCarrier->pev, pMiniCarrier->GetOrigin() );
+ pMiniCarrier->SetHomeProcessor( this );
+}