mirror of
https://github.com/ZDoom/Raze.git
synced 2025-03-19 15:31:57 +00:00
- animation precaching cleanup.
No need to handle animations on the,game side. markTileForPrecache already handles this - now also for oscillating animations.
This commit is contained in:
parent
4f2170655c
commit
738c133d05
6 changed files with 18 additions and 69 deletions
|
@ -102,7 +102,7 @@ TMap<int64_t, bool> cachemap;
|
|||
void markTileForPrecache(int tilenum, int palnum)
|
||||
{
|
||||
int i, j;
|
||||
if ((picanm[tilenum].sf & PICANM_ANIMTYPE_MASK) == PICANM_ANIMTYPE_BACK)
|
||||
if (picanm[tilenum].type() == PICANM_ANIMTYPE_BACK)
|
||||
{
|
||||
i = tilenum - picanm[tilenum].num;
|
||||
j = tilenum;
|
||||
|
@ -110,7 +110,7 @@ void markTileForPrecache(int tilenum, int palnum)
|
|||
else
|
||||
{
|
||||
i = tilenum;
|
||||
j = tilenum + picanm[tilenum].num;
|
||||
j = tilenum + picanm[tilenum].num * ((picanm[tilenum].type() == PICANM_ANIMTYPE_OSC) ? 2 : 1);
|
||||
}
|
||||
|
||||
for (; i <= j; i++)
|
||||
|
|
|
@ -818,9 +818,9 @@ int tileAnimateOfs(int tilenum, int randomize)
|
|||
frametime += Bcrc32(&randomize, 2, 0);
|
||||
}
|
||||
|
||||
int curframe = (frametime & 0x7fffffff) >> (picanm[tilenum].sf & PICANM_ANIMSPEED_MASK);
|
||||
int curframe = (frametime & 0x7fffffff) >> (picanm[tilenum].speed());
|
||||
|
||||
switch (picanm[tilenum].sf & PICANM_ANIMTYPE_MASK)
|
||||
switch (picanm[tilenum].type())
|
||||
{
|
||||
case PICANM_ANIMTYPE_FWD:
|
||||
return curframe % (framecount + 1);
|
||||
|
@ -869,7 +869,7 @@ void tileUpdateAnimations()
|
|||
{
|
||||
for (int i = 0; i < MAXTILES; i++)
|
||||
{
|
||||
if (TileFiles.tiledata[i].picanm.sf & PICANM_ANIMTYPE_MASK)
|
||||
if (TileFiles.tiledata[i].picanm.type())
|
||||
{
|
||||
int j = i + tileAnimateOfs(i);
|
||||
|
||||
|
|
|
@ -61,6 +61,17 @@ struct picanm_t
|
|||
extra = sf = 0;
|
||||
num = 0;
|
||||
}
|
||||
|
||||
int speed()
|
||||
{
|
||||
return sf & PICANM_ANIMSPEED_MASK;
|
||||
}
|
||||
|
||||
int type()
|
||||
{
|
||||
return sf & PICANM_ANIMTYPE_MASK;
|
||||
}
|
||||
|
||||
};
|
||||
picanm_t tileConvertAnimFormat(int32_t const picanmdisk, int* lo, int* to);
|
||||
|
||||
|
@ -467,7 +478,7 @@ inline void tileUpdatePicnum(int* const tileptr, bool mayrotate = false, int ran
|
|||
{
|
||||
auto& tile = *tileptr;
|
||||
|
||||
if (picanm[tile].sf & PICANM_ANIMTYPE_MASK)
|
||||
if (picanm[tile].type())
|
||||
tile += tileAnimateOfs(tile, randomize);
|
||||
|
||||
if (mayrotate && RotTile(tile).newtile != -1)
|
||||
|
|
|
@ -62,23 +62,7 @@ void tilePrecacheTile(int nTile, int nType, int palette)
|
|||
}
|
||||
while (n--)
|
||||
{
|
||||
if (picanm[nTile].sf & PICANM_ANIMTYPE_MASK)
|
||||
{
|
||||
for (int frame = picanm[nTile].num; frame >= 0; frame--)
|
||||
{
|
||||
int tile;
|
||||
if ((picanm[nTile].sf & PICANM_ANIMTYPE_MASK) == PICANM_ANIMTYPE_BACK)
|
||||
tile = nTile - frame;
|
||||
else
|
||||
tile = nTile + frame;
|
||||
|
||||
markTileForPrecache(tile, palette);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
markTileForPrecache(nTile, palette);
|
||||
}
|
||||
markTileForPrecache(nTile, palette);
|
||||
nTile += 1 + picanm[nTile].num;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,29 +42,20 @@ void precache()
|
|||
{
|
||||
int j = sect.ceilingpicnum;
|
||||
markTileForPrecache(j, sect.ceilingpal);
|
||||
if (picanm[j].sf & PICANM_ANIMTYPE_MASK)
|
||||
for (int k = 1; k <= picanm[j].num; k++) markTileForPrecache(j + k, sect.ceilingpal);
|
||||
|
||||
j = sect.floorpicnum;
|
||||
markTileForPrecache(j, sect.floorpal);
|
||||
if (picanm[j].sf & PICANM_ANIMTYPE_MASK)
|
||||
for (int k = 1; k <= picanm[j].num; k++) markTileForPrecache(j + k, sect.floorpal);
|
||||
}
|
||||
|
||||
for(auto& wal : wall)
|
||||
{
|
||||
int j = wal.picnum;
|
||||
markTileForPrecache(j, wal.pal);
|
||||
if (picanm[j].sf & PICANM_ANIMTYPE_MASK)
|
||||
for (int k = 1; k <= picanm[j].num; k++) markTileForPrecache(j + k, wal.pal);
|
||||
|
||||
if (wal.twoSided())
|
||||
{
|
||||
j = wal.overpicnum;
|
||||
markTileForPrecache(j, wal.pal);
|
||||
if (picanm[j].sf & PICANM_ANIMTYPE_MASK)
|
||||
for (int k = 1; k <= picanm[j].num; k++) markTileForPrecache(j + k, wal.pal);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -73,8 +64,6 @@ void precache()
|
|||
{
|
||||
int j = ac->spr.picnum;
|
||||
markTileForPrecache(j, ac->spr.pal);
|
||||
if (picanm[j].sf & PICANM_ANIMTYPE_MASK)
|
||||
for (int k = 1; k <= picanm[j].num; k++) markTileForPrecache(j + k, ac->spr.pal);
|
||||
}
|
||||
precacheMarkedTiles();
|
||||
}
|
||||
|
|
|
@ -80,54 +80,19 @@ void precacheMap(void)
|
|||
j = sec.ceilingpicnum;
|
||||
markTileForPrecache(j, sec.ceilingpal);
|
||||
|
||||
if ((picanm[j].sf & PICANM_ANIMTYPE_MASK) >> PICANM_ANIMTYPE_SHIFT)
|
||||
{
|
||||
for (i = 1; i <= picanm[j].num; i++)
|
||||
{
|
||||
markTileForPrecache(j + i, sec.ceilingpal);
|
||||
}
|
||||
}
|
||||
|
||||
j = sec.floorpicnum;
|
||||
|
||||
markTileForPrecache(j, sec.floorpal);
|
||||
|
||||
if ((picanm[j].sf & PICANM_ANIMTYPE_MASK) >> PICANM_ANIMTYPE_SHIFT)
|
||||
{
|
||||
for (i = 1; i <= picanm[j].num; i++)
|
||||
{
|
||||
markTileForPrecache(j + i, sec.floorpal);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for (auto& wal : wall)
|
||||
{
|
||||
j = wal.picnum;
|
||||
|
||||
markTileForPrecache(j, wal.pal);
|
||||
|
||||
if ((picanm[j].sf & PICANM_ANIMTYPE_MASK) >> PICANM_ANIMTYPE_SHIFT)
|
||||
{
|
||||
for (i = 1; i <= picanm[j].num; i++)
|
||||
{
|
||||
markTileForPrecache(j + i, wal.pal);
|
||||
}
|
||||
}
|
||||
|
||||
if (wal.overpicnum > 0 && wal.overpicnum < MAXTILES)
|
||||
{
|
||||
j = wal.overpicnum;
|
||||
markTileForPrecache(j, wal.pal);
|
||||
|
||||
if ((picanm[j].sf & PICANM_ANIMTYPE_MASK) >> PICANM_ANIMTYPE_SHIFT)
|
||||
{
|
||||
for (i = 1; i <= picanm[j].num; i++)
|
||||
{
|
||||
markTileForPrecache(j + i, wal.pal);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue