diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/tf/tf_weapon_passtime_gun.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/shared/tf/tf_weapon_passtime_gun.h')
| -rw-r--r-- | game/shared/tf/tf_weapon_passtime_gun.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/game/shared/tf/tf_weapon_passtime_gun.h b/game/shared/tf/tf_weapon_passtime_gun.h new file mode 100644 index 0000000..27f5457 --- /dev/null +++ b/game/shared/tf/tf_weapon_passtime_gun.h @@ -0,0 +1,150 @@ +//========= 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 |