aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/server/pathtrack.h
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/server/pathtrack.h
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/server/pathtrack.h')
-rw-r--r--mp/src/game/server/pathtrack.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/mp/src/game/server/pathtrack.h b/mp/src/game/server/pathtrack.h
new file mode 100644
index 00000000..b48519b8
--- /dev/null
+++ b/mp/src/game/server/pathtrack.h
@@ -0,0 +1,158 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef PATHTRACK_H
+#define PATHTRACK_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "entityoutput.h"
+#include "shareddefs.h"
+
+
+//-----------------------------------------------------------------------------
+// Spawnflag for CPathTrack
+//-----------------------------------------------------------------------------
+#define SF_PATH_DISABLED 0x00000001
+//#define SF_PATH_FIREONCE 0x00000002
+#define SF_PATH_ALTREVERSE 0x00000004
+#define SF_PATH_DISABLE_TRAIN 0x00000008
+#define SF_PATH_TELEPORT 0x00000010
+#define SF_PATH_UPHILL 0x00000020
+#define SF_PATH_DOWNHILL 0x00000040
+#define SF_PATH_ALTERNATE 0x00008000
+
+
+enum TrackOrientationType_t
+{
+ TrackOrientation_Fixed = 0,
+ TrackOrientation_FacePath,
+ TrackOrientation_FacePathAngles,
+};
+
+
+//-----------------------------------------------------------------------------
+// Paths!
+//-----------------------------------------------------------------------------
+class CPathTrack : public CPointEntity
+{
+ DECLARE_CLASS( CPathTrack, CPointEntity );
+
+public:
+ CPathTrack();
+
+ void Spawn( void );
+ void Activate( void );
+ void DrawDebugGeometryOverlays();
+
+ void ToggleAlternatePath( void );
+ void EnableAlternatePath( void );
+ void DisableAlternatePath( void );
+ bool HasAlternathPath() const;
+
+ void TogglePath( void );
+ void EnablePath( void );
+ void DisablePath( void );
+
+ static CPathTrack *ValidPath( CPathTrack *ppath, int testFlag = true ); // Returns ppath if enabled, NULL otherwise
+
+ CPathTrack *GetNextInDir( bool bForward );
+ CPathTrack *GetNext( void );
+ CPathTrack *GetPrevious( void );
+
+ CPathTrack *Nearest( const Vector &origin );
+ //CPathTrack *LookAhead( Vector &origin, float dist, int move );
+ CPathTrack *LookAhead( Vector &origin, float dist, int move, CPathTrack **pNextNext = NULL );
+
+ TrackOrientationType_t GetOrientationType();
+ QAngle GetOrientation( bool bForwardDir );
+
+ CHandle<CPathTrack> m_pnext;
+ CHandle<CPathTrack> m_pprevious;
+ CHandle<CPathTrack> m_paltpath;
+
+ float GetRadius() const { return m_flRadius; }
+
+ // These four methods help for circular path checking. Call BeginIteration
+ // before iterating, EndInteration afterwards. Call Visit on each path in the
+ // list. Then you can use HasBeenVisited to see if you've visited the node
+ // already, which means you've got a circular or lasso path. You can use the
+ // macro BEGIN_PATH_TRACK_ITERATION below to simplify the calls to
+ // BeginInteration + EndIteration.
+ static void BeginIteration();
+ static void EndIteration();
+ void Visit();
+ bool HasBeenVisited() const;
+
+ bool IsUpHill(){ return ( FBitSet( m_spawnflags, SF_PATH_UPHILL ) ) ? true : false; }
+ bool IsDownHill(){ return ( FBitSet( m_spawnflags, SF_PATH_DOWNHILL ) ) ? true : false; }
+ int GetHillType()
+ {
+ int iRetVal = HILL_TYPE_NONE;
+ if ( IsUpHill() )
+ {
+ iRetVal = HILL_TYPE_UPHILL;
+ }
+ else if ( IsDownHill() )
+ {
+ iRetVal = HILL_TYPE_DOWNHILL;
+ }
+
+ return iRetVal;
+ }
+
+ bool IsDisabled( void ){ return FBitSet( m_spawnflags, SF_PATH_DISABLED ); }
+
+ void InputPass( inputdata_t &inputdata );
+ void InputTeleport( inputdata_t &inputdata );
+
+ void InputToggleAlternatePath( inputdata_t &inputdata );
+ void InputEnableAlternatePath( inputdata_t &inputdata );
+ void InputDisableAlternatePath( inputdata_t &inputdata );
+
+ void InputTogglePath( inputdata_t &inputdata );
+ void InputEnablePath( inputdata_t &inputdata );
+ void InputDisablePath( inputdata_t &inputdata );
+
+private:
+ void Project( CPathTrack *pstart, CPathTrack *pend, Vector &origin, float dist );
+ void SetPrevious( CPathTrack *pprevious );
+ void Link( void );
+
+ static CPathTrack *Instance( edict_t *pent );
+
+ DECLARE_DATADESC();
+
+ float m_flRadius;
+ float m_length;
+ string_t m_altName;
+ int m_nIterVal;
+ TrackOrientationType_t m_eOrientationType;
+
+ COutputEvent m_OnPass;
+ COutputEvent m_OnTeleport;
+
+ static int s_nCurrIterVal;
+ static bool s_bIsIterating;
+};
+
+//-----------------------------------------------------------------------------
+// Used to make sure circular iteration works all nice
+//-----------------------------------------------------------------------------
+#define BEGIN_PATH_TRACK_ITERATION() CPathTrackVisitor _visit
+
+class CPathTrackVisitor
+{
+public:
+ CPathTrackVisitor() { CPathTrack::BeginIteration(); }
+ ~CPathTrackVisitor() { CPathTrack::EndIteration(); }
+};
+
+
+
+#endif // PATHTRACK_H