NSProjectile: add AnimateOnce() method

This commit is contained in:
Marco Cawthorne 2023-01-17 20:23:18 -08:00
parent fea5ed574f
commit d562533111
Signed by: eukara
GPG key ID: CE2032F0A2882A22
2 changed files with 40 additions and 7 deletions

View file

@ -25,7 +25,8 @@ private:
float m_flProjectileFramerate;
virtual void m_pImpact(entity, entity) = 0;
virtual void _AnimateThink(void);
nonvirtual void _AnimateThink(void);
nonvirtual void _AnimateThinkDead(void);
public:
void NSProjectile(void);
@ -39,4 +40,6 @@ public:
virtual void ProjectileTouch(void);
/** When called, will animated between two frame positions at a specified framerate. */
virtual void Animate(int, int, float);
virtual void AnimateOnce(int, int, float);
virtual void Spawned(void);
};

View file

@ -20,9 +20,13 @@ NSProjectile::NSProjectile(void)
m_iProjectileAnimEnd = 0i;
m_iProjectileAnimStart = 0i;
m_flProjectileFramerate = 0.1f; /* default to 10 hz */
touch = ProjectileTouch;
}
SetMovetype(MOVETYPE_FLY);
void
NSProjectile::Spawned(void)
{
touch = ProjectileTouch;
SetMovetype(MOVETYPE_FLYMISSILE);
SetRenderColor([1,1,1]);
SetRenderAmt(1.0);
SetSolid(SOLID_BBOX);
@ -54,21 +58,47 @@ NSProjectile::SetModel(string mdl)
void
NSProjectile::_AnimateThink(void)
{
frame++;
SetFrame(frame + 1);
if (frame > (float)m_iProjectileAnimEnd)
frame = (float)m_iProjectileAnimStart;
SetFrame(m_iProjectileAnimStart);
think = _AnimateThink;
nextthink = time + m_flProjectileFramerate;
}
void
NSProjectile::_AnimateThinkDead(void)
{
SetFrame(frame + 1);
if (frame > (float)m_iProjectileAnimEnd) {
Destroy();
return;
}
think = _AnimateThinkDead;
nextthink = time + m_flProjectileFramerate;
}
void
NSProjectile::Animate(int startframe, int endframe, float framerate)
{
m_iProjectileAnimEnd = startframe;
m_iProjectileAnimStart = endframe;
m_iProjectileAnimStart = startframe;
m_iProjectileAnimEnd = endframe;
m_flProjectileFramerate = framerate;
frame = startframe;
think = _AnimateThink;
nextthink = time + m_flProjectileFramerate;
}
void
NSProjectile::AnimateOnce(int startframe, int endframe, float framerate)
{
m_iProjectileAnimStart = startframe;
m_iProjectileAnimEnd = endframe;
m_flProjectileFramerate = framerate;
frame = startframe;
think = _AnimateThinkDead;
nextthink = time + m_flProjectileFramerate;
}