hl2_src-leak-2017/src/game/server/tf/trigger_catapult.h

102 lines
3.3 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
// copied from portal2 code; original code came with client-predicted counterpart,
// but implementing predictable triggers in tf2 wasn't trivial so this is just the
// server component. it works but causes prediction errors.
#ifndef TRIGGER_CATAPULT_H
#define TRIGGER_CATAPULT_H
#ifdef _WIN32
#pragma once
#endif
#include "triggers.h"
class CTriggerCatapult : public CBaseTrigger
{
DECLARE_CLASS( CTriggerCatapult, CBaseTrigger );
DECLARE_DATADESC();
//DECLARE_SERVERCLASS();
public:
CTriggerCatapult( void );
virtual void Spawn( void );
virtual void StartTouch( CBaseEntity *pOther );
virtual void EndTouch( CBaseEntity *pOther );
virtual int DrawDebugTextOverlays(void);
virtual void DrawDebugGeometryOverlays( void );
void LaunchThink( void );
void PlayerPassesTriggerFiltersThink( void );
static const char *s_szPlayerPassesTriggerFiltersThinkContext;
private:
void InputSetPlayerSpeed( inputdata_t &in );
void InputSetPhysicsSpeed( inputdata_t &in );
void InputSetLaunchTarget( inputdata_t &in );
void InputSetExactVelocityChoiceType( inputdata_t &in );
void LaunchByTarget( CBaseEntity *pVictim, CBaseEntity *pTarget );
Vector CalculateLaunchVector( CBaseEntity *pVictim, CBaseEntity *pTarget );
Vector CalculateLaunchVectorPreserve( Vector vecInitialVelocity, CBaseEntity *pVictim, CBaseEntity *pTarget, bool bForcePlayer = false );
void LaunchByDirection( CBaseEntity *pVictim );
void OnLaunchedVictim( CBaseEntity *pVictim );
float m_flRefireDelay[MAX_PLAYERS + 1];
float m_flPlayerVelocity;
float m_flPhysicsVelocity;
QAngle m_vecLaunchAngles;
string_t m_strLaunchTarget;
int m_ExactVelocityChoice;
bool m_bUseExactVelocity;
bool m_bUseThresholdCheck;
float m_flLowerThreshold;
float m_flUpperThreshold;
float m_flEntryAngleTolerance;
EHANDLE m_hLaunchTarget;
bool m_bOnlyVelocityCheck;
bool m_bApplyAngularImpulse;
bool m_bPlayersPassTriggerFilters;
float m_flAirControlSupressionTime;
bool m_bDirectionSuppressAirControl;
//CNetworkArray( float, m_flRefireDelay, MAX_PLAYERS + 1 ); // 0 for physics object the rest for each player userid
//CNetworkVar( float, m_flPlayerVelocity );
//CNetworkVar( float, m_flPhysicsVelocity );
//CNetworkQAngle( m_vecLaunchAngles );
////CNetworkVar( string_t, m_strLaunchTarget );
//string_t m_strLaunchTarget;
//CNetworkVar( int, m_ExactVelocityChoice );
//CNetworkVar( bool, m_bUseExactVelocity );
//CNetworkVar( bool, m_bUseThresholdCheck );
//CNetworkVar( float, m_flLowerThreshold );
//CNetworkVar( float, m_flUpperThreshold );
//CNetworkVar( float, m_flEntryAngleTolerance );
//CNetworkHandle( CBaseEntity, m_hLaunchTarget );
//CNetworkVar( bool, m_bOnlyVelocityCheck );
//CNetworkVar( bool, m_bApplyAngularImpulse );
//CNetworkVar( bool, m_bPlayersPassTriggerFilters );
//CNetworkVar( float, m_flAirControlSupressionTime ); // After catapult, stop air control for this long (or default of quarter second if this value is negative)
//CNetworkVar( bool, m_bDirectionSuppressAirControl ); // Do we want to use air control suppression for directional catapults.
COutputEvent m_OnCatapulted;
CUtlVector< EHANDLE > m_hAbortedLaunchees;
};
#endif // TRIGGER_CATAPULT_H