mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-17 14:07:48 +00:00
1
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Engineer's Teleporter
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef TF_OBJ_TELEPORTER_H
|
||||
#define TF_OBJ_TELEPORTER_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "tf_obj.h"
|
||||
#include "GameEventListener.h"
|
||||
|
||||
class CTFPlayer;
|
||||
|
||||
enum
|
||||
{
|
||||
TTYPE_NONE=0,
|
||||
TTYPE_ENTRANCE,
|
||||
TTYPE_EXIT,
|
||||
#ifdef STAGING_ONLY
|
||||
TTYPE_SPEEDPAD,
|
||||
#endif
|
||||
};
|
||||
|
||||
#define TELEPORTER_MAX_HEALTH 150
|
||||
|
||||
// ------------------------------------------------------------------------ //
|
||||
// Base Teleporter object
|
||||
// ------------------------------------------------------------------------ //
|
||||
class CObjectTeleporter : public CBaseObject, public CGameEventListener
|
||||
{
|
||||
DECLARE_CLASS( CObjectTeleporter, CBaseObject );
|
||||
|
||||
public:
|
||||
DECLARE_SERVERCLASS();
|
||||
|
||||
CObjectTeleporter();
|
||||
|
||||
virtual void Spawn();
|
||||
virtual void UpdateOnRemove();
|
||||
virtual void FirstSpawn( void );
|
||||
virtual void Precache();
|
||||
virtual bool StartBuilding( CBaseEntity *pBuilder );
|
||||
virtual void SetStartBuildingModel( void );
|
||||
virtual void OnGoActive( void );
|
||||
virtual int DrawDebugTextOverlays(void) ;
|
||||
virtual bool IsPlacementPosValid( void );
|
||||
virtual void SetModel( const char *pModel );
|
||||
virtual void InitializeMapPlacedObject( void );
|
||||
|
||||
virtual void FinishedBuilding( void );
|
||||
|
||||
void SetState( int state );
|
||||
virtual void DeterminePlaybackRate( void );
|
||||
|
||||
void RecieveTeleportingPlayer( CTFPlayer* pTeleportingPlayer );
|
||||
void TeleporterThink( void );
|
||||
void TeleporterTouch( CBaseEntity *pOther );
|
||||
virtual void StartTouch( CBaseEntity *pOther );
|
||||
virtual void EndTouch( CBaseEntity *pOther );
|
||||
|
||||
virtual void TeleporterSend( CTFPlayer *pPlayer );
|
||||
virtual void TeleporterReceive( CTFPlayer *pPlayer, float flDelay );
|
||||
|
||||
virtual void StartUpgrading( void );
|
||||
virtual void FinishUpgrading( void );
|
||||
|
||||
CObjectTeleporter *GetMatchingTeleporter( void );
|
||||
CObjectTeleporter *FindMatch( void ); // Find the teleport partner to this object
|
||||
|
||||
bool IsReady( void ); // is this teleporter connected and functional? (ie: not sapped, disabled, upgrading, unconnected, etc)
|
||||
bool IsMatchingTeleporterReady( void );
|
||||
bool IsSendingPlayer( CTFPlayer *player ); // returns true if we are in the process of teleporting the given player
|
||||
|
||||
int GetState( void ) { return m_iState; } // state of the object ( building, charging, ready etc )
|
||||
|
||||
void SetTeleportingPlayer( CTFPlayer *pPlayer )
|
||||
{
|
||||
m_hTeleportingPlayer = pPlayer;
|
||||
}
|
||||
|
||||
// Wrench hits
|
||||
virtual bool Command_Repair( CTFPlayer *pActivator, float flRepairMod );
|
||||
void AddHealth( int nHealthToAdd )
|
||||
{
|
||||
SetHealth( MIN( GetMaxHealth(), GetHealth() + nHealthToAdd ) );
|
||||
}
|
||||
virtual bool InputWrenchHit( CTFPlayer *pPlayer, CTFWrench *pWrench, Vector hitLoc );
|
||||
|
||||
// Upgrading
|
||||
virtual bool IsUpgrading( void ) const { return ( m_iState == TELEPORTER_STATE_UPGRADING ); }
|
||||
virtual bool CheckUpgradeOnHit( CTFPlayer *pPlayer );
|
||||
void CopyUpgradeStateToMatch( CObjectTeleporter *pMatch, bool bFrom );
|
||||
|
||||
virtual void Explode( void );
|
||||
|
||||
bool PlayerCanBeTeleported( CTFPlayer *pPlayer );
|
||||
|
||||
void SetTeleporterType( int iVal ) { m_iTeleportType = iVal; }
|
||||
int GetTeleporterType( void ) { return m_iTeleportType; }
|
||||
bool IsEntrance( void ) { return m_iTeleportType == TTYPE_ENTRANCE; }
|
||||
bool IsExit( void ) { return m_iTeleportType == TTYPE_EXIT; }
|
||||
#ifdef STAGING_ONLY
|
||||
// STAGING_ENGY
|
||||
bool IsSpeedPad( void ) { return m_iTeleportType == TTYPE_SPEEDPAD; }
|
||||
#endif
|
||||
|
||||
virtual void MakeCarriedObject( CTFPlayer *pCarrier );
|
||||
|
||||
virtual void SetObjectMode( int iVal );
|
||||
|
||||
virtual int GetBaseHealth( void ) { return TELEPORTER_MAX_HEALTH; }
|
||||
|
||||
virtual int GetUpgradeMetalRequired();
|
||||
|
||||
void SetTeleportWhere( const CUtlStringList& teleportWhereName )
|
||||
{
|
||||
// deep copy strings
|
||||
for ( int i=0; i<teleportWhereName.Count(); ++i )
|
||||
{
|
||||
m_teleportWhereName.CopyAndAddToTail( teleportWhereName[i] );
|
||||
}
|
||||
}
|
||||
|
||||
const CUtlStringList& GetTeleportWhere() { return m_teleportWhereName; }
|
||||
|
||||
virtual void InputEnable( inputdata_t &inputdata ) OVERRIDE;
|
||||
virtual void InputDisable( inputdata_t &inputdata ) OVERRIDE;
|
||||
|
||||
#ifdef STAGING_ONLY
|
||||
// STAGING_ENGY
|
||||
void ApplySpeedBoost( CTFPlayer *pPlayer );
|
||||
#endif
|
||||
|
||||
CTFPlayer *GetTeleportingPlayer( void ){ return m_hTeleportingPlayer.Get(); }
|
||||
|
||||
virtual void FireGameEvent( IGameEvent *event ) OVERRIDE;
|
||||
|
||||
protected:
|
||||
CNetworkVar( int, m_iState );
|
||||
CNetworkVar( float, m_flRechargeTime );
|
||||
CNetworkVar( float, m_flCurrentRechargeDuration );
|
||||
CNetworkVar( int, m_iTimesUsed );
|
||||
CNetworkVar( float, m_flYawToExit );
|
||||
CNetworkVar( bool, m_bMatchBuilding );
|
||||
|
||||
CHandle<CObjectTeleporter> m_hMatchingTeleporter;
|
||||
|
||||
float m_flLastStateChangeTime;
|
||||
|
||||
float m_flMyNextThink; // replace me
|
||||
|
||||
CHandle<CTFPlayer> m_hReservedForPlayer;
|
||||
float m_flReserveAfterTouchUntil;
|
||||
|
||||
CHandle<CTFPlayer> m_hTeleportingPlayer;
|
||||
|
||||
float m_flNextEnemyTouchHint;
|
||||
|
||||
// Direction Arrow, shows roughly what direction the exit is from the entrance
|
||||
void ShowDirectionArrow( bool bShow );
|
||||
|
||||
bool m_bShowDirectionArrow;
|
||||
int m_iDirectionBodygroup;
|
||||
int m_iBlurBodygroup;
|
||||
int m_iTeleportType;
|
||||
|
||||
string_t m_iszMatchingMapPlacedTeleporter;
|
||||
|
||||
private:
|
||||
DECLARE_DATADESC();
|
||||
|
||||
void UpdateMaxHealth( int nHealth, bool bForce = false );
|
||||
void SpawnBread( const CTFPlayer* pTeleportingPlayer );
|
||||
|
||||
CUtlStringList m_teleportWhereName;
|
||||
};
|
||||
|
||||
#endif // TF_OBJ_TELEPORTER_H
|
||||
Reference in New Issue
Block a user