summaryrefslogtreecommitdiff
path: root/game/server/tf2/env_meteor.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tf2/env_meteor.h')
-rw-r--r--game/server/tf2/env_meteor.h146
1 files changed, 146 insertions, 0 deletions
diff --git a/game/server/tf2/env_meteor.h b/game/server/tf2/env_meteor.h
new file mode 100644
index 0000000..ddeb2ca
--- /dev/null
+++ b/game/server/tf2/env_meteor.h
@@ -0,0 +1,146 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef ENV_METEOR_H
+#define ENV_METEOR_H
+#pragma once
+
+#include "BaseEntity.h"
+#include "BaseAnimating.h"
+#include "Env_Meteor_Shared.h"
+#include "utlvector.h"
+
+//=============================================================================
+//
+// Server-side Meteor Factory Class
+//
+class CMeteorFactory : public IMeteorFactory
+{
+public:
+
+ void CreateMeteor( int nID, int iType, const Vector &vecPosition,
+ const Vector &vecDirection, float flSpeed, float flStartTime,
+ float flDamageRadius,
+ const Vector &vecTriggerMins, const Vector &vecTriggerMaxs );
+};
+
+//=============================================================================
+//
+// Meteor Spawner Class
+//
+class CEnvMeteorSpawner : public CBaseEntity
+{
+public:
+
+ DECLARE_CLASS( CEnvMeteorSpawner, CBaseEntity );
+
+ DECLARE_DATADESC();
+ DECLARE_SERVERCLASS();
+
+ CEnvMeteorSpawner();
+
+ void Spawn( void );
+ void Precache( void );
+ void MeteorSpawnerThink( void );
+ int UpdateTransmitState() { return SetTransmitState( FL_EDICT_FULLCHECK ); }
+ int ShouldTransmit( const CCheckTransmitInfo *pInfo );
+ void Activate( void );
+
+private:
+
+ // Inputs
+ void InputEnable( inputdata_t &inputdata );
+ void InputDisable( inputdata_t &inputdata );
+
+ void Get3DSkyboxWorldBounds( Vector &vecTriggerMins, Vector &vecTriggerMaxs );
+
+ CMeteorFactory m_Factory;
+ CNetworkVarEmbedded( CEnvMeteorSpawnerShared, m_SpawnerShared );
+
+ CNetworkVar( bool, m_fDisabled ); // Spawner active (trigger). NOTE: uses an f to remain consistent
+ // with entity input system
+};
+
+//=============================================================================
+//
+// Meteor Target Class
+//
+class CEnvMeteorTarget : public CBaseEntity
+{
+public:
+
+ DECLARE_CLASS( CEnvMeteorTarget, CBaseEntity );
+ DECLARE_DATADESC();
+
+ CEnvMeteorTarget();
+ void Spawn( void );
+
+ int m_iTargetID;
+ float m_flRadius;
+};
+
+//=============================================================================
+//
+// Meteor Class
+//
+class CEnvMeteor : public CBaseAnimating
+{
+
+ DECLARE_CLASS( CEnvMeteor, CBaseAnimating );
+
+public:
+
+ DECLARE_DATADESC();
+
+ //-------------------------------------------------------------------------
+ // Initialization
+ //-------------------------------------------------------------------------
+ CEnvMeteor();
+ static CEnvMeteor *Create( int nID, int iMeteorType, const Vector &vecOrigin,
+ const Vector &vecDirection, float flSpeed, float flStartTime,
+ float flDamageRadius,
+ const Vector &vecTriggerMins, const Vector &vecTriggerMaxs );
+ void Spawn( void );
+
+ //-------------------------------------------------------------------------
+ // Think(s)
+ //-------------------------------------------------------------------------
+ void MeteorSkyboxThink( void );
+ void MeteorWorldThink( void );
+
+private:
+
+ CEnvMeteorShared m_Meteor;
+ bool m_bPrevInSkybox;
+ Vector m_vecMin, m_vecMax;
+};
+
+//=============================================================================
+//
+// Shooting Star Spawner Class
+//
+class CShootingStarSpawner : public CBaseEntity
+{
+ DECLARE_CLASS( CShootingStarSpawner, CBaseEntity );
+
+public:
+
+ CShootingStarSpawner();
+
+ DECLARE_DATADESC();
+ DECLARE_SERVERCLASS();
+
+ virtual int UpdateTransmitState() { return SetTransmitState( FL_EDICT_FULLCHECK ); }
+ virtual int ShouldTransmit( const CCheckTransmitInfo *pInfo );
+
+public:
+
+ CNetworkVar( float, m_flSpawnInterval ); // How often do I spawn shooting stars?
+ bool m_bSkybox; // Is the spawner in the skybox?
+};
+
+#endif // ENV_METEOR_H \ No newline at end of file