Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

150 lines
4.3 KiB

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef TF_WEAPON_PASSTIME_GUN_H
#define TF_WEAPON_PASSTIME_GUN_H
#ifdef _WIN32
#pragma once
#endif
#include "tf_weaponbase.h"
class CPasstimeBall;
#ifdef CLIENT_DLL
#define CPasstimeBall C_PasstimeBall
#define CPasstimeGun C_PasstimeGun
class C_PasstimeBounceReticle;
#else
#include "passtime_ballcontroller_homing.h"
#endif
//-----------------------------------------------------------------------------
class CPasstimeGun : public CTFWeaponBase, public ITFChargeUpWeapon
{
DECLARE_CLASS( CPasstimeGun, CTFWeaponBase );
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE(); // this has to be here because the client's precache code uses it to get the classname of this entity...
public:
CPasstimeGun();
~CPasstimeGun();
virtual float GetChargeBeginTime() OVERRIDE;
virtual float GetCurrentCharge() OVERRIDE;
static bool BValidPassTarget( CTFPlayer *pSource, CTFPlayer *pTarget, HudNotification_t *pReason = 0 );
struct LaunchParams
{
Vector eyePos;
Vector viewFwd;
Vector viewRight;
Vector viewUp;
Vector traceHullSize;
float traceHullDistance;
Vector startPos;
Vector startDir;
Vector startVel;
static LaunchParams Default( CTFPlayer *pPlayer );
};
static LaunchParams CalcLaunch( CTFPlayer *pPlayer, bool bHoming );
protected:
virtual int GetWeaponID() const OVERRIDE { return TF_WEAPON_PASSTIME_GUN; }
virtual void Spawn() OVERRIDE;
virtual void Equip( CBaseCombatCharacter *pOwner ) OVERRIDE;
virtual void Precache() OVERRIDE;
virtual bool CanHolster() const OVERRIDE;
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo ) OVERRIDE;
virtual void WeaponReset() OVERRIDE;
virtual bool CanCharge() OVERRIDE;
virtual float GetChargeMaxTime() OVERRIDE;
virtual void UpdateOnRemove() OVERRIDE;
virtual bool VisibleInWeaponSelection() OVERRIDE;
virtual acttable_t* ActivityList(int &iActivityCount) OVERRIDE;
virtual void ItemPostFrame() OVERRIDE;
virtual void ItemHolsterFrame() OVERRIDE;
virtual bool Deploy() OVERRIDE;
virtual bool CanDeploy() OVERRIDE;
virtual const char *GetWorldModel() const OVERRIDE;
virtual bool SendWeaponAnim( int actBase ) OVERRIDE;
virtual Activity GetDrawActivity() OVERRIDE { return ACT_BALL_VM_CATCH; }
// HasPrimaryAmmo, CanBeSelected, IsEnergyWeapon:
// these exist to make other code have correct side-effects
// search for where these are called to see the specifics.
virtual bool HasPrimaryAmmo() OVERRIDE { return true; }
virtual bool CanBeSelected() OVERRIDE { return true; }
virtual bool IsEnergyWeapon() const OVERRIDE { return true; }
#ifdef CLIENT_DLL
virtual void UpdateAttachmentModels() OVERRIDE;
virtual void ClientThink() OVERRIDE;
void UpdateThrowArch();
void DestroyThrowArch();
C_PasstimeBounceReticle *m_pBounceReticle;
#endif
void Throw( CTFPlayer *pOwner );
enum EThrowState
{
THROWSTATE_IDLE,
THROWSTATE_CHARGING,
THROWSTATE_CHARGED,
THROWSTATE_THROWN,
THROWSTATE_CANCELLED,
THROWSTATE_DISABLED,
};
enum EButtonState
{
BUTTONSTATE_UP, // not pressed
BUTTONSTATE_PRESSED, // was just pressed and is down
BUTTONSTATE_DOWN, // continues to be down
BUTTONSTATE_RELEASED, // was just released and is not down
BUTTONSTATE_DISABLED, // ignore input
};
struct AttackInputState
{
AttackInputState( int button )
: iButton( button ), eButtonState( BUTTONSTATE_UP )
, bLatchedUp( false )
{}
const int iButton;
EButtonState eButtonState;
bool bLatchedUp;
bool Is( EButtonState state ) const { return eButtonState == state; }
void Disable() { eButtonState = BUTTONSTATE_DISABLED; }
void Enable()
{
if ( eButtonState == BUTTONSTATE_DISABLED )
eButtonState = BUTTONSTATE_UP;
}
void Update( int held, int pressed, int released );
void LatchUp();
void UnlatchUp();
};
int m_iHalloweenAttachmentIndex;
int m_iAttachmentIndex;
float m_flTargetResetTime;
float m_flThrowLoopStartTime;
AttackInputState m_attack, m_attack2;
CNetworkVar( EThrowState, m_eThrowState );
CNetworkVar( float, m_fChargeBeginTime );
CHandle<CBaseCombatWeapon> m_hStoredLastWpn;
#ifdef GAME_DLL
CPasstimeBallControllerHoming m_ballController;
#endif
};
#endif // TF_WEAPON_PASSTIME_GUN_H