Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

95 lines
3.0 KiB

//========= Copyright Valve Corporation, All rights reserved. ============//
//
//
//
//=============================================================================
#include "cbase.h"
#include "nav_mesh.h"
#include "tf_player.h"
#include "tf_obj.h"
#include "tf_gamerules.h"
#include "bot/tf_bot.h"
#include "tf_obj_sentrygun.h"
#include "bot/behavior/engineer/mvm_engineer/tf_bot_mvm_engineer_teleport_spawn.h"
#include "bot/map_entities/tf_bot_hint_entity.h"
#include "string_t.h"
#include "tf_fx.h"
#include "player_vs_environment/tf_population_manager.h"
//---------------------------------------------------------------------------------------------
CTFBotMvMEngineerTeleportSpawn::CTFBotMvMEngineerTeleportSpawn( CBaseTFBotHintEntity* pHint, bool bFirstTeleportSpawn )
{
m_hintEntity = pHint;
m_bFirstTeleportSpawn = bFirstTeleportSpawn;
}
//---------------------------------------------------------------------------------------------
ActionResult< CTFBot > CTFBotMvMEngineerTeleportSpawn::OnStart( CTFBot *me, Action< CTFBot > *priorAction )
{
if ( !me->HasAttribute( CTFBot::TELEPORT_TO_HINT ) )
{
return Done( "Cannot teleport to hint with out Attributes TeleportToHint" );
}
return Continue();
}
//---------------------------------------------------------------------------------------------
ActionResult< CTFBot > CTFBotMvMEngineerTeleportSpawn::Update( CTFBot *me, float interval )
{
if ( !m_teleportDelay.HasStarted() )
{
m_teleportDelay.Start( 0.1f );
if ( m_hintEntity )
TFGameRules()->PushAllPlayersAway( m_hintEntity->GetAbsOrigin(), 400, 500, TF_TEAM_RED );
}
else if ( m_teleportDelay.IsElapsed() )
{
if ( !m_hintEntity )
return Done( "Cannot teleport to hint as m_hintEntity is NULL" );
// teleport the engineer to the sentry spawn point
QAngle angles = m_hintEntity->GetAbsAngles();
Vector origin = m_hintEntity->GetAbsOrigin();
origin.z += 10.f; // move up off the around a little bit to prevent the engineer from getting stuck in the ground
me->Teleport( &origin, &angles, NULL );
CPVSFilter filter( origin );
TE_TFParticleEffect( filter, 0.0, "teleported_blue", origin, vec3_angle );
TE_TFParticleEffect( filter, 0.0, "player_sparkles_blue", origin, vec3_angle );
if ( m_bFirstTeleportSpawn )
{
// notify players that engineer's teleported into the map
TE_TFParticleEffect( filter, 0.0, "teleported_mvm_bot", origin, vec3_angle );
me->EmitSound( "Engineer.MVM_BattleCry07" );
m_hintEntity->EmitSound( "MVM.Robot_Engineer_Spawn" );
if ( g_pPopulationManager )
{
CWave *pWave = g_pPopulationManager->GetCurrentWave();
if ( pWave )
{
if ( pWave->NumEngineersTeleportSpawned() == 0 )
{
TFGameRules()->BroadcastSound( 255, "Announcer.MVM_First_Engineer_Teleport_Spawned" );
}
else
{
TFGameRules()->BroadcastSound( 255, "Announcer.MVM_Another_Engineer_Teleport_Spawned" );
}
pWave->IncrementEngineerTeleportSpawned();
}
}
}
return Done( "Teleported" );
}
return Continue();
}