diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/hl2/env_headcrabcanister_shared.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/shared/hl2/env_headcrabcanister_shared.h')
| -rw-r--r-- | game/shared/hl2/env_headcrabcanister_shared.h | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/game/shared/hl2/env_headcrabcanister_shared.h b/game/shared/hl2/env_headcrabcanister_shared.h new file mode 100644 index 0000000..d5f2f7c --- /dev/null +++ b/game/shared/hl2/env_headcrabcanister_shared.h @@ -0,0 +1,180 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef ENV_HEADCRABCANISTER_SHARED_H +#define ENV_HEADCRABCANISTER_SHARED_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "vstdlib/random.h" +#include "mathlib/vector.h" +#include "utlvector.h" +#include "networkvar.h" + +//============================================================================= +// +// Shared HeadcrabCanister Class +// +class CEnvHeadcrabCanisterShared +{ + DECLARE_CLASS_NOBASE( CEnvHeadcrabCanisterShared ); + DECLARE_EMBEDDED_NETWORKVAR(); + DECLARE_SIMPLE_DATADESC(); + +public: + CEnvHeadcrabCanisterShared(); + + // Initialization. + void InitInWorld( float flLaunchTime, const Vector &vecStartPosition, const QAngle &vecStartAngles, const Vector &vecDirection, const Vector &vecImpactPosition, bool bLaunchedFromWithinWorld = false ); + void InitInSkybox( float flLaunchTime, const Vector &vecStartPosition, const QAngle &vecStartAngles, const Vector &vecDirection, const Vector &vecImpactPosition, const Vector &vecSkyboxOrigin, float flSkyboxScale ); + + // Returns the position of the object at a given time. + void GetPositionAtTime( float flTime, Vector &vecPosition, QAngle &vecAngles ); + + // Returns whether or not the object is the the skybox + bool IsInSkybox( ); + + // Returns the time at which it enters the world + float GetEnterWorldTime() const; + + // Convert from skybox to world + void ConvertFromSkyboxToWorld(); + + // Did we impact? + bool DidImpact( float flTime ) const; + +public: + // The objects initial parametric conditions. + CNetworkVector( m_vecStartPosition ); + CNetworkVector( m_vecEnterWorldPosition ); + CNetworkVector( m_vecDirection ); + CNetworkQAngle( m_vecStartAngles ); + + CNetworkVar( float, m_flFlightTime ); + CNetworkVar( float, m_flFlightSpeed ); + CNetworkVar( float, m_flLaunchTime ); + + CNetworkVar( float, m_flInitialZSpeed ); + CNetworkVar( float, m_flZAcceleration ); + CNetworkVar( float, m_flHorizSpeed ); + + CNetworkVar( bool, m_bLaunchedFromWithinWorld ); + + CNetworkVector( m_vecParabolaDirection ); + + // The time at which the canister enters the skybox + CNetworkVar( float, m_flWorldEnterTime ); + + // Skybox data + CNetworkVector( m_vecSkyboxOrigin ); + CNetworkVar( float, m_flSkyboxScale ); + CNetworkVar( bool, m_bInSkybox ); + +private: + float m_flLaunchHeight; + + // Calculate the enter time. (called from Init) + void CalcEnterTime( const Vector &vecTriggerMins, const Vector &vecTriggerMaxs ); + + friend class CEnvHeadcrabCanister; + friend class C_EnvHeadcrabCanister; +}; + +/* +//============================================================================= +// +// HeadcrabCanister Factory Interface +// +abstract_class IHeadcrabCanisterFactory +{ +public: + + virtual void CreateHeadcrabCanister( int nID, int iType, + const Vector &vecPosition, const Vector &vecDirection, + float flSpeed, float flStartTime, float flDamageRadius, + const Vector &vecTriggerMins, const Vector &vecTriggerMaxs ) = 0; +}; + +//============================================================================= +// +// Shared HeadcrabCanister Spawner Class +// +class CEnvHeadcrabCanisterSpawnerShared +{ +public: + DECLARE_CLASS_NOBASE( CEnvHeadcrabCanisterSpawnerShared ); + DECLARE_EMBEDDED_NETWORKVAR(); + + //------------------------------------------------------------------------- + // Initialization. + //------------------------------------------------------------------------- + CEnvHeadcrabCanisterSpawnerShared(); + void Init( IHeadcrabCanisterFactory *pFactory, int nRandomSeed, float flTime, + const Vector &vecMinBounds, const Vector &vecMaxBounds, + const Vector &vecTriggerMins, const Vector &vecTriggerMaxs ); + + //------------------------------------------------------------------------- + // Method to generate HeadcrabCanisters. + // Time passed in here is global time, not delta time. + // The function returns the time at which it must be called again. + //------------------------------------------------------------------------- + float HeadcrabCanisterThink( float flTime ); + + //------------------------------------------------------------------------- + // Add HeadcrabCanister target data, used to determine HeadcrabCanister travel direction. + //------------------------------------------------------------------------- + void AddToTargetList( const Vector &vecPosition, float flRadius ); + + // Debugging! + int GetRandomInt( int nMin, int nMax ); + float GetRandomFloat( float flMin, float flMax ); + +public: + + // Factory. + IHeadcrabCanisterFactory *m_pFactory; // HeadcrabCanister creation factory. + + int m_nHeadcrabCanisterCount; // Number of HeadcrabCanisters created - used as IDs + + // Initial spawner data. + CNetworkVar( float, m_flStartTime ); // Start time. + CNetworkVar( int, m_nRandomSeed ); // The random number stream seed. + + CNetworkVar( int, m_iHeadcrabCanisterType ); // Type of HeadcrabCanister. + float m_flHeadcrabCanisterDamageRadius; // HeadcrabCanister damage radius. + CNetworkVar( bool, m_bSkybox ); // Is the spawner in the skybox? + + CNetworkVar( float, m_flMinSpawnTime ); // Spawn time - Min + CNetworkVar( float, m_flMaxSpawnTime ); // Max + CNetworkVar( int, m_nMinSpawnCount ); // Number of HeadcrabCanisters to spawn - Min + CNetworkVar( int, m_nMaxSpawnCount ); // Max + CNetworkVector( m_vecMinBounds ); // Spawner volume (space) - Min + CNetworkVector( m_vecMaxBounds ); // Max + CNetworkVar( float, m_flMinSpeed ); // HeadcrabCanister speed - Min + CNetworkVar( float, m_flMaxSpeed ); // Max + CNetworkVector( m_vecTriggerMins ); // World Bounds (Trigger) in 3D Skybox - Min + CNetworkVector( m_vecTriggerMaxs ); // Max + Vector m_vecTriggerCenter; + + // Generated data. + int m_nRandomCallCount; // Debug! Keep track of number steam calls. + float m_flNextSpawnTime; // Next HeadcrabCanister spawn time (random). + CUniformRandomStream m_NumberStream; // Used to generate random numbers. + + // Use "Targets" to determine HeadcrabCanister direction(s). + struct HeadcrabCanistertarget_t + { + Vector m_vecPosition; + float m_flRadius; + }; + CUtlVector<HeadcrabCanistertarget_t> m_aTargets; +}; +*/ + +#endif // ENV_HEADCRAB_CANISTER_SHARED_H |