|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
//- ---
|
|
|
|
|
//- fog.cpp ---
|
|
|
|
|
//- ---
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
//- partie serveur de l'effet de brouillard ---
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
// inclusions
|
|
|
|
|
|
|
|
|
|
#include "extdll.h"
|
|
|
|
|
#include "util.h"
|
|
|
|
|
#include "cbase.h"
|
|
|
|
|
#include "player.h"
|
|
|
|
|
|
|
|
|
|
extern int gmsgFog;
|
|
|
|
|
|
|
|
|
|
int g_bFogUpdate;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
// classe de l'entit<EFBFBD> dans les maps bsp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CTriggerFog : public CPointEntity
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
void Spawn ( void );
|
|
|
|
|
|
|
|
|
|
void KeyValue ( KeyValueData *pkvd );
|
|
|
|
|
void Use ( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual int Save ( CSave &save );
|
|
|
|
|
virtual int Restore ( CRestore &restore );
|
|
|
|
|
|
|
|
|
|
static TYPEDESCRIPTION m_SaveData[];
|
|
|
|
|
|
|
|
|
|
float m_flminDist;
|
|
|
|
|
float m_flmaxDist;
|
|
|
|
|
float m_flFadeInTime;
|
|
|
|
|
float m_flFadeOutTime;
|
|
|
|
|
|
|
|
|
|
int m_bActive;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
LINK_ENTITY_TO_CLASS( trigger_fog, CTriggerFog );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TYPEDESCRIPTION CTriggerFog::m_SaveData[] =
|
|
|
|
|
{
|
|
|
|
|
DEFINE_FIELD( CTriggerFog, m_flminDist, FIELD_FLOAT ),
|
|
|
|
|
DEFINE_FIELD( CTriggerFog, m_flmaxDist, FIELD_FLOAT ),
|
|
|
|
|
DEFINE_FIELD( CTriggerFog, m_flFadeInTime, FIELD_FLOAT ),
|
|
|
|
|
DEFINE_FIELD( CTriggerFog, m_flFadeOutTime, FIELD_FLOAT ),
|
|
|
|
|
DEFINE_FIELD( CTriggerFog, m_bActive, FIELD_INTEGER ),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CTriggerFog :: Spawn( void )
|
|
|
|
|
{
|
|
|
|
|
pev->solid = SOLID_NOT;
|
|
|
|
|
pev->effects = EF_NODRAW;
|
|
|
|
|
|
|
|
|
|
m_bActive = 0;
|
|
|
|
|
|
|
|
|
|
g_bFogUpdate = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTriggerFog :: KeyValue( KeyValueData *pkvd )
|
|
|
|
|
{
|
|
|
|
|
if (FStrEq(pkvd->szKeyName, "mindist"))
|
|
|
|
|
{
|
|
|
|
|
m_flminDist = atof(pkvd->szValue);
|
|
|
|
|
pkvd->fHandled = TRUE;
|
|
|
|
|
}
|
|
|
|
|
else if (FStrEq(pkvd->szKeyName, "maxdist"))
|
|
|
|
|
{
|
|
|
|
|
m_flmaxDist = atof(pkvd->szValue);
|
|
|
|
|
pkvd->fHandled = TRUE;
|
|
|
|
|
}
|
|
|
|
|
else if (FStrEq(pkvd->szKeyName, "fadein"))
|
|
|
|
|
{
|
|
|
|
|
m_flFadeInTime = atof(pkvd->szValue);
|
|
|
|
|
pkvd->fHandled = TRUE;
|
|
|
|
|
}
|
|
|
|
|
else if (FStrEq(pkvd->szKeyName, "fadeout"))
|
|
|
|
|
{
|
|
|
|
|
m_flFadeOutTime = atof(pkvd->szValue);
|
|
|
|
|
pkvd->fHandled = TRUE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
CPointEntity::KeyValue( pkvd );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTriggerFog :: Use ( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value )
|
|
|
|
|
{
|
|
|
|
|
// value = 0 : activation
|
|
|
|
|
// value = 18686 : update du client
|
|
|
|
|
|
|
|
|
|
if ( value != 18686 )
|
|
|
|
|
{
|
|
|
|
|
CBaseEntity *pPlayer = NULL;
|
|
|
|
|
pPlayer = UTIL_FindEntityByClassname( NULL, "player" );
|
|
|
|
|
|
|
|
|
|
MESSAGE_BEGIN( MSG_ONE, gmsgFog, NULL, pPlayer->pev );
|
|
|
|
|
|
|
|
|
|
if ( m_bActive == 0 )
|
|
|
|
|
{
|
|
|
|
|
WRITE_BYTE ( 1 ); // appartion
|
|
|
|
|
WRITE_COORD ( m_flFadeInTime ); // temps
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
WRITE_BYTE ( 0 ); // disparition
|
|
|
|
|
WRITE_COORD ( m_flFadeOutTime ); // temps
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WRITE_COORD ( m_flminDist ); // distances
|
|
|
|
|
WRITE_COORD ( m_flmaxDist );
|
|
|
|
|
|
|
|
|
|
WRITE_COORD ( pev->rendercolor.x ); // couleur
|
|
|
|
|
WRITE_COORD ( pev->rendercolor.y );
|
|
|
|
|
WRITE_COORD ( pev->rendercolor.z );
|
|
|
|
|
|
|
|
|
|
MESSAGE_END();
|
|
|
|
|
|
|
|
|
|
m_bActive = m_bActive == 1 ? 0 : 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if ( value == 18686 )
|
|
|
|
|
{
|
|
|
|
|
CBaseEntity *pPlayer = NULL;
|
|
|
|
|
pPlayer = UTIL_FindEntityByClassname( NULL, "player" );
|
|
|
|
|
|
|
|
|
|
MESSAGE_BEGIN( MSG_ONE, gmsgFog, NULL, pPlayer->pev );
|
|
|
|
|
|
|
|
|
|
WRITE_BYTE ( m_bActive );
|
|
|
|
|
WRITE_COORD ( 0 );
|
|
|
|
|
WRITE_COORD ( m_flminDist );
|
|
|
|
|
WRITE_COORD ( m_flmaxDist );
|
|
|
|
|
WRITE_COORD ( pev->rendercolor.x );
|
|
|
|
|
WRITE_COORD ( pev->rendercolor.y );
|
|
|
|
|
WRITE_COORD ( pev->rendercolor.z );
|
|
|
|
|
|
|
|
|
|
MESSAGE_END();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//------------------------------------------
|
|
|
|
|
// sauvegarde et restauration
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int CTriggerFog::Save( CSave &save )
|
|
|
|
|
{
|
|
|
|
|
if ( !CPointEntity::Save(save) )
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
return save.WriteFields( "CTriggerFog", this, m_SaveData, ARRAYSIZE(m_SaveData) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CTriggerFog::Restore( CRestore &restore )
|
|
|
|
|
{
|
|
|
|
|
if ( !CPointEntity::Restore(restore) )
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
int status = restore.ReadFields( "CTriggerFog", this, m_SaveData, ARRAYSIZE(m_SaveData) );
|
|
|
|
|
|
|
|
|
|
//-----------------------
|
|
|
|
|
|
|
|
|
|
g_bFogUpdate = 1; // force le rafraichissement des donnees client
|
|
|
|
|
|
|
|
|
|
//----------------------
|
|
|
|
|
return status;
|
|
|
|
|
}
|