Added: search&replace support for non-script arg0str

This commit is contained in:
ZZYZX 2017-02-25 10:31:25 +02:00
parent e7ed533e3a
commit 1a8b9d404f
4 changed files with 64 additions and 53 deletions

View file

@ -30,6 +30,6 @@ using CodeImp.DoomBuilder;
// Build Number
// Revision
//
[assembly: AssemblyVersion("2.3.0.2913")]
[assembly: AssemblyVersion("2.3.0.2915")]
[assembly: NeutralResourcesLanguageAttribute("en")]
[assembly: AssemblyHash("5ff54ab")]
[assembly: AssemblyHash("e7ed533")]

View file

@ -105,13 +105,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
int i = 1;
//mxd. Named script search support...
if(General.Map.UDMF && Array.IndexOf(GZGeneral.ACS_SPECIALS, replaceaction) != -1)
if(General.Map.UDMF)
{
string possiblescriptname = replaceparts[1].Trim().Replace("\"", "").ToLowerInvariant();
string possiblescriptname = replaceparts[1].Trim();
int tmp;
if(!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
replacearg0str = possiblescriptname;
replacearg0str = possiblescriptname.Replace("\"", "");
i = 2;
}
}
@ -141,22 +141,26 @@ namespace CodeImp.DoomBuilder.BuilderModes
int[] args = null;
string arg0str = string.Empty; //mxd
//parse the arg values out
if(parts.Length > 1)
bool isacs = Array.IndexOf(GZGeneral.ACS_SPECIALS, action) != -1;
//parse the arg values out
if (parts.Length > 1)
{
args = new[] { int.MinValue, int.MinValue, int.MinValue, int.MinValue, int.MinValue };
int i = 1;
//mxd. Named script search support...
if(General.Map.UDMF && Array.IndexOf(GZGeneral.ACS_SPECIALS, action) != -1)
//mxd. Named script search support...
if (General.Map.UDMF)
{
string possiblescriptname = parts[1].Trim().Replace("\"", "").ToLowerInvariant();
int tmp;
if(!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
arg0str = possiblescriptname;
i = 2;
}
// [ZZ] edit: we can enclose number with "" to signify a named script called "1".
// this is achieved by trying to parse the number before removing "'s.
string possiblescriptname = parts[1].Trim();
int tmp;
if (!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
arg0str = possiblescriptname.Replace("\"", "").ToLowerInvariant();
i = 2;
}
}
for(; i < parts.Length && i < args.Length + 1; i++)
@ -244,16 +248,19 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(match)
{
// Replace
if(replace)
// Replace
LinedefActionInfo info = General.Map.Config.GetLinedefActionInfo(l.Action);
if (replace)
{
l.Action = replaceaction;
info = General.Map.Config.GetLinedefActionInfo(l.Action);
//mxd. Replace args as well?
if(replaceargs != null)
//mxd. Replace args as well?
if (replaceargs != null)
{
int i = 0;
if(!string.IsNullOrEmpty(replacearg0str))
if(!string.IsNullOrEmpty(replacearg0str) && info.Args[0].Str) // [ZZ] make sure that arg0str is supported for this special.
{
l.Fields["arg0str"] = new UniValue(UniversalType.String, replacearg0str);
i = 1;
@ -267,7 +274,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
// Add to list
LinedefActionInfo info = General.Map.Config.GetLinedefActionInfo(l.Action);
if(!info.IsNull)
objs.Add(new FindReplaceObject(l, "Linedef " + l.Index + " (" + info.Title + argtext + ")"));
else

View file

@ -111,19 +111,19 @@ namespace CodeImp.DoomBuilder.BuilderModes
replaceargs = new[] { int.MinValue, int.MinValue, int.MinValue, int.MinValue, int.MinValue };
int i = 1;
//mxd. Named script search support...
if(General.Map.UDMF && Array.IndexOf(GZGeneral.ACS_SPECIALS, replaceaction) != -1)
{
string possiblescriptname = replaceparts[1].Trim().Replace("\"", "").ToLowerInvariant();
int tmp;
if(!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
replacearg0str = possiblescriptname;
i = 2;
}
}
//mxd. Named script search support...
if (General.Map.UDMF)
{
string possiblescriptname = replaceparts[1].Trim();
int tmp;
if (!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
replacearg0str = possiblescriptname.Replace("\"", "");
i = 2;
}
}
for(; i < replaceparts.Length && i < replaceargs.Length + 1; i++)
for (; i < replaceparts.Length && i < replaceargs.Length + 1; i++)
{
int argout;
if(replaceparts[i].Trim() == "*") continue; //mxd. Any arg value support
@ -154,19 +154,21 @@ namespace CodeImp.DoomBuilder.BuilderModes
args = new[] { int.MinValue, int.MinValue, int.MinValue, int.MinValue, int.MinValue };
int i = 1;
//mxd. Named script search support...
if(General.Map.UDMF && Array.IndexOf(GZGeneral.ACS_SPECIALS, action) != -1)
{
string possiblescriptname = parts[1].Trim().Replace("\"", "").ToLowerInvariant();
int tmp;
if(!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
arg0str = possiblescriptname;
i = 2;
}
}
//mxd. Named script search support...
if (General.Map.UDMF)
{
// [ZZ] edit: we can enclose number with "" to signify a named script called "1".
// this is achieved by trying to parse the number before removing "'s.
string possiblescriptname = parts[1].Trim();
int tmp;
if (!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
arg0str = possiblescriptname.Replace("\"", "").ToLowerInvariant();
i = 2;
}
}
for(; i < parts.Length && i < args.Length + 1; i++)
for (; i < parts.Length && i < args.Length + 1; i++)
{
int argout;
if(parts[i].Trim() == "*") continue; //mxd. Any arg value support
@ -248,16 +250,20 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(match)
{
// Replace
if(replace)
// Replace
ThingTypeInfo ti = General.Map.Data.GetThingInfo(t.Type);
if (replace)
{
t.Action = replaceaction;
LinedefActionInfo info = (t.Action > 0) ? General.Map.Config.GetLinedefActionInfo(t.Action) : null;
ArgumentInfo[] arginfo = (info != null) ? info.Args : ti.Args;
//mxd. Replace args as well?
if(replaceargs != null)
//mxd. Replace args as well?
if (replaceargs != null)
{
int i = 0;
if(!string.IsNullOrEmpty(replacearg0str))
if(!string.IsNullOrEmpty(replacearg0str) && arginfo[0].Str)
{
t.Fields["arg0str"] = new UniValue(UniversalType.String, replacearg0str);
i = 1;
@ -271,7 +277,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
// Add to list
ThingTypeInfo ti = General.Map.Data.GetThingInfo(t.Type);
objs.Add(new FindReplaceObject(t, "Thing " + t.Index + " (" + ti.Title + argtext + ")"));
}
}

View file

@ -29,5 +29,5 @@ using System.Resources;
// Build Number
// Revision
//
[assembly: AssemblyVersion("2.3.0.2913")]
[assembly: AssemblyVersion("2.3.0.2915")]
[assembly: NeutralResourcesLanguageAttribute("en")]