- added tileGetTextureID and tested it with Blood's mirror/portal setup code.

This commit is contained in:
Christoph Oelckers 2022-12-06 08:52:41 +01:00
parent bfef616981
commit f4bda94dad
2 changed files with 20 additions and 4 deletions

View file

@ -304,6 +304,7 @@ struct BuildTiles
TArray<FString> addedArt; TArray<FString> addedArt;
TArray<FString> maptilesadded; TArray<FString> maptilesadded;
TMap<FName, int> nametoindex; TMap<FName, int> nametoindex;
TMap<int, int> textotile;
bool locked; // if this is true, no more tile modifications are allowed. bool locked; // if this is true, no more tile modifications are allowed.
void addName(const char* name, int index) void addName(const char* name, int index)
@ -314,6 +315,14 @@ struct BuildTiles
void lock() void lock()
{ {
locked = true; locked = true;
// Now we can set up the reverse map.
for (unsigned i = 0; i < MAXTILES; i++)
{
if (tiledata[i].texture != Placeholder)
{
textotile.Insert(tiledata[i].texture->GetID().GetIndex(), i);
}
}
} }
int tileForName(const char* name) int tileForName(const char* name)
@ -468,6 +477,12 @@ inline FGameTexture* tileGetTexture(int tile, bool animate = false)
return TileFiles.tiledata[tile].texture; return TileFiles.tiledata[tile].texture;
} }
inline FTextureID tileGetTextureID(int tile)
{
if (tile < 0 || tile >= MAXTILES) return FNullTextureID();
return TileFiles.tiledata[tile].texture->GetID();
}
void tileUpdateAnimations(); void tileUpdateAnimations();
struct TileImport struct TileImport

View file

@ -43,6 +43,7 @@ MIRROR mirror[16]; // only needed by Polymost.
void InitMirrors(void) void InitMirrors(void)
{ {
auto mirrortile = tileGetTextureID(504);
mirrorcnt = 0; mirrorcnt = 0;
portalClear(); portalClear();
@ -51,7 +52,7 @@ void InitMirrors(void)
auto pWalli = &wall[i]; auto pWalli = &wall[i];
if (mirrorcnt == 16) if (mirrorcnt == 16)
break; break;
if (pWalli->overpicnum == 504) if (pWalli->overtexture() == mirrortile)
{ {
if (pWalli->extra > 0 && pWalli->type == kWallStack) if (pWalli->extra > 0 && pWalli->type == kWallStack)
{ {
@ -88,7 +89,7 @@ void InitMirrors(void)
} }
continue; continue;
} }
if (pWalli->wallpicnum == 504) if (pWalli->walltexture() == mirrortile)
{ {
mirror[mirrorcnt].link = i; mirror[mirrorcnt].link = i;
mirror[mirrorcnt].mynum = i; mirror[mirrorcnt].mynum = i;
@ -105,7 +106,7 @@ void InitMirrors(void)
break; break;
auto secti = &sector[i]; auto secti = &sector[i];
if (secti->floorpicnum == 504) if (secti->floortexture() == mirrortile)
{ {
auto link = barrier_cast<DBloodActor*>(secti->upperLink); auto link = barrier_cast<DBloodActor*>(secti->upperLink);
if (link == nullptr) if (link == nullptr)
@ -116,7 +117,7 @@ void InitMirrors(void)
auto sectj = link2->sector(); auto sectj = link2->sector();
int j = sectindex(sectj); int j = sectindex(sectj);
if (sectj->ceilingpicnum != 504) if (sectj->ceilingtexture() != mirrortile)
I_Error("Lower link sector %d doesn't have mirror picnum\n", j); I_Error("Lower link sector %d doesn't have mirror picnum\n", j);
mirror[mirrorcnt].type = 2; mirror[mirrorcnt].type = 2;
mirror[mirrorcnt].diff = link2->spr.pos - link->spr.pos; mirror[mirrorcnt].diff = link2->spr.pos - link->spr.pos;