summaryrefslogtreecommitdiff
path: root/game/server/tf2/gasoline_blob.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tf2/gasoline_blob.h')
-rw-r--r--game/server/tf2/gasoline_blob.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/game/server/tf2/gasoline_blob.h b/game/server/tf2/gasoline_blob.h
new file mode 100644
index 0000000..5c3b303
--- /dev/null
+++ b/game/server/tf2/gasoline_blob.h
@@ -0,0 +1,93 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef GASOLINE_BLOB_H
+#define GASOLINE_BLOB_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "baseentity.h"
+
+
+class CGasolineBlob : public CBaseEntity
+{
+public:
+ DECLARE_CLASS( CGasolineBlob, CBaseEntity );
+ DECLARE_SERVERCLASS();
+
+
+ // Create a gasoline blob.
+ // flAirLifetime specifies how long it takes to fizzle out in the air.
+ static CGasolineBlob* Create(
+ CBaseEntity *pOwner,
+ const Vector &vOrigin,
+ const Vector &vStartVelocity,
+ bool bUseGravity,
+ float flAirLifetime,
+ float flLifetime );
+
+ virtual ~CGasolineBlob();
+
+ // A lit blob will always apply at least 25% damage to its "auto burn" blob.
+ //
+ // This is used when laying down gasoline blobs in a line. Since it's fairly easy to accidentally
+ // lay down blobs that won't damage each other because they're too far away, the line of blobs
+ // can be linked together using this.
+ void AddAutoBurnBlob( CGasolineBlob *pBlob );
+
+
+// Overrides.
+public:
+
+ virtual int OnTakeDamage( const CTakeDamageInfo &info );
+
+
+
+// Implementation.
+public:
+
+ bool IsLit() const;
+ bool IsStopped() const;
+ void SetLit( bool bLit );
+
+ void Think();
+
+ void AutoBurn_R( CGasolineBlob *pParent );
+
+
+private:
+
+ typedef CHandle<CGasolineBlob> CGasolineBlobHandle;
+ CUtlVector<CGasolineBlobHandle> m_AutoBurnBlobs;
+
+ float m_flTimeInAir; // How long we've been in the air.
+ float m_flAirLifetime; // How long we're allowed to exist in the air.
+
+ CNetworkVar( float, m_flLitStartTime ); // What time did the blob become lit at?
+
+ CNetworkVar( int, m_BlobFlags ); // Combination of BLOBFLAG_ defines.
+
+ // This is set at the start and is used to know the percentage of lifetime left.
+ CNetworkVar( float, m_flMaxLifetime );
+
+ // When the blob was created.
+ CNetworkVar( float, m_flCreateTime );
+
+ CNetworkVector( m_vSurfaceNormal ); // This is sent to the client so it can spread the fire out.
+
+ EHANDLE m_hOwner;
+ float m_HeatLevel; // This rises when other flames are nearby until we ignite.
+};
+
+
+// Returns true if the entity is a gasoline blob.
+bool IsGasolineBlob( CBaseEntity *pEnt );
+
+
+#endif // GASOLINE_BLOB_H