Added weapon interpolation.

This commit is contained in:
Leonard 2015-08-19 15:59:54 +02:00
commit 86e9504d04
8 changed files with 254 additions and 4 deletions

View file

@ -316,6 +316,7 @@ player_t::player_t()
memset (&cmd, 0, sizeof(cmd));
memset (frags, 0, sizeof(frags));
memset (psprites, 0, sizeof(psprites));
memset (pspinterp, 0, sizeof(pspinterp));
}
player_t &player_t::operator=(const player_t &p)
@ -371,6 +372,7 @@ player_t &player_t::operator=(const player_t &p)
fixedcolormap = p.fixedcolormap;
fixedlightlevel = p.fixedlightlevel;
memcpy(psprites, &p.psprites, sizeof(psprites));
memcpy(pspinterp, &p.pspinterp, sizeof(pspinterp));
morphTics = p.morphTics;
MorphedPlayerClass = p.MorphedPlayerClass;
MorphStyle = p.MorphStyle;
@ -435,6 +437,10 @@ size_t player_t::FixPointers (const DObject *old, DObject *rep)
if (*&ConversationNPC == old) ConversationNPC = replacement, changed++;
if (*&ConversationPC == old) ConversationPC = replacement, changed++;
if (*&MUSINFOactor == old) MUSINFOactor = replacement, changed++;
for (int i = 0; i < NUMPSPRITES; i++)
if (*&pspinterp[i] == old) pspinterp[i] = static_cast<DInterpolation *>(rep), changed++;
return changed;
}
@ -454,6 +460,11 @@ size_t player_t::PropagateMark()
{
GC::Mark(PendingWeapon);
}
for (int i = 0; i < NUMPSPRITES; i++)
{
GC::Mark(pspinterp[i]);
}
return sizeof(*this);
}
@ -3049,7 +3060,11 @@ void player_t::Serialize (FArchive &arc)
for (i = 0; i < MAXPLAYERS; i++)
arc << frags[i];
for (i = 0; i < NUMPSPRITES; i++)
{
arc << psprites[i];
if (SaveVersion >= 4525)
arc << pspinterp[i];
}
arc << CurrentPlayerClass;