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.
185 lines
4.8 KiB
185 lines
4.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef WEAPON_COMBATSHIELD_SHARED_H |
|
#define WEAPON_COMBATSHIELD_SHARED_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "basetfcombatweapon_shared.h" |
|
|
|
// Shield States |
|
enum |
|
{ |
|
SS_DOWN, // Not in use |
|
SS_RAISING, // Going up |
|
SS_UP, // Up, active, and blocking |
|
SS_LOWERING, // Going down |
|
SS_PARRYING, // In the process of parrying |
|
SS_PARRYING_FINISH_SWING, // Time to allow the parrying animation to finish |
|
SS_UNAVAILABLE, // Post-parry, unavailable for using |
|
}; |
|
|
|
// Shield Hitboxes |
|
enum |
|
{ |
|
SS_HITBOX_NOSHIELD, |
|
SS_HITBOX_FULLSHIELD, |
|
SS_HITBOX_SMALLSHIELD, |
|
}; |
|
|
|
// Range of the shield bash |
|
#define SHIELD_BASH_RANGE 64.0 |
|
|
|
#if defined( CLIENT_DLL ) |
|
class Beam_t; |
|
|
|
#define CWeaponCombatShield C_WeaponCombatShield |
|
#define CWeaponCombatShieldAlien C_WeaponCombatShieldAlien |
|
#endif |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Shared version of CWeaponCombatShield |
|
//----------------------------------------------------------------------------- |
|
class CWeaponCombatShield : public CBaseTFCombatWeapon |
|
{ |
|
DECLARE_CLASS( CWeaponCombatShield, CBaseTFCombatWeapon ); |
|
public: |
|
DECLARE_NETWORKCLASS(); |
|
DECLARE_PREDICTABLE(); |
|
|
|
CWeaponCombatShield(); |
|
|
|
virtual void Precache( void ); |
|
|
|
virtual bool Deploy( void ); |
|
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo = NULL ); |
|
virtual bool TakeShieldBash( CBaseTFPlayer *pBasher ); |
|
virtual void ItemPostFrame( void ); |
|
virtual void ItemBusyFrame( void ); |
|
virtual void ShieldPostFrame( void ); |
|
virtual void GainedNewTechnology( CBaseTechnology *pTechnology ); |
|
virtual int UpdateClientData( CBasePlayer *pPlayer ); |
|
|
|
void SetShieldState( int iShieldState ); |
|
void UpdateShieldState( void ); |
|
int GetShieldState( void ); |
|
|
|
void ShieldBash( void ); |
|
|
|
void SetAllowPostFrame( bool allow ); |
|
void SetShieldUsable( bool bUsable ); |
|
bool ShieldUsable( void ); |
|
|
|
// Shield power levels |
|
float AttemptToBlock( float flDamage ); |
|
void ShieldRechargeThink( void ); |
|
|
|
virtual bool VisibleInWeaponSelection( void ); |
|
virtual int GetOtherWeaponsActivity( int iActivity ); |
|
virtual int ReplaceOtherWeaponsActivity( int iActivity ); |
|
|
|
// All predicted weapons need to implement and return true |
|
virtual bool IsPredicted( void ) const |
|
{ |
|
return true; |
|
} |
|
|
|
bool IsUp( void ); |
|
float GetRaisingTime( void ); |
|
float GetLoweringTime( void ); |
|
|
|
// Shield health handling |
|
float GetShieldHealth( void ); |
|
void AddShieldHealth( float flHealth ); |
|
void RemoveShieldHealth( float flHealth ); |
|
|
|
#if defined( CLIENT_DLL ) |
|
virtual void GetViewmodelBoneControllers( CBaseViewModel *pViewModel, float controllers[MAXSTUDIOBONECTRLS]); |
|
virtual bool ShouldPredict( void ) |
|
{ |
|
if ( GetOwner() && |
|
GetOwner() == C_BasePlayer::GetLocalPlayer() ) |
|
return true; |
|
|
|
return BaseClass::ShouldPredict(); |
|
} |
|
|
|
virtual void DrawAmmo( void ); |
|
virtual void HandleInput( void ); |
|
|
|
virtual void ViewModelDrawn( C_BaseViewModel *pViewModel ); |
|
|
|
void InitShieldBeam( void ); |
|
void InitTeslaBeam( void ); |
|
|
|
void DrawBeams( C_BaseViewModel *pViewModel ); |
|
|
|
#endif |
|
|
|
private: |
|
CWeaponCombatShield( const CWeaponCombatShield& ); |
|
|
|
CNetworkVar( int, m_iShieldState ); |
|
|
|
bool m_bUsable; |
|
|
|
CNetworkVar( float, m_flShieldUpStartTime ); |
|
CNetworkVar( float, m_flShieldDownStartTime ); |
|
CNetworkVar( float, m_flShieldParryEndTime ); |
|
CNetworkVar( float, m_flShieldParrySwingEndTime ); |
|
CNetworkVar( float, m_flShieldUnavailableEndTime ); |
|
|
|
CNetworkVar( float, m_flShieldRaisedTime ); |
|
CNetworkVar( float, m_flShieldLoweredTime ); |
|
|
|
CNetworkVar( float, m_flShieldHealth ); |
|
|
|
CNetworkVar( bool, m_bAllowPostFrame ); |
|
CNetworkVar( bool, m_bHasShieldParry ); |
|
|
|
#if defined( CLIENT_DLL ) |
|
float m_flFlashTimeEnd; |
|
|
|
float m_flTeslaSpeed; |
|
float m_flTeslaSkitter; |
|
float m_flTeslaLeftInc; |
|
float m_flTeslaRightInc; |
|
Beam_t *m_pTeslaBeam; |
|
Beam_t *m_pTeslaBeam2; |
|
CMaterialReference m_hTeslaSpriteMaterial; |
|
|
|
bool m_bLeftToRight; |
|
int m_nShieldEdge; |
|
float m_flShieldSpeed; |
|
float m_flShieldInc; |
|
Beam_t *m_pShieldBeam; |
|
Beam_t *m_pShieldBeam2; |
|
Beam_t *m_pShieldBeam3; |
|
CMaterialReference m_hShieldSpriteMaterial; |
|
#endif |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Need to do different art on client vs server |
|
//----------------------------------------------------------------------------- |
|
class CWeaponCombatShieldAlien : public CWeaponCombatShield |
|
{ |
|
DECLARE_CLASS( CWeaponCombatShieldAlien, CWeaponCombatShield ); |
|
public: |
|
DECLARE_NETWORKCLASS(); |
|
DECLARE_PREDICTABLE(); |
|
|
|
CWeaponCombatShieldAlien( void ) {} |
|
|
|
private: |
|
CWeaponCombatShieldAlien( const CWeaponCombatShieldAlien & ); |
|
}; |
|
|
|
|
|
#endif // WEAPON_COMBATSHIELD_SHARED_H
|
|
|