mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-07 17:29:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,234 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef TEAM_TRAIN_WATCHER_H
|
||||
#define TEAM_TRAIN_WATCHER_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "cbase.h"
|
||||
#include "trigger_area_capture.h"
|
||||
#include "shareddefs.h"
|
||||
#include "envspark.h"
|
||||
#include "GameEventListener.h"
|
||||
|
||||
class CFuncTrackTrain;
|
||||
class CPathTrack;
|
||||
class CTeamControlPoint;
|
||||
|
||||
#define TEAM_TRAIN_ALERT_DISTANCE 750 // alert is the VO warning
|
||||
#define TEAM_TRAIN_ALARM_DISTANCE 200 // alarm is the looping sound played at the control point
|
||||
|
||||
#define TEAM_TRAIN_ALERT "Announcer.Cart.Warning"
|
||||
#define TEAM_TRAIN_FINAL_ALERT "Announcer.Cart.FinalWarning"
|
||||
#define TEAM_TRAIN_ALARM "Cart.Warning"
|
||||
#define TEAM_TRAIN_ALARM_SINGLE "Cart.WarningSingle"
|
||||
|
||||
#define TW_THINK "CTeamTrainWatcherThink"
|
||||
#define TW_ALARM_THINK "CTeamTrainWatcherAlarmThink"
|
||||
#define TW_ALARM_THINK_INTERVAL 8.0
|
||||
|
||||
// #define TWMASTER_THINK "CTeamTrainWatcherMasterThink"
|
||||
|
||||
DECLARE_AUTO_LIST( ITFTeamTrainWatcher );
|
||||
|
||||
class CTeamTrainWatcher : public CBaseEntity, public CGameEventListener, public ITFTeamTrainWatcher
|
||||
{
|
||||
DECLARE_CLASS( CTeamTrainWatcher, CBaseEntity );
|
||||
public:
|
||||
DECLARE_SERVERCLASS();
|
||||
DECLARE_DATADESC();
|
||||
|
||||
CTeamTrainWatcher();
|
||||
~CTeamTrainWatcher();
|
||||
|
||||
virtual void UpdateOnRemove( void );
|
||||
virtual int UpdateTransmitState();
|
||||
|
||||
void InputRoundActivate( inputdata_t &inputdata );
|
||||
void InputEnable( inputdata_t &inputdata );
|
||||
void InputDisable( inputdata_t &inputdata );
|
||||
|
||||
void InputSetNumTrainCappers( inputdata_t &inputdata );
|
||||
void InputOnStartOvertime( inputdata_t &inputdata );
|
||||
void InputSetSpeedForwardModifier( inputdata_t &inputdata );
|
||||
void InputSetTrainRecedeTime( inputdata_t &inputdata );
|
||||
void InputSetTrainCanRecede( inputdata_t &inputdata );
|
||||
void InputSetTrainRecedeTimeAndUpdate( inputdata_t &inputdata );
|
||||
|
||||
// ==========================================================
|
||||
// given a start node and a list of goal nodes
|
||||
// calculate the distance between each
|
||||
// ==========================================================
|
||||
void WatcherActivate( void );
|
||||
|
||||
void WatcherThink( void );
|
||||
void WatcherAlarmThink( void );
|
||||
|
||||
CBaseEntity *GetTrainEntity( void );
|
||||
bool IsDisabled( void ) { return m_bDisabled; }
|
||||
|
||||
bool TimerMayExpire( void );
|
||||
|
||||
void StopCaptureAlarm( void );
|
||||
|
||||
void SetNumTrainCappers( int iNumCappers, CBaseEntity *pTrigger ); // only used for train watchers that control the train movement
|
||||
|
||||
virtual void FireGameEvent( IGameEvent * event );
|
||||
|
||||
int GetCapturerCount( void ) const; // return the number of players who are "capturing" the payload, or -1 if the payload is blocked
|
||||
|
||||
void ProjectPointOntoPath( const Vector &pos, Vector *posOnPath, float *distanceAlongPath ) const; // project the given position onto the track and return the point and how far along that projected position is
|
||||
bool IsAheadOfTrain( const Vector &pos ) const; // return true if the given position is farther down the track than the train is
|
||||
|
||||
bool IsTrainAtStart( void ) const; // return true if the train hasn't left its starting position yet
|
||||
bool IsTrainNearCheckpoint( void ) const; // return true if the train is almost at the next checkpoint
|
||||
|
||||
float GetTrainDistanceAlongTrack( void ) const;
|
||||
Vector GetNextCheckpointPosition( void ) const; // return world space location of next checkpoint along the path
|
||||
|
||||
#if defined( STAGING_ONLY ) && defined( TF_DLL )
|
||||
void DumpStats( void );
|
||||
#endif // STAGING_ONLY && TF_DLL
|
||||
|
||||
float GetTrainProgress() { return m_flTotalProgress; }
|
||||
|
||||
private:
|
||||
|
||||
void StartCaptureAlarm( CTeamControlPoint *pPoint );
|
||||
void PlayCaptureAlert( CTeamControlPoint *pPoint, bool bFinalPointInMap );
|
||||
void InternalSetNumTrainCappers( int iNumCappers, CBaseEntity *pTrigger );
|
||||
void InternalSetSpeedForwardModifier( float flModifier );
|
||||
#ifdef GLOWS_ENABLE
|
||||
void FindGlowEntity( void );
|
||||
#endif // GLOWS_ENABLE
|
||||
void HandleTrainMovement( bool bStartReceding = false );
|
||||
void HandleSparks( bool bSparks );
|
||||
|
||||
private:
|
||||
|
||||
bool m_bDisabled;
|
||||
bool m_bTrainCanRecede;
|
||||
// === Data ===
|
||||
|
||||
// pointer to the train that we're checking
|
||||
CHandle<CFuncTrackTrain> m_hTrain;
|
||||
|
||||
// start node
|
||||
CHandle<CPathTrack> m_hStartNode;
|
||||
|
||||
// goal node
|
||||
CHandle<CPathTrack> m_hGoalNode;
|
||||
|
||||
string_t m_iszTrain;
|
||||
string_t m_iszStartNode;
|
||||
string_t m_iszGoalNode;
|
||||
|
||||
// list of node associations with control points
|
||||
typedef struct
|
||||
{
|
||||
CHandle<CPathTrack> hPathTrack;
|
||||
CHandle<CTeamControlPoint> hCP;
|
||||
float flDistanceFromStart;
|
||||
bool bAlertPlayed;
|
||||
} node_cp_pair_t;
|
||||
|
||||
node_cp_pair_t m_CPLinks[MAX_CONTROL_POINTS];
|
||||
int m_iNumCPLinks;
|
||||
|
||||
string_t m_iszLinkedPathTracks[MAX_CONTROL_POINTS];
|
||||
string_t m_iszLinkedCPs[MAX_CONTROL_POINTS];
|
||||
|
||||
float m_flTotalPathDistance; // calculated only at round start, node graph
|
||||
// may get chopped as the round progresses
|
||||
|
||||
float m_flTrainDistanceAccumulator;
|
||||
float m_flTrainDistanceFromStart; // actual distance along path of train, for comparing against m_CPLinks[].flDistanceFromStart
|
||||
|
||||
float m_flSpeedLevels[3];
|
||||
|
||||
// === Networked Data ===
|
||||
|
||||
// current total progress, percentage
|
||||
CNetworkVar( float, m_flTotalProgress );
|
||||
|
||||
CNetworkVar( int, m_iTrainSpeedLevel );
|
||||
|
||||
CNetworkVar( int, m_nNumCappers );
|
||||
|
||||
bool m_bWaitingToRecede;
|
||||
CNetworkVar( float, m_flRecedeTime );
|
||||
float m_flRecedeTotalTime;
|
||||
float m_flRecedeStartTime;
|
||||
COutputEvent m_OnTrainStartRecede;
|
||||
|
||||
bool m_bCapBlocked;
|
||||
|
||||
float m_flNextSpeakForwardConceptTime; // used to have players speak the forward concept every X seconds
|
||||
CHandle<CTriggerAreaCapture> m_hAreaCap;
|
||||
|
||||
CSoundPatch *m_pAlarm;
|
||||
float m_flAlarmEndTime;
|
||||
bool m_bAlarmPlayed;
|
||||
|
||||
// added for new mode where the train_watcher handles the train movement
|
||||
bool m_bHandleTrainMovement;
|
||||
string_t m_iszSparkName;
|
||||
CUtlVector< CHandle<CEnvSpark> > m_Sparks;
|
||||
float m_flSpeedForwardModifier;
|
||||
int m_iCurrentHillType;
|
||||
float m_flCurrentSpeed;
|
||||
bool m_bReceding;
|
||||
|
||||
int m_nTrainRecedeTime;
|
||||
|
||||
#ifdef GLOWS_ENABLE
|
||||
CNetworkVar( EHANDLE, m_hGlowEnt );
|
||||
#endif // GLOWS_ENABLE
|
||||
};
|
||||
|
||||
|
||||
inline float CTeamTrainWatcher::GetTrainDistanceAlongTrack( void ) const
|
||||
{
|
||||
return m_flTrainDistanceFromStart;
|
||||
}
|
||||
|
||||
inline int CTeamTrainWatcher::GetCapturerCount( void ) const
|
||||
{
|
||||
return m_nNumCappers;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
class CTeamTrainWatcherMaster : public CBaseEntity, public CGameEventListener
|
||||
{
|
||||
DECLARE_CLASS( CTeamTrainWatcherMaster, CBaseEntity );
|
||||
|
||||
public:
|
||||
CTeamTrainWatcherMaster();
|
||||
~CTeamTrainWatcherMaster();
|
||||
|
||||
void Precache( void );
|
||||
|
||||
private:
|
||||
void TWMThink( void );
|
||||
void FireGameEvent( IGameEvent *event );
|
||||
|
||||
bool FindTrainWatchers( void );
|
||||
|
||||
private:
|
||||
CTeamTrainWatcher *m_pBlueWatcher;
|
||||
CTeamTrainWatcher *m_pRedWatcher;
|
||||
|
||||
float m_flBlueProgress;
|
||||
float m_flRedProgress;
|
||||
};
|
||||
|
||||
extern EHANDLE g_hTeamTrainWatcherMaster;
|
||||
*/
|
||||
|
||||
#endif //TEAM_TRAIN_WATCHER_H
|
||||
Reference in New Issue
Block a user