Kamay Xutax
14717d8092
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.
92 lines
3.1 KiB
C++
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
|