- fixed: Texture precaching from MAPINFO was broken

The code assumed that it had access to the texture manager but that gets initialized after MAPINFO, which means that MAPINFO can only store the texture names and let the precaching code resolve the actual textures.
This commit is contained in:
Christoph Oelckers 2015-12-02 22:31:27 +01:00
parent 38df0665e3
commit 81f521fe56
3 changed files with 5 additions and 11 deletions

View file

@ -339,7 +339,7 @@ struct level_info_t
TArray<FSpecialAction> specialactions; TArray<FSpecialAction> specialactions;
TArray<FSoundID> PrecacheSounds; TArray<FSoundID> PrecacheSounds;
TArray<FTextureID> PrecacheTextures; TArray<FString> PrecacheTextures;
level_info_t() level_info_t()
{ {

View file

@ -1077,15 +1077,8 @@ DEFINE_MAP_OPTION(PrecacheTextures, true)
do do
{ {
parse.sc.MustGetString(); parse.sc.MustGetString();
FTextureID tex = TexMan.CheckForTexture(parse.sc.String, FTexture::TEX_Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_TryAny|FTextureManager::TEXMAN_ReturnFirst); //the texture manager is not initialized here so all we can do is store the texture's name.
if (!tex.isValid()) info->PrecacheTextures.Push(parse.sc.String);
{
parse.sc.ScriptMessage("Unknown texture \"%s\"", parse.sc.String);
}
else
{
info->PrecacheTextures.Push(tex);
}
} while (parse.sc.CheckString(",")); } while (parse.sc.CheckString(","));
} }

View file

@ -1246,7 +1246,8 @@ void FTextureManager::PrecacheLevel (void)
for (unsigned i = 0; i < level.info->PrecacheTextures.Size(); i++) for (unsigned i = 0; i < level.info->PrecacheTextures.Size(); i++)
{ {
hitlist[level.info->PrecacheTextures[i].GetIndex()] |= FTextureManager::HIT_Wall; FTextureID tex = TexMan.CheckForTexture(level.info->PrecacheTextures[i], FTexture::TEX_Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_TryAny|FTextureManager::TEXMAN_ReturnFirst);
if (tex.Exists()) hitlist[tex.GetIndex()] |= FTextureManager::HIT_Wall;
} }
for (int i = cnt - 1; i >= 0; i--) for (int i = cnt - 1; i >= 0; i--)