diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /sp/src/game/server/doors.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/game/server/doors.h')
| -rw-r--r-- | sp/src/game/server/doors.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/sp/src/game/server/doors.h b/sp/src/game/server/doors.h new file mode 100644 index 00000000..0de009dc --- /dev/null +++ b/sp/src/game/server/doors.h @@ -0,0 +1,161 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef DOORS_H
+#define DOORS_H
+#pragma once
+
+
+#include "locksounds.h"
+#include "entityoutput.h"
+
+//Since I'm here, might as well explain how these work. Base.fgd is the file that connects
+//flags to entities. It is full of lines with this number, a label, and a default value.
+//Voila, dynamicly generated checkboxes on the Flags tab of Entity Properties.
+
+// doors
+#define SF_DOOR_ROTATE_YAW 0 // yaw by default
+#define SF_DOOR_START_OPEN_OBSOLETE 1
+#define SF_DOOR_ROTATE_BACKWARDS 2
+#define SF_DOOR_NONSOLID_TO_PLAYER 4
+#define SF_DOOR_PASSABLE 8
+#define SF_DOOR_ONEWAY 16
+#define SF_DOOR_NO_AUTO_RETURN 32
+#define SF_DOOR_ROTATE_ROLL 64
+#define SF_DOOR_ROTATE_PITCH 128
+#define SF_DOOR_PUSE 256 // door can be opened by player's use button.
+#define SF_DOOR_NONPCS 512 // NPC can't open
+#define SF_DOOR_PTOUCH 1024 // player touch opens
+#define SF_DOOR_LOCKED 2048 // Door is initially locked
+#define SF_DOOR_SILENT 4096 // Door plays no audible sound, and does not alert NPCs when opened
+#define SF_DOOR_USE_CLOSES 8192 // Door can be +used to close before its autoreturn delay has expired.
+#define SF_DOOR_SILENT_TO_NPCS 16384 // Does not alert NPC's when opened.
+#define SF_DOOR_IGNORE_USE 32768 // Completely ignores player +use commands.
+#define SF_DOOR_NEW_USE_RULES 65536 // For func_door entities, behave more like prop_door_rotating with respect to +USE (changelist 242482)
+
+
+enum FuncDoorSpawnPos_t
+{
+ FUNC_DOOR_SPAWN_CLOSED = 0,
+ FUNC_DOOR_SPAWN_OPEN,
+};
+
+
+class CBaseDoor : public CBaseToggle
+{
+public:
+ DECLARE_CLASS( CBaseDoor, CBaseToggle );
+
+ DECLARE_SERVERCLASS();
+
+ void Spawn( void );
+ void Precache( void );
+ bool CreateVPhysics();
+ bool KeyValue( const char *szKeyName, const char *szValue );
+ virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
+
+ virtual void StartBlocked( CBaseEntity *pOther );
+ virtual void Blocked( CBaseEntity *pOther );
+ virtual void EndBlocked( void );
+
+ void Activate( void );
+
+ virtual int ObjectCaps( void )
+ {
+ int flags = BaseClass::ObjectCaps();
+ if ( HasSpawnFlags( SF_DOOR_PUSE ) )
+ return flags | FCAP_IMPULSE_USE | FCAP_USE_IN_RADIUS;
+
+ return flags;
+ };
+
+ DECLARE_DATADESC();
+
+ // This is ONLY used by the node graph to test movement through a door
+ void InputSetToggleState( inputdata_t &inputdata );
+ virtual void SetToggleState( int state );
+
+ virtual bool IsRotatingDoor() { return false; }
+ virtual bool ShouldSavePhysics();
+ // used to selectivly override defaults
+ void DoorTouch( CBaseEntity *pOther );
+
+ // local functions
+ int DoorActivate( );
+ void DoorGoUp( void );
+ void DoorGoDown( void );
+ void DoorHitTop( void );
+ void DoorHitBottom( void );
+ void UpdateAreaPortals( bool isOpen );
+ void Unlock( void );
+ void Lock( void );
+ int GetDoorMovementGroup( CBaseDoor *pDoorList[], int listMax );
+
+ // Input handlers
+ void InputClose( inputdata_t &inputdata );
+ void InputLock( inputdata_t &inputdata );
+ void InputOpen( inputdata_t &inputdata );
+ void InputToggle( inputdata_t &inputdata );
+ void InputUnlock( inputdata_t &inputdata );
+ void InputSetSpeed( inputdata_t &inputdata );
+
+ Vector m_vecMoveDir; // The direction of motion for linear moving doors.
+
+ locksound_t m_ls; // door lock sounds
+
+ byte m_bLockedSentence;
+ byte m_bUnlockedSentence;
+
+ bool m_bForceClosed; // If set, always close, even if we're blocked.
+ bool m_bDoorGroup;
+ bool m_bLocked; // Whether the door is locked
+ bool m_bIgnoreDebris;
+
+ FuncDoorSpawnPos_t m_eSpawnPosition;
+
+ float m_flBlockDamage; // Damage inflicted when blocked.
+ string_t m_NoiseMoving; //Start/Looping sound
+ string_t m_NoiseArrived; //End sound
+ string_t m_NoiseMovingClosed; //Start/Looping sound
+ string_t m_NoiseArrivedClosed; //End sound
+ string_t m_ChainTarget; ///< Entity name to pass Touch and Use events to
+
+ CNetworkVar( float, m_flWaveHeight );
+
+ // Outputs
+ COutputEvent m_OnBlockedClosing; // Triggered when the door becomes blocked while closing.
+ COutputEvent m_OnBlockedOpening; // Triggered when the door becomes blocked while opening.
+ COutputEvent m_OnUnblockedClosing; // Triggered when the door becomes unblocked while closing.
+ COutputEvent m_OnUnblockedOpening; // Triggered when the door becomes unblocked while opening.
+ COutputEvent m_OnFullyClosed; // Triggered when the door reaches the fully closed position.
+ COutputEvent m_OnFullyOpen; // Triggered when the door reaches the fully open position.
+ COutputEvent m_OnClose; // Triggered when the door is told to close.
+ COutputEvent m_OnOpen; // Triggered when the door is told to open.
+ COutputEvent m_OnLockedUse; // Triggered when the user tries to open a locked door.
+
+ void StartMovingSound( void );
+ virtual void StopMovingSound( void );
+ void MovingSoundThink( void );
+#ifdef HL1_DLL
+ bool PassesBlockTouchFilter(CBaseEntity *pOther);
+ string_t m_iBlockFilterName;
+ EHANDLE m_hBlockFilter;
+#endif
+
+ bool ShouldLoopMoveSound( void ) { return m_bLoopMoveSound; }
+ bool m_bLoopMoveSound; // Move sound loops until stopped
+
+private:
+ void ChainUse( void ); ///< Chains +use on through to m_ChainTarget
+ void ChainTouch( CBaseEntity *pOther ); ///< Chains touch on through to m_ChainTarget
+ void SetChaining( bool chaining ) { m_isChaining = chaining; } ///< Latch to prevent recursion
+ bool m_isChaining;
+
+ void CloseAreaPortalsThink( void ); ///< Delays turning off area portals when closing doors to prevent visual artifacts
+};
+
+#endif // DOORS_H
|