Fixed a case when TEXTRES image was trying to load itself as a patch, which resulted in an infinite loop.

Cosmetic: standardized the way resource names are displayed in warning/error messages in the Errors and Warnings window.
This commit is contained in:
MaxED 2016-02-06 23:54:58 +00:00
parent 4c60662374
commit db42e17a86
3 changed files with 37 additions and 10 deletions

View file

@ -33,6 +33,7 @@ namespace CodeImp.DoomBuilder.Data
// Members // Members
public int type; public int type;
public string location; public string location;
private string name; //mxd
public bool option1; public bool option1;
public bool option2; public bool option2;
public bool notfortesting; public bool notfortesting;
@ -46,6 +47,7 @@ namespace CodeImp.DoomBuilder.Data
this.option1 = option1; this.option1 = option1;
this.option2 = option2; this.option2 = option2;
this.notfortesting = notfortesting; this.notfortesting = notfortesting;
this.name = string.Empty; //mxd
} }
// This displays the struct as string // This displays the struct as string
@ -55,6 +57,31 @@ namespace CodeImp.DoomBuilder.Data
return location; return location;
} }
//mxd. This returns short location name
public string GetShortName()
{
if(string.IsNullOrEmpty(name))
{
// Make shorter name for display purposes
switch(type)
{
case RESOURCE_DIRECTORY:
name = location.Substring(location.LastIndexOf(Path.DirectorySeparatorChar) + 1);
break;
case RESOURCE_WAD:
case RESOURCE_PK3:
name = Path.GetFileName(location);
break;
default:
throw new NotImplementedException("Unknown location type: " + type);
}
}
return name;
}
// This compares two locations // This compares two locations
public int CompareTo(DataLocation other) public int CompareTo(DataLocation other)
{ {
@ -88,7 +115,7 @@ namespace CodeImp.DoomBuilder.Data
break; break;
default: default:
throw new NotImplementedException("ResourceListEditor.FixedResourceLocationList: got unknown location type: " + type); throw new NotImplementedException("Unknown location type: " + type);
} }
return true; return true;

View file

@ -1513,7 +1513,7 @@ namespace CodeImp.DoomBuilder.Data
{ {
// Parse the data // Parse the data
group.Value.Seek(0, SeekOrigin.Begin); group.Value.Seek(0, SeekOrigin.Begin);
decorate.Parse(group.Value, group.Key, true); decorate.Parse(group.Value, Path.Combine(currentreader.Location.GetShortName(), group.Key), true);
//mxd. DECORATE lumps are interdepandable. Can't carry on... //mxd. DECORATE lumps are interdepandable. Can't carry on...
if(decorate.HasError) if(decorate.HasError)
@ -1765,7 +1765,7 @@ namespace CodeImp.DoomBuilder.Data
foreach(KeyValuePair<string, Stream> group in decostreams) foreach(KeyValuePair<string, Stream> group in decostreams)
{ {
// Parse this data // Parse this data
parser.Parse(group.Value, Path.Combine(currentreader.Location.location, group.Key), false); parser.Parse(group.Value, group.Key, false);
//mxd. DECORATE lumps are interdepandable. Can't carry on... //mxd. DECORATE lumps are interdepandable. Can't carry on...
if(parser.HasError) if(parser.HasError)
@ -1909,7 +1909,7 @@ namespace CodeImp.DoomBuilder.Data
foreach(KeyValuePair<string, Stream> group in streams) foreach(KeyValuePair<string, Stream> group in streams)
{ {
// Parse the data // Parse the data
if(parser.Parse(group.Value, Path.Combine(currentreader.Location.location, group.Key), true)) if(parser.Parse(group.Value, Path.Combine(currentreader.Location.GetShortName(), group.Key), true))
{ {
foreach(KeyValuePair<string, ModelData> g in parser.Entries) foreach(KeyValuePair<string, ModelData> g in parser.Entries)
{ {
@ -1992,7 +1992,7 @@ namespace CodeImp.DoomBuilder.Data
KeyValuePair<string, Stream> group = dr.GetVoxeldefData(); KeyValuePair<string, Stream> group = dr.GetVoxeldefData();
if(group.Value != null) if(group.Value != null)
{ {
if(parser.Parse(group.Value, group.Key, true)) if(parser.Parse(group.Value, Path.Combine(currentreader.Location.GetShortName(), group.Key), true))
{ {
foreach(KeyValuePair<string, ModelData> entry in parser.Entries) foreach(KeyValuePair<string, ModelData> entry in parser.Entries)
{ {
@ -2049,7 +2049,7 @@ namespace CodeImp.DoomBuilder.Data
foreach(KeyValuePair<string, Stream> group in streams) foreach(KeyValuePair<string, Stream> group in streams)
{ {
parser.Parse(group.Value, group.Key, false); parser.Parse(group.Value, Path.Combine(currentreader.Location.GetShortName(), group.Key), false);
// Gldefs can be interdependable. Can't carry on // Gldefs can be interdependable. Can't carry on
if(parser.HasError) if(parser.HasError)
@ -2149,7 +2149,7 @@ namespace CodeImp.DoomBuilder.Data
foreach(KeyValuePair<string, Stream> group in streams) foreach(KeyValuePair<string, Stream> group in streams)
{ {
// Parse the data // Parse the data
parser.Parse(group.Value, group.Key, true); parser.Parse(group.Value, Path.Combine(currentreader.Location.GetShortName(), group.Key), true);
// Report errors? // Report errors?
if(parser.HasError) parser.LogError(); if(parser.HasError) parser.LogError();
@ -2177,7 +2177,7 @@ namespace CodeImp.DoomBuilder.Data
// Parse the data // Parse the data
foreach(KeyValuePair<string, Stream> group in streams) foreach(KeyValuePair<string, Stream> group in streams)
{ {
parser.Parse(group.Value, group.Key, true); parser.Parse(group.Value, Path.Combine(currentreader.Location.GetShortName(), group.Key), true);
// Report errors? // Report errors?
if(parser.HasError) parser.LogError(); if(parser.HasError) parser.LogError();
@ -2203,7 +2203,7 @@ namespace CodeImp.DoomBuilder.Data
// Parse the data // Parse the data
foreach(KeyValuePair<string, Stream> group in streams) foreach(KeyValuePair<string, Stream> group in streams)
{ {
parser.Parse(group.Value, group.Key, true); parser.Parse(group.Value, Path.Combine(currentreader.Location.GetShortName(), group.Key), true);
// Report errors? // Report errors?
if(parser.HasError) parser.LogError(); if(parser.HasError) parser.LogError();

View file

@ -200,7 +200,7 @@ namespace CodeImp.DoomBuilder.Data
if(General.Map.Config.MixTexturesFlats) if(General.Map.Config.MixTexturesFlats)
{ {
ImageData img = General.Map.Data.GetTextureImage(p.lumpname); ImageData img = General.Map.Data.GetTextureImage(p.lumpname);
if(!(img is UnknownImage)) if(!(img is UnknownImage) && img != this)
{ {
if(!img.IsImageLoaded) img.LoadImage(); if(!img.IsImageLoaded) img.LoadImage();