summaryrefslogtreecommitdiff
path: root/game/shared/tf/halloween/tf_weapon_spellbook.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/tf/halloween/tf_weapon_spellbook.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/shared/tf/halloween/tf_weapon_spellbook.h')
-rw-r--r--game/shared/tf/halloween/tf_weapon_spellbook.h224
1 files changed, 224 insertions, 0 deletions
diff --git a/game/shared/tf/halloween/tf_weapon_spellbook.h b/game/shared/tf/halloween/tf_weapon_spellbook.h
new file mode 100644
index 0000000..1bcb697
--- /dev/null
+++ b/game/shared/tf/halloween/tf_weapon_spellbook.h
@@ -0,0 +1,224 @@
+//========= 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