Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.
 
 
 
 
 
 

180 lines
6.2 KiB

//========= 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