hlsdk-xash3d/dlls/t_sub.cpp

120 lines
2.5 KiB
C++

/********************************************************************
* *
* t_sub.cpp - code du trigger_submodel *
* *
* par Julien *
* *
********************************************************************/
//===========================
//===========================
// - include
#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
//===========================
//===========================
// - definition de la classe
class CTriggerSubModel : public CBaseEntity
{
public:
void Spawn( void );
void EXPORT ChangeSub ( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
void KeyValue( KeyValueData *pkvd );
int m_iBodygroup;
int m_iSubmodel;
virtual int Save( CSave &save );
virtual int Restore( CRestore &restore );
static TYPEDESCRIPTION m_SaveData[];
};
LINK_ENTITY_TO_CLASS( trigger_submodel, CTriggerSubModel );
//=============================
//=============================
// - savestore
TYPEDESCRIPTION CTriggerSubModel::m_SaveData[] =
{
DEFINE_FIELD( CTriggerSubModel, m_iBodygroup, FIELD_INTEGER ),
DEFINE_FIELD( CTriggerSubModel, m_iSubmodel, FIELD_INTEGER ),
};
IMPLEMENT_SAVERESTORE( CTriggerSubModel, CBaseEntity );
//=============================
//=============================
// - fonctions
void CTriggerSubModel :: Spawn ( void )
{
pev->solid = SOLID_NOT;
pev->movetype = MOVETYPE_NONE;
pev->takedamage = DAMAGE_NO;
SetUse ( &CTriggerSubModel::ChangeSub );
}
void CTriggerSubModel :: KeyValue( KeyValueData *pkvd )
{
if (FStrEq(pkvd->szKeyName, "bodygroup"))
{
m_iBodygroup = atoi( pkvd->szValue );
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "submodel") )
{
m_iSubmodel = atoi( pkvd->szValue );
pkvd->fHandled = TRUE;
}
else
{
CBaseEntity :: KeyValue( pkvd );
}
}
void CTriggerSubModel :: ChangeSub ( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value )
{
if ( FStringNull ( pev->target ) )
return;
edict_t *pentTarget = FIND_ENTITY_BY_TARGETNAME ( NULL, STRING(pev->target) );
if ( FNullEnt(pentTarget) )
{
ALERT ( at_console, "CTriggerSubModel : pas d'entite s appelant %s\n", STRING(pev->target) );
return;
}
CBaseEntity *pTarget = Instance( pentTarget );
if ( pTarget->MyMonsterPointer() == NULL )
{
ALERT ( at_console, "CTriggerSubModel : %s n est pas un monstre\n", STRING(pev->target) );
return;
}
CBaseMonster *pMonster = (CBaseMonster*)pTarget;
pMonster->SetBodygroup( m_iBodygroup, m_iSubmodel);
}