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.

138 lines
3.7 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef ECON_WEARABLE_H
#define ECON_WEARABLE_H
#ifdef _WIN32
#pragma once
#endif
#include "econ_entity.h"
enum
{
MAX_WEARABLES_SENT_FROM_SERVER =
#ifdef LOADOUT_MAX_WEARABLES_COUNT // we actually do want to just check for macro definition here -- undefined means "fall back to whatever default"
LOADOUT_MAX_WEARABLES_COUNT
#else
8 // hard-coded constant to match old behavior
#endif
};
#if defined( CLIENT_DLL )
#define CEconWearable C_EconWearable
#define CTFWearableItem C_TFWearableItem
#endif
enum
{
ITEM_DROP_TYPE_NULL,
ITEM_DROP_TYPE_NONE,
ITEM_DROP_TYPE_DROP,
ITEM_DROP_TYPE_BREAK,
};
class CEconWearable : public CEconEntity
{
DECLARE_CLASS( CEconWearable, CEconEntity );
public:
DECLARE_NETWORKCLASS();
DECLARE_DATADESC();
CEconWearable();
virtual bool IsWearable( void ) const { return true; }
// Shared
virtual void Spawn( void );
virtual void GiveTo( CBaseEntity *pOther );
virtual void RemoveFrom( CBaseEntity *pOther );
virtual bool CanEquip( CBaseEntity *pOther ) { return true; }
virtual void Equip( CBasePlayer *pOwner );
virtual void UnEquip( CBasePlayer* pOwner );
virtual void OnWearerDeath( void );
virtual int GetDropType( void );
// virtual bool UpdateBodygroups( CBasePlayer* pOwner, int iState );
void SetAlwaysAllow( bool bVal ) { m_bAlwaysAllow = bVal; }
bool AlwaysAllow( void ) { return m_bAlwaysAllow; }
virtual bool IsViewModelWearable( void ) { return false; }
// Server
#if defined( GAME_DLL )
#endif
// Client
#if defined( CLIENT_DLL )
virtual ShadowType_t ShadowCastType() OVERRIDE;
virtual bool ShouldDraw();
virtual bool ShouldDrawWhenPlayerIsDead() { return true; }
virtual void OnDataChanged( DataUpdateType_t updateType );
virtual void ClientThink( void );
virtual bool ShouldDrawParticleSystems( void );
virtual RenderGroup_t GetRenderGroup();
#endif
virtual int GetSkin( void );
// Static
static void UpdateWearableBodyGroups( CBasePlayer *pPlayer );
protected:
virtual void InternalSetPlayerDisplayModel( void );
private:
bool m_bAlwaysAllow; // Wearable will not be removed by ManageRegularWeapons. Only use this for wearables managed by other items!
};
//-----------------------------------------------------------------------------
// Purpose: For backwards compatibility with older demos
//-----------------------------------------------------------------------------
class CTFWearableItem : public CEconWearable
{
DECLARE_CLASS( CTFWearableItem, CEconWearable );
public:
DECLARE_NETWORKCLASS();
DECLARE_DATADESC();
CTFWearableItem();
};
#ifdef CLIENT_DLL
// Clientside wearable physics props. Used to have wearables fall off dying players.
class C_EconWearableGib : public CEconEntity
{
DECLARE_CLASS( C_EconWearableGib, CEconEntity );
public:
C_EconWearableGib();
~C_EconWearableGib();
bool Initialize( bool bWillBeParented );
bool FinishModelInitialization( void );
virtual CStudioHdr *OnNewModel( void );
virtual bool ValidateEntityAttachedToPlayer( bool &bShouldRetry );
virtual void SpawnClientEntity();
virtual void Spawn();
virtual void ClientThink( void );
void StartFadeOut( float fDelay );
virtual void ImpactTrace( trace_t *pTrace, int iDamageType, const char *pCustomImpactName );
virtual CollideType_t GetCollideType( void ) { return ENTITY_SHOULD_RESPOND; }
bool UpdateThinkState( void );
private:
bool m_bParented;
bool m_bDelayedInit;
float m_fDeathTime; // Point at which this object self destructs.
// The default of -1 indicates the object shouldn't destruct.
};
#endif
#endif // ECON_WEARABLE_H