mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2024-11-09 23:11:39 +00:00
Try to make IQM animations sync to when the frame is changed (like FTE or DP) so that the animations can actually be used for non-static things. There are still no 4-way blends, however.
This commit is contained in:
parent
0f39ae9565
commit
4c9569c254
5 changed files with 14 additions and 7 deletions
|
@ -554,8 +554,6 @@ static void CL_EntitiesDeltaed(void)
|
|||
|
||||
ent->msgtime = cl.mtime[0];
|
||||
|
||||
ent->frame = ent->netstate.frame;
|
||||
|
||||
i = ent->netstate.colormap;
|
||||
if (!i)
|
||||
ent->colormap = vid.colormap;
|
||||
|
@ -611,7 +609,9 @@ static void CL_EntitiesDeltaed(void)
|
|||
// or randomized
|
||||
if (model)
|
||||
{
|
||||
if (model->synctype == ST_RAND)
|
||||
if (model->synctype == ST_FRAMETIME)
|
||||
ent->syncbase = -cl.time;
|
||||
else if (model->synctype == ST_RAND)
|
||||
ent->syncbase = (float)(rand()&0x7fff) / 0x7fff;
|
||||
else
|
||||
ent->syncbase = 0.0;
|
||||
|
@ -623,6 +623,9 @@ static void CL_EntitiesDeltaed(void)
|
|||
|
||||
ent->lerpflags |= LERP_RESETANIM; //johnfitz -- don't lerp animation across model changes
|
||||
}
|
||||
else if (model && model->synctype == ST_FRAMETIME && ent->frame != ent->netstate.frame)
|
||||
ent->syncbase = -cl.time;
|
||||
ent->frame = ent->netstate.frame;
|
||||
|
||||
if ( forcelink )
|
||||
{ // didn't have an update last message
|
||||
|
|
|
@ -1285,6 +1285,7 @@ void Mod_LoadIQMModel (qmodel_t *mod, const void *buffer)
|
|||
mod->flags = LittleLong (pinheader->flags);
|
||||
|
||||
|
||||
mod->synctype = ST_FRAMETIME; //keep IQM animations synced to when .frame is changed. framegroups are otherwise not very useful.
|
||||
mod->type = mod_alias;
|
||||
|
||||
Mod_CalcAliasBounds (outhdr); //johnfitz
|
||||
|
|
|
@ -357,7 +357,7 @@ typedef struct {
|
|||
int numverts;
|
||||
int numtris;
|
||||
int numframes;
|
||||
synctype_t synctype;
|
||||
// synctype_t synctype;
|
||||
int flags;
|
||||
float size;
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
// must match definition in spritegn.h
|
||||
#ifndef SYNCTYPE_T
|
||||
#define SYNCTYPE_T
|
||||
typedef enum {ST_SYNC=0, ST_RAND } synctype_t;
|
||||
typedef enum {ST_SYNC=0, ST_RAND, ST_FRAMETIME/*sync to when .frame changes*/ } synctype_t;
|
||||
#endif
|
||||
|
||||
typedef enum { ALIAS_SINGLE=0, ALIAS_GROUP } aliasframetype_t;
|
||||
|
|
|
@ -746,8 +746,11 @@ void R_SetupAliasFrame (aliashdr_t *paliashdr, int frame, lerpdata_t *lerpdata)
|
|||
|
||||
if (numposes > 1)
|
||||
{
|
||||
e->lerptime = paliashdr->frames[frame].interval;
|
||||
posenum += (int)(cl.time / e->lerptime) % numposes;
|
||||
float time = cl.time + e->syncbase; //Spike: Readded syncbase
|
||||
if (time < 0)
|
||||
time = 0; //just in case...
|
||||
e->lerptime = paliashdr->frames[frame].interval; //FIXME: no per-frame intervals
|
||||
posenum += (int)(time / e->lerptime) % numposes;
|
||||
}
|
||||
else
|
||||
e->lerptime = 0.1;
|
||||
|
|
Loading…
Reference in a new issue