mirror of
https://git.do.srb2.org/STJr/ZoneBuilder.git
synced 2024-11-12 23:54:10 +00:00
Fixed: 'forbidden' lumps are not supposed to count towards matching while detecting map type
This commit is contained in:
parent
7cb80cf9f2
commit
c6a2288c22
2 changed files with 22 additions and 13 deletions
|
@ -31,6 +31,7 @@ namespace CodeImp.DoomBuilder.Config
|
||||||
public readonly bool NodeBuild;
|
public readonly bool NodeBuild;
|
||||||
public readonly bool AllowEmpty;
|
public readonly bool AllowEmpty;
|
||||||
public readonly bool ScriptBuild; //mxd
|
public readonly bool ScriptBuild; //mxd
|
||||||
|
public readonly bool Forbidden; // [ZZ]
|
||||||
internal readonly ScriptConfiguration Script;
|
internal readonly ScriptConfiguration Script;
|
||||||
|
|
||||||
// Construct from IDictionary
|
// Construct from IDictionary
|
||||||
|
@ -44,6 +45,7 @@ namespace CodeImp.DoomBuilder.Config
|
||||||
this.NodeBuild = cfg.ReadSetting("maplumpnames." + name + ".nodebuild", false);
|
this.NodeBuild = cfg.ReadSetting("maplumpnames." + name + ".nodebuild", false);
|
||||||
this.AllowEmpty = cfg.ReadSetting("maplumpnames." + name + ".allowempty", false);
|
this.AllowEmpty = cfg.ReadSetting("maplumpnames." + name + ".allowempty", false);
|
||||||
this.ScriptBuild = cfg.ReadSetting("maplumpnames." + name + ".scriptbuild", false); //mxd
|
this.ScriptBuild = cfg.ReadSetting("maplumpnames." + name + ".scriptbuild", false); //mxd
|
||||||
|
this.Forbidden = cfg.ReadSetting("maplumpnames." + name + ".forbidden", false); //mxd
|
||||||
string scriptconfig = cfg.ReadSetting("maplumpnames." + name + ".script", "");
|
string scriptconfig = cfg.ReadSetting("maplumpnames." + name + ".script", "");
|
||||||
|
|
||||||
// Find script configuration
|
// Find script configuration
|
||||||
|
@ -60,6 +62,6 @@ namespace CodeImp.DoomBuilder.Config
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1455,19 +1455,19 @@ namespace CodeImp.DoomBuilder
|
||||||
// try to detect the format used for this map.
|
// try to detect the format used for this map.
|
||||||
// if more than one format matches, do... idk what actually.
|
// if more than one format matches, do... idk what actually.
|
||||||
// todo: move this code out and call it something like DetectMapConfiguration
|
// todo: move this code out and call it something like DetectMapConfiguration
|
||||||
List<List<string>> trylists = new List<List<string>>();
|
List<List<MapLumpInfo>> trylists = new List<List<MapLumpInfo>>();
|
||||||
foreach (ConfigurationInfo cinfo in General.Configs)
|
foreach (ConfigurationInfo cinfo in General.Configs)
|
||||||
{
|
{
|
||||||
List<string> maplumps = new List<string>();
|
List<MapLumpInfo> maplumps = new List<MapLumpInfo>();
|
||||||
// parse only the map lumps section of the config.
|
// parse only the map lumps section of the config.
|
||||||
Configuration cfg = cinfo.Configuration;
|
Configuration cfg = cinfo.Configuration;
|
||||||
IDictionary dic = cfg.ReadSetting("maplumpnames", new Hashtable());
|
IDictionary dic = cfg.ReadSetting("maplumpnames", new Hashtable());
|
||||||
foreach (string k in dic.Keys)
|
foreach (string k in dic.Keys)
|
||||||
maplumps.Add(k);
|
maplumps.Add(new MapLumpInfo(k, cfg));
|
||||||
|
|
||||||
// check if we already have this lump list. don't duplicate.
|
// check if we already have this lump list. don't duplicate.
|
||||||
bool found = false;
|
bool found = false;
|
||||||
foreach (List<string> ctrylist in trylists)
|
foreach (List<MapLumpInfo> ctrylist in trylists)
|
||||||
{
|
{
|
||||||
if (ctrylist.Count == maplumps.Count &&
|
if (ctrylist.Count == maplumps.Count &&
|
||||||
ctrylist.SequenceEqual(maplumps))
|
ctrylist.SequenceEqual(maplumps))
|
||||||
|
@ -1486,19 +1486,26 @@ namespace CodeImp.DoomBuilder
|
||||||
|
|
||||||
// find the most probable lump list.
|
// find the most probable lump list.
|
||||||
int maxmatches = 0;
|
int maxmatches = 0;
|
||||||
List<string> trylist = null;
|
List<MapLumpInfo> trylist = null;
|
||||||
foreach (List<string> lst in trylists)
|
foreach (List<MapLumpInfo> lst in trylists)
|
||||||
{
|
{
|
||||||
int matches = 0;
|
int matches = 0;
|
||||||
int maxcnt = lst.Count;
|
int maxcnt = lst.Count;
|
||||||
int checkindex = nextindex+1;
|
int checkindex = nextindex+1;
|
||||||
foreach (string lmp in lst)
|
for (int i = 0; i < lst.Count; i++)
|
||||||
{
|
{
|
||||||
if (checkindex >= target.Lumps.Count)
|
if (checkindex >= target.Lumps.Count)
|
||||||
break;
|
break;
|
||||||
bool match = lst.Contains(target.Lumps[checkindex].Name);
|
int mliIdx = lst.FindIndex(e => e.Name == target.Lumps[checkindex].Name);
|
||||||
if (match) matches++;
|
if (mliIdx < 0) break; // stop matching on first non-matching lump
|
||||||
else break; // stop matching on first non-matching lump
|
MapLumpInfo mli = lst[mliIdx];
|
||||||
|
if (mli.Forbidden)
|
||||||
|
{
|
||||||
|
matches = 0;
|
||||||
|
break; // completely stop matching on first forbidden lump - definitely not this configuration
|
||||||
|
}
|
||||||
|
|
||||||
|
matches++;
|
||||||
checkindex++;
|
checkindex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1515,11 +1522,11 @@ namespace CodeImp.DoomBuilder
|
||||||
if (reallyremove)
|
if (reallyremove)
|
||||||
{
|
{
|
||||||
int checkindex = nextindex + 1;
|
int checkindex = nextindex + 1;
|
||||||
foreach (string lmp in trylist)
|
for (int i = 0; i < trylist.Count; i++)
|
||||||
{
|
{
|
||||||
if (checkindex >= target.Lumps.Count)
|
if (checkindex >= target.Lumps.Count)
|
||||||
break;
|
break;
|
||||||
bool match = trylist.Contains(target.Lumps[checkindex].Name);
|
bool match = (trylist.FindIndex(e => e.Name == target.Lumps[checkindex].Name) >= 0);
|
||||||
if (match) target.RemoveAt(checkindex);
|
if (match) target.RemoveAt(checkindex);
|
||||||
else break; // stop deleting on first non-matching lump
|
else break; // stop deleting on first non-matching lump
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue