css_enhanced_waf/game/client/css_enhanced/c_basetoggle.h
Kamay Xutax 14717d8092 Added prediction for triggers, thanks oblivious
Prediction is fixed by me by adding two more functions in prediction
class, there had before some issues because
starttouch/endtouch weren't predicted.
The result is that with lag, it restores touched entities,
including the triggers touched entity list.
2024-08-23 00:42:58 +02:00

92 lines
3.1 KiB
C++

#ifndef BASETOGGLE_H
#define BASETOGGLE_H
#pragma once
#include "c_baseentity.h"
//-----------------------------------------------------------------------------
// Things that toggle (buttons/triggers/doors) need this
//-----------------------------------------------------------------------------
enum TOGGLE_STATE
{
TS_AT_TOP,
TS_AT_BOTTOM,
TS_GOING_UP,
TS_GOING_DOWN
};
// 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)
class C_BaseToggle : public C_BaseEntity
{
DECLARE_CLASS(C_BaseToggle, C_BaseEntity);
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
public:
C_BaseToggle();
virtual bool KeyValue( const char *szKeyName, const char *szValue );
virtual bool KeyValue( const char *szKeyName, Vector vec ) { return BaseClass::KeyValue( szKeyName, vec ); };
virtual bool KeyValue( const char *szKeyName, float flValue ) { return BaseClass::KeyValue( szKeyName, flValue ); };
TOGGLE_STATE m_toggle_state;
float m_flMoveDistance;// how far a door should slide or rotate
float m_flWait;
float m_flLip;
Vector m_vecPosition1;
Vector m_vecPosition2;
QAngle m_vecMoveAng;
QAngle m_vecAngle1;
QAngle m_vecAngle2;
float m_flHeight;
EHANDLE m_hActivator;
Vector m_vecFinalDest;
QAngle m_vecFinalAngle;
int m_movementType;
virtual float GetDelay( void ) { return m_flWait; }
// common member functions
void LinearMove( const Vector &vecDest, float flSpeed );
void LinearMoveDone( void );
void AngularMove( const QAngle &vecDestAngle, float flSpeed );
void AngularMoveDone( void );
bool IsLockedByMaster( void );
virtual void MoveDone( void );
static float AxisValue( int flags, const QAngle &angles );
void AxisDir( void );
static float AxisDelta( int flags, const QAngle &angle1, const QAngle &angle2 );
string_t m_sMaster; // If this button has a master switch, this is the targetname.
// A master switch must be of the multisource type. If all
// of the switches in the multisource have been triggered, then
// the button will be allowed to operate. Otherwise, it will be
// deactivated.
};
#endif // BASETOGGLE_H