diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/doors.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/doors.h')
| -rw-r--r-- | game/server/doors.h | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/game/server/doors.h b/game/server/doors.h new file mode 100644 index 0000000..9b485fe --- /dev/null +++ b/game/server/doors.h @@ -0,0 +1,164 @@ +//========= 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; + bool m_bIgnoreNonPlayerEntsOnBlock; // Non-player entities should never block. This variable needs more letters. + + 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 + + virtual bool ShouldBlockNav() const OVERRIDE { return false; } + +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 |