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.
225 lines
6.7 KiB
225 lines
6.7 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================
|
||
|
|
||
|
#ifndef TF_WEAPON_SPELLBOOK_H
|
||
|
#define TF_WEAPON_SPELLBOOK_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include "GameEventListener.h"
|
||
|
#include "tf_weapon_jar.h"
|
||
|
#include "tf_weapon_throwable.h"
|
||
|
#include "tf_shareddefs.h"
|
||
|
#include "tf_viewmodel.h"
|
||
|
#include "econ_item_view.h"
|
||
|
|
||
|
#ifdef CLIENT_DLL
|
||
|
#include <vgui_controls/EditablePanel.h>
|
||
|
#include "hudelement.h"
|
||
|
#include "econ_controls.h"
|
||
|
#include "c_tf_projectile_rocket.h"
|
||
|
#include "econ_notifications.h"
|
||
|
#include "vgui_controls/ImagePanel.h"
|
||
|
|
||
|
#define CTFSpellBook C_TFSpellBook
|
||
|
#define CTFProjectile_SpellFireball C_TFProjectile_SpellFireball
|
||
|
#define CTFProjectile_SpellBats C_TFProjectile_SpellBats
|
||
|
#define CTFProjectile_SpellSpawnZombie C_TFProjectile_SpellSpawnZombie
|
||
|
#define CTFProjectile_SpellSpawnHorde C_TFProjectile_SpellSpawnHorde
|
||
|
#define CTFProjectile_SpellMirv C_TFProjectile_SpellMirv
|
||
|
#define CTFProjectile_SpellPumpkin C_TFProjectile_SpellPumpkin
|
||
|
|
||
|
#define CTFProjectile_SpellSpawnBoss C_TFProjectile_SpellSpawnBoss
|
||
|
#define CTFProjectile_SpellMeteorShower C_TFProjectile_SpellMeteorShower
|
||
|
#define CTFProjectile_SpellTransposeTeleport C_TFProjectile_SpellTransposeTeleport
|
||
|
#define CTFProjectile_SpellLightningOrb C_TFProjectile_SpellLightningOrb
|
||
|
#define CTFProjectile_SpellVortex C_TFProjectile_SpellVortex
|
||
|
|
||
|
#define CTFProjectile_SpellKartOrb C_TFProjectile_SpellKartOrb
|
||
|
#define CTFProjectile_SpellKartBats C_TFProjectile_SpellKartBats
|
||
|
#define CTFProjectile_SpellKartMirv C_TFProjectile_SpellKartMirv
|
||
|
#define CTFProjectile_SpellKartPumpkin C_TFProjectile_SpellKartPumpkin
|
||
|
#else
|
||
|
#include "tf_projectile_rocket.h"
|
||
|
#endif
|
||
|
|
||
|
#ifdef CLIENT_DLL
|
||
|
|
||
|
// For testing, hijack this basic menu but replace it later with TF specific UI
|
||
|
class CHudSpellMenu : public CHudElement, public vgui::EditablePanel
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CHudSpellMenu, EditablePanel );
|
||
|
public:
|
||
|
CHudSpellMenu( const char *pElementName );
|
||
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
|
||
|
virtual bool ShouldDraw( void );
|
||
|
virtual void FireGameEvent( IGameEvent *event ) OVERRIDE;
|
||
|
virtual void OnTick( void ) OVERRIDE;
|
||
|
|
||
|
void UpdateSpellText( int iSpellIndex, int iCharges );
|
||
|
|
||
|
private:
|
||
|
vgui::ImagePanel *m_pSpellIcon;
|
||
|
CExLabel *m_pKeyBinding;
|
||
|
|
||
|
int m_iPrevSelectedSpell;
|
||
|
float m_iNextRollTime;
|
||
|
float m_flRollTickGap;
|
||
|
bool m_bTickSoundA;
|
||
|
|
||
|
bool m_bKillstreakMeterDrawing;
|
||
|
};
|
||
|
|
||
|
//=============================================================================
|
||
|
class CEquipSpellbookNotification : public CEconNotification
|
||
|
{
|
||
|
public:
|
||
|
CEquipSpellbookNotification() : CEconNotification()
|
||
|
{
|
||
|
m_bHasTriggered = false;
|
||
|
}
|
||
|
|
||
|
~CEquipSpellbookNotification()
|
||
|
{
|
||
|
if ( !m_bHasTriggered )
|
||
|
{
|
||
|
m_bHasTriggered = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
virtual void MarkForDeletion()
|
||
|
{
|
||
|
m_bHasTriggered = true;
|
||
|
CEconNotification::MarkForDeletion();
|
||
|
}
|
||
|
|
||
|
virtual EType NotificationType() { return eType_AcceptDecline; }
|
||
|
virtual bool BShowInGameElements() const { return true; }
|
||
|
|
||
|
virtual void Accept();
|
||
|
virtual void Trigger() { Accept(); }
|
||
|
virtual void Decline() { MarkForDeletion(); }
|
||
|
virtual void UpdateTick();
|
||
|
|
||
|
static bool IsNotificationType( CEconNotification *pNotification ) { return dynamic_cast< CEquipSpellbookNotification *>( pNotification ) != NULL; }
|
||
|
|
||
|
private:
|
||
|
bool m_bHasTriggered;
|
||
|
};
|
||
|
#endif // CLIENT_DLL
|
||
|
|
||
|
#ifdef GAME_DLL
|
||
|
void RemoveAll2013HalloweenTeleportSpellsInMidFlight( void );
|
||
|
#endif
|
||
|
|
||
|
//=============================================================================
|
||
|
//
|
||
|
// CTFSpellBook class.
|
||
|
//
|
||
|
class CTFSpellBook : public CTFThrowable
|
||
|
{
|
||
|
public:
|
||
|
DECLARE_CLASS( CTFSpellBook, CTFThrowable );
|
||
|
DECLARE_NETWORKCLASS();
|
||
|
DECLARE_PREDICTABLE();
|
||
|
|
||
|
CTFSpellBook();
|
||
|
virtual int GetWeaponID( void ) const { return TF_WEAPON_SPELLBOOK; }
|
||
|
virtual const char* GetEffectLabelText( void ) { return "#TF_KART"; }
|
||
|
virtual void Precache( void );
|
||
|
|
||
|
virtual void PrimaryAttack();
|
||
|
virtual void ItemPostFrame( void );
|
||
|
|
||
|
virtual void ItemBusyFrame( void );
|
||
|
virtual void ItemHolsterFrame( void );
|
||
|
|
||
|
virtual bool ShowHudElement () { return false; }
|
||
|
virtual bool VisibleInWeaponSelection( void ) { return false; }
|
||
|
virtual bool CanBeSelected( void ) { return false; }
|
||
|
|
||
|
bool HasASpellWithCharges();
|
||
|
|
||
|
virtual CBaseEntity *FireJar( CTFPlayer *pPlayer ) OVERRIDE;
|
||
|
|
||
|
bool CanCastSpell( CTFPlayer *pPlayer );
|
||
|
void PaySpellCost( CTFPlayer *pPlayer );
|
||
|
void ClearSpell();
|
||
|
|
||
|
// Hack for infinite ammo
|
||
|
virtual bool IsEnergyWeapon( void ) const { return true; }
|
||
|
float Energy_GetMaxEnergy( void ) const { return 500; }
|
||
|
float Energy_GetEnergy( void ) const { return 500; }
|
||
|
bool Energy_FullyCharged( void ) const { return true; }
|
||
|
bool Energy_HasEnergy( void ) { return true; }
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef GAME_DLL
|
||
|
void SaveLastWeapon( CBaseCombatWeapon *pWpn ) { m_pStoredLastWpn = pWpn; }
|
||
|
|
||
|
// Projectile Creation
|
||
|
virtual void TossJarThink( void );
|
||
|
virtual void CreateSpellRocket( const Vector &position, const QAngle &angles, const Vector &velocity,
|
||
|
const AngularImpulse &angVelocity, CBaseCombatCharacter *pOwner, const CTFWeaponInfo &weaponInfo );
|
||
|
virtual void CreateSpellJar( const Vector &position, const QAngle &angles, const Vector &velocity,
|
||
|
const AngularImpulse &angVelocity, CBaseCombatCharacter *pOwner, const CTFWeaponInfo &weaponInfo );
|
||
|
|
||
|
// Spell Helpers
|
||
|
// Think
|
||
|
void RollNewSpell( int iTier, bool bForceReroll = false );
|
||
|
void SetSelectedSpell( int index );
|
||
|
void SpeakSpellConceptIfAllowed();
|
||
|
|
||
|
// Spells
|
||
|
void CastKartSpell();
|
||
|
bool CastSpell( CTFPlayer *pPlayer, int iSpellIndex );
|
||
|
|
||
|
CHandle<CBaseCombatWeapon> m_pStoredLastWpn;
|
||
|
|
||
|
void RollNewSpellFinish( void );
|
||
|
int m_iNextSpell;
|
||
|
int m_iPreviouslyCastSpell;
|
||
|
|
||
|
#endif
|
||
|
|
||
|
virtual bool CanThrowUnderWater( void ){ return true; }
|
||
|
|
||
|
#ifdef CLIENT_DLL
|
||
|
float m_flTimeNextErrorSound;
|
||
|
EHANDLE m_hHandEffectWeapon;
|
||
|
HPARTICLEFFECT m_hHandEffect;
|
||
|
|
||
|
#endif // CLIENT_DLL
|
||
|
|
||
|
// Self Cast Spells
|
||
|
static bool CastSelfHeal( CTFPlayer *pPlayer );
|
||
|
static bool CastRocketJump( CTFPlayer *pPlayer );
|
||
|
static bool CastSelfSpeedBoost( CTFPlayer *pPlayer );
|
||
|
static bool CastSelfStealth( CTFPlayer *pPlayer );
|
||
|
|
||
|
static bool CastKartRocketJump( CTFPlayer *pPlayer );
|
||
|
static bool CastKartUber( CTFPlayer *pPlayer );
|
||
|
static bool CastKartBombHead( CTFPlayer *pPlayer );
|
||
|
|
||
|
static const char* GetHandEffect( CEconItemView *pItem, int iTier );
|
||
|
|
||
|
CNetworkVar( float, m_flTimeNextSpell );
|
||
|
CNetworkVar( int, m_iSelectedSpellIndex );
|
||
|
CNetworkVar( int, m_iSpellCharges );
|
||
|
|
||
|
CNetworkVar( bool, m_bFiredAttack );
|
||
|
};
|
||
|
|
||
|
|
||
|
#ifdef GAME_DLL
|
||
|
CBaseEntity* CreateSpellSpawnZombie( CBaseCombatCharacter *pCaster, const Vector& vSpawnPosition, int nSkeletonType );
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#endif // TF_WEAPON_SPELLBOOK_H
|