//=======================================================================
// Copyright XashXT Group 2008 ©
// effects.c - various effects
//=======================================================================
.float m_animate;
.float m_lastTime;
.float m_maxFrame;
void cycler_use( void )
{
pev->m_animate = !pev->m_animate;
if( pev->m_animate )
pev->framerate = 1.0;
else pev->framerate = 0.0;
}
void cycler_think( void )
{
pev->nextthink = time + 0.1;
if( pev->m_animate )
{
Studio_FrameAdvance( 0.0f );
}
if( pev->m_fSequenceFinished && !pev->m_fSequenceLoops )
{
// ResetSequenceInfo();
// hack to avoid reloading model every frame
pev->animtime = time;
pev->framerate = 1.0;
pev->m_fSequenceFinished = FALSE;
pev->frame = 0;
if( !pev->m_animate )
pev->framerate = 0.0; // FIX: don't reset framerate
}
}
void cycler( void )
{
InitBoneControllers();
pev->solid = SOLID_BBOX;
pev->movetype = MOVETYPE_NONE;
pev->takedamage = DAMAGE_YES;
pev->effects = 0;
pev->health = 80000;// no cycler should die
pev->yaw_speed = 5;
pev->ideal_yaw = pev->angles_y;
ChangeYaw();
pev->m_flFrameRate = 75;
pev->m_flGroundSpeed = 0;
pev->nextthink += 1.0;
pev->use = cycler_use;
pev->think = cycler_think;
ResetSequenceInfo( );
if( pev->sequence != 0 || pev->frame != 0 )
{
pev->m_animate = 0;
pev->framerate = 0;
}
else pev->m_animate = 1;
}
void Animate( float frames )
{
pev->frame += frames;
if( pev->m_maxFrame > 0 )
pev->frame = pev->frame % pev->m_maxFrame;
}
void cycler_sprite_think( void )
{
if( pev->m_animate && pev->m_maxFrame > 1.0f )
Animate( pev->framerate * (time - pev->m_lastTime));
pev->nextthink = time + 0.1;
pev->m_lastTime = time;
}
void cycler_sprite_use( void )
{
pev->m_animate = !pev->m_animate;
MsgDev( D_INFO, "Sprite: %s\n", pev->model );
}
void cycler_sprite( void )
{
pev->solid = SOLID_BBOX;
pev->movetype = MOVETYPE_NONE;
pev->takedamage = DAMAGE_YES;
pev->effects = 0;
pev->frame = 0;
pev->nextthink = time + 0.1;
pev->m_animate = 1;
pev->m_lastTime = time;
pev->use = cycler_sprite_use;
pev->think = cycler_sprite_think;
precache_model( pev->model );
setmodel( pev, pev->model );
pev->m_maxFrame = (float)model_frames( pev->modelindex ) - 1;
}
void env_sprite( void )
{
precache_model( pev->model );
pev->owner = pev;
pev->solid = SOLID_NOT;
pev->movetype = MOVETYPE_NONE;
setmodel( pev, pev->model );
pev->frame = 0;
}
void env_model( void )
{
precache_model( pev->model );
pev->owner = pev;
if(!(pev->spawnflags & SF_NOTSOLID))
pev->solid = SOLID_BBOX;
else pev->solid = SOLID_NOT;
pev->movetype = MOVETYPE_NONE;
setmodel( pev, pev->model );
pev->frame = 0;
pev->sequence = 0;
if( pev->spawnflags & 4 )
droptofloor();
}