mirror of
https://github.com/ZDoom/Raze.git
synced 2025-06-01 09:42:27 +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)
|
void markTileForPrecache(int tilenum, int palnum)
|
||||||
{
|
{
|
||||||
int i, j;
|
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;
|
i = tilenum - picanm[tilenum].num;
|
||||||
j = tilenum;
|
j = tilenum;
|
||||||
|
@ -110,7 +110,7 @@ void markTileForPrecache(int tilenum, int palnum)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
i = tilenum;
|
i = tilenum;
|
||||||
j = tilenum + picanm[tilenum].num;
|
j = tilenum + picanm[tilenum].num * ((picanm[tilenum].type() == PICANM_ANIMTYPE_OSC) ? 2 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (; i <= j; i++)
|
for (; i <= j; i++)
|
||||||
|
|
|
@ -818,9 +818,9 @@ int tileAnimateOfs(int tilenum, int randomize)
|
||||||
frametime += Bcrc32(&randomize, 2, 0);
|
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:
|
case PICANM_ANIMTYPE_FWD:
|
||||||
return curframe % (framecount + 1);
|
return curframe % (framecount + 1);
|
||||||
|
@ -869,7 +869,7 @@ void tileUpdateAnimations()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAXTILES; i++)
|
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);
|
int j = i + tileAnimateOfs(i);
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,17 @@ struct picanm_t
|
||||||
extra = sf = 0;
|
extra = sf = 0;
|
||||||
num = 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);
|
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;
|
auto& tile = *tileptr;
|
||||||
|
|
||||||
if (picanm[tile].sf & PICANM_ANIMTYPE_MASK)
|
if (picanm[tile].type())
|
||||||
tile += tileAnimateOfs(tile, randomize);
|
tile += tileAnimateOfs(tile, randomize);
|
||||||
|
|
||||||
if (mayrotate && RotTile(tile).newtile != -1)
|
if (mayrotate && RotTile(tile).newtile != -1)
|
||||||
|
|
|
@ -62,23 +62,7 @@ void tilePrecacheTile(int nTile, int nType, int palette)
|
||||||
}
|
}
|
||||||
while (n--)
|
while (n--)
|
||||||
{
|
{
|
||||||
if (picanm[nTile].sf & PICANM_ANIMTYPE_MASK)
|
markTileForPrecache(nTile, palette);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
nTile += 1 + picanm[nTile].num;
|
nTile += 1 + picanm[nTile].num;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,29 +42,20 @@ void precache()
|
||||||
{
|
{
|
||||||
int j = sect.ceilingpicnum;
|
int j = sect.ceilingpicnum;
|
||||||
markTileForPrecache(j, sect.ceilingpal);
|
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;
|
j = sect.floorpicnum;
|
||||||
markTileForPrecache(j, sect.floorpal);
|
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)
|
for(auto& wal : wall)
|
||||||
{
|
{
|
||||||
int j = wal.picnum;
|
int j = wal.picnum;
|
||||||
markTileForPrecache(j, wal.pal);
|
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())
|
if (wal.twoSided())
|
||||||
{
|
{
|
||||||
j = wal.overpicnum;
|
j = wal.overpicnum;
|
||||||
markTileForPrecache(j, wal.pal);
|
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;
|
int j = ac->spr.picnum;
|
||||||
markTileForPrecache(j, ac->spr.pal);
|
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();
|
precacheMarkedTiles();
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,54 +80,19 @@ void precacheMap(void)
|
||||||
j = sec.ceilingpicnum;
|
j = sec.ceilingpicnum;
|
||||||
markTileForPrecache(j, sec.ceilingpal);
|
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;
|
j = sec.floorpicnum;
|
||||||
|
|
||||||
markTileForPrecache(j, sec.floorpal);
|
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)
|
for (auto& wal : wall)
|
||||||
{
|
{
|
||||||
j = wal.picnum;
|
j = wal.picnum;
|
||||||
|
|
||||||
markTileForPrecache(j, wal.pal);
|
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)
|
if (wal.overpicnum > 0 && wal.overpicnum < MAXTILES)
|
||||||
{
|
{
|
||||||
j = wal.overpicnum;
|
j = wal.overpicnum;
|
||||||
markTileForPrecache(j, wal.pal);
|
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…
Add table
Add a link
Reference in a new issue