summaryrefslogtreecommitdiff
path: root/game/server/trains.h
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/trains.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/server/trains.h')
-rw-r--r--game/server/trains.h217
1 files changed, 217 insertions, 0 deletions
diff --git a/game/server/trains.h b/game/server/trains.h
new file mode 100644
index 0000000..ef7e8b7
--- /dev/null
+++ b/game/server/trains.h
@@ -0,0 +1,217 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef TRAINS_H
+#define TRAINS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "entityoutput.h"
+#include "pathtrack.h"
+
+
+// Spawnflags of CPathCorner
+#define SF_CORNER_WAITFORTRIG 0x001
+#define SF_CORNER_TELEPORT 0x002
+
+// Tracktrain spawn flags
+#define SF_TRACKTRAIN_NOPITCH 0x0001
+#define SF_TRACKTRAIN_NOCONTROL 0x0002
+#define SF_TRACKTRAIN_FORWARDONLY 0x0004
+#define SF_TRACKTRAIN_PASSABLE 0x0008
+#define SF_TRACKTRAIN_FIXED_ORIENTATION 0x0010
+#define SF_TRACKTRAIN_HL1TRAIN 0x0080
+#define SF_TRACKTRAIN_USE_MAXSPEED_FOR_PITCH 0x0100
+#define SF_TRACKTRAIN_UNBLOCKABLE_BY_PLAYER 0x0200
+
+#define TRAIN_ACTIVE 0x80
+#define TRAIN_NEW 0xc0
+#define TRAIN_OFF 0x00
+#define TRAIN_NEUTRAL 0x01
+#define TRAIN_SLOW 0x02
+#define TRAIN_MEDIUM 0x03
+#define TRAIN_FAST 0x04
+#define TRAIN_BACK 0x05
+
+
+enum TrainVelocityType_t
+{
+ TrainVelocity_Instantaneous = 0,
+ TrainVelocity_LinearBlend,
+ TrainVelocity_EaseInEaseOut,
+};
+
+
+enum TrainOrientationType_t
+{
+ TrainOrientation_Fixed = 0,
+ TrainOrientation_AtPathTracks,
+ TrainOrientation_LinearBlend,
+ TrainOrientation_EaseInEaseOut,
+};
+
+class CFuncTrackTrain : public CBaseEntity
+{
+ DECLARE_CLASS( CFuncTrackTrain, CBaseEntity );
+ DECLARE_SERVERCLASS();
+
+public:
+ CFuncTrackTrain();
+
+ void Spawn( void );
+ bool CreateVPhysics( void );
+ void Precache( void );
+ void UpdateOnRemove();
+ void MoveDone();
+
+ virtual int OnTakeDamage( const CTakeDamageInfo &info );
+
+ void Blocked( CBaseEntity *pOther );
+ bool KeyValue( const char *szKeyName, const char *szValue );
+
+ virtual int DrawDebugTextOverlays();
+ void DrawDebugGeometryOverlays();
+
+ void Next( void );
+ void Find( void );
+ void NearestPath( void );
+ void DeadEnd( void );
+
+ void SetTrack( CPathTrack *track ) { m_ppath = track->Nearest(GetLocalOrigin()); }
+ void SetControls( CBaseEntity *pControls );
+ bool OnControls( CBaseEntity *pControls );
+
+ void SoundStop( void );
+ void SoundUpdate( void );
+
+ void Start( void );
+ void Stop( void );
+
+ bool IsDirForward();
+ void SetDirForward( bool bForward );
+ void SetSpeed( float flSpeed, bool bAccel = false );
+ void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
+ void SetSpeedDirAccel( float flNewSpeed );
+
+ // Input handlers
+ void InputSetSpeed( inputdata_t &inputdata );
+ void InputSetSpeedDir( inputdata_t &inputdata );
+ void InputSetSpeedReal( inputdata_t &inputdata );
+ void InputStop( inputdata_t &inputdata );
+ void InputResume( inputdata_t &inputdata );
+ void InputReverse( inputdata_t &inputdata );
+ void InputStartForward( inputdata_t &inputdata );
+ void InputStartBackward( inputdata_t &inputdata );
+ void InputToggle( inputdata_t &inputdata );
+ void InputSetSpeedDirAccel( inputdata_t &inputdata );
+ void InputTeleportToPathTrack( inputdata_t &inputdata );
+ void InputSetSpeedForwardModifier( inputdata_t &inputdata );
+
+ static CFuncTrackTrain *Instance( edict_t *pent );
+
+#ifdef TF_DLL
+ int UpdateTransmitState()
+ {
+ return SetTransmitState( FL_EDICT_ALWAYS );
+ }
+#endif
+
+ DECLARE_DATADESC();
+
+ virtual int ObjectCaps( void ) { return BaseClass::ObjectCaps() | FCAP_DIRECTIONAL_USE | FCAP_USE_ONGROUND; }
+
+ virtual void OnRestore( void );
+
+ float GetMaxSpeed() const { return m_maxSpeed; }
+ float GetCurrentSpeed() const { return m_flSpeed; }
+ float GetDesiredSpeed() const { return m_flDesiredSpeed;}
+
+ virtual bool IsBaseTrain( void ) const { return true; }
+
+ void SetSpeedForwardModifier( float flModifier );
+ void SetBlockDamage( float flDamage ) { m_flBlockDamage = flDamage; }
+ void SetDamageChild( bool bDamageChild ) { m_bDamageChild = bDamageChild; }
+
+private:
+
+ void ArriveAtNode( CPathTrack *pNode );
+ void FirePassInputs( CPathTrack *pStart, CPathTrack *pEnd, bool forward );
+
+public:
+
+ // UNDONE: Add accessors?
+ CPathTrack *m_ppath;
+ float m_length;
+
+#ifdef HL1_DLL
+ bool m_bOnTrackChange; // we don't want to find a new node if we restore while
+ // riding on a func_trackchange
+#endif
+
+private:
+
+ TrainVelocityType_t GetTrainVelocityType();
+ void UpdateTrainVelocity( CPathTrack *pnext, CPathTrack *pNextNext, const Vector &nextPos, float flInterval );
+
+ TrainOrientationType_t GetTrainOrientationType();
+ void UpdateTrainOrientation( CPathTrack *pnext, CPathTrack *pNextNext, const Vector &nextPos, float flInterval );
+ void UpdateOrientationAtPathTracks( CPathTrack *pnext, CPathTrack *pNextNext, const Vector &nextPos, float flInterval );
+ void UpdateOrientationBlend( TrainOrientationType_t eOrientationType, CPathTrack *pPrev, CPathTrack *pNext, const Vector &nextPos, float flInterval );
+ void DoUpdateOrientation( const QAngle &curAngles, const QAngle &angles, float flInterval );
+
+ void TeleportToPathTrack( CPathTrack *pTeleport );
+
+
+ Vector m_controlMins;
+ Vector m_controlMaxs;
+ Vector m_lastBlockPos; // These are used to build a heuristic decision about being temporarily blocked by physics objects
+ int m_lastBlockTick; // ^^^^^^^
+ float m_flVolume;
+ float m_flBank;
+ float m_oldSpeed;
+ float m_flBlockDamage; // Damage to inflict when blocked.
+ float m_height;
+ float m_maxSpeed;
+ float m_dir;
+
+
+ string_t m_iszSoundMove; // Looping sound to play while moving. Pitch shifted based on speed.
+ string_t m_iszSoundMovePing; // Ping sound to play while moving. Interval decreased based on speed.
+ string_t m_iszSoundStart; // Sound to play when starting to move.
+ string_t m_iszSoundStop; // Sound to play when stopping.
+
+ float m_flMoveSoundMinTime; // The most often to play the move 'ping' sound (used at max speed)
+ float m_flMoveSoundMaxTime; // The least often to play the move 'ping' sound (used approaching zero speed)
+ float m_flNextMoveSoundTime;
+
+ int m_nMoveSoundMinPitch; // The sound pitch to approach as we come to a stop
+ int m_nMoveSoundMaxPitch; // The sound pitch to approach as we approach our max speed (actually, it's hardcoded to 1000 in/sec)
+
+ TrainOrientationType_t m_eOrientationType;
+ TrainVelocityType_t m_eVelocityType;
+ bool m_bSoundPlaying;
+
+ COutputEvent m_OnStart,m_OnNext;
+
+ bool m_bManualSpeedChanges; // set when we want to send entity IO to govern speed and obey our TrainVelocityType_t
+ float m_flDesiredSpeed; // target speed, when m_bManualSpeedChanges is set
+ float m_flSpeedChangeTime;
+ float m_flAccelSpeed;
+ float m_flDecelSpeed;
+ bool m_bAccelToSpeed;
+
+ float m_flNextMPSoundTime;
+
+ float m_flSpeedForwardModifier;
+ float m_flUnmodifiedDesiredSpeed;
+
+ bool m_bDamageChild;
+};
+
+
+#endif // TRAINS_H