mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-17 14:07:48 +00:00
1
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user