Wire up remaining AttractMode fields

This commit is contained in:
Matt Nadareski
2020-08-20 21:15:37 -07:00
parent 419ea5ce31
commit d90e9ee8a1
14 changed files with 351 additions and 54 deletions

View File

@@ -99,6 +99,9 @@ namespace SabreTools.Library.DatFiles
Buttons = gameinfo[16],
},
AltName = gameinfo[13],
AltTitle = gameinfo[14],
Source = new Source
{
Index = indexId,
@@ -277,8 +280,8 @@ namespace SabreTools.Library.DatFiles
datItem.GetField(Field.Status, Header.ExcludeFields),
datItem.GetField(Field.DisplayCount, Header.ExcludeFields),
datItem.GetField(Field.DisplayType, Header.ExcludeFields),
string.Empty, // datItem.GetField(Field.AltRomname, Header.ExcludeFields),
string.Empty, // datItem.GetField(Field.AltTitle, Header.ExcludeFields),
datItem.GetField(Field.AltName, Header.ExcludeFields),
datItem.GetField(Field.AltTitle, Header.ExcludeFields),
datItem.GetField(Field.Comment, Header.ExcludeFields),
datItem.GetField(Field.Buttons, Header.ExcludeFields),
};

View File

@@ -665,6 +665,8 @@ namespace SabreTools.Library.DatFiles
long size = -1;
long? areaSize = null;
string name = null,
altName = null,
altTitle = null,
partName = null,
partInterface = null,
areaName = null,
@@ -702,6 +704,8 @@ namespace SabreTools.Library.DatFiles
datItem.Source = new Source { Index = indexId, Name = filename };
datItem.Name = name;
datItem.AltName = altName;
datItem.AltTitle = altTitle;
datItem.PartName = partName;
datItem.PartInterface = partInterface;
datItem.Features = features;
@@ -781,6 +785,14 @@ namespace SabreTools.Library.DatFiles
name = jtr.ReadAsString();
break;
case "alt_romname":
altName = jtr.ReadAsString();
break;
case "alt_title":
altTitle = jtr.ReadAsString();
break;
case "partname":
partName = jtr.ReadAsString();
break;
@@ -1841,6 +1853,16 @@ namespace SabreTools.Library.DatFiles
break;
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.AltName, Header.ExcludeFields)))
{
jtw.WritePropertyName("alt_romname");
jtw.WriteValue(datItem.AltName);
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.AltTitle, Header.ExcludeFields)))
{
jtw.WritePropertyName("alt_title");
jtw.WriteValue(datItem.AltTitle);
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.PartName, Header.ExcludeFields)))
{
jtw.WritePropertyName("partname");

View File

@@ -82,6 +82,8 @@ namespace SabreTools.Library.DatFiles
optional = null,
inverted = null;
string name = null,
altName = null,
altTitle = null,
partName = null,
partInterface = null,
areaName = null,
@@ -425,14 +427,32 @@ namespace SabreTools.Library.DatFiles
#region DatItem
case "DatItem.Type":
itemType = value.AsItemType() ?? ItemType.Rom;
break;
#region Common
case "DatItem.Name":
name = value;
break;
case "DatItem.Type":
itemType = value.AsItemType() ?? ItemType.Rom;
break;
#endregion
#region AttractMode
case "DatItem.AltName":
altName = value;
break;
case "DatItem.AltTitle":
altTitle = value;
break;
#endregion
#region SoftwareList
case "DatItem.PartName":
partName = value;
break;
@@ -464,6 +484,8 @@ namespace SabreTools.Library.DatFiles
break;
#endregion
case "DatItem.Default":
def = value.AsYesNo();
break;
@@ -552,7 +574,7 @@ namespace SabreTools.Library.DatFiles
inverted = value.AsYesNo();
break;
#endregion
#endregion // DatItem
case "INVALID":
default:
@@ -568,6 +590,8 @@ namespace SabreTools.Library.DatFiles
Archive archive = new Archive()
{
Name = name,
AltName = altName,
AltTitle = altTitle,
PartName = partName,
PartInterface = partInterface,
Features = features,
@@ -589,6 +613,8 @@ namespace SabreTools.Library.DatFiles
BiosSet biosset = new BiosSet()
{
Name = name,
AltName = altName,
AltTitle = altTitle,
PartName = partName,
PartInterface = partInterface,
Features = features,
@@ -613,6 +639,8 @@ namespace SabreTools.Library.DatFiles
Disk disk = new Disk()
{
Name = name,
AltName = altName,
AltTitle = altTitle,
PartName = partName,
PartInterface = partInterface,
Features = features,
@@ -649,6 +677,8 @@ namespace SabreTools.Library.DatFiles
Release release = new Release()
{
Name = name,
AltName = altName,
AltTitle = altTitle,
PartName = partName,
PartInterface = partInterface,
Features = features,
@@ -675,6 +705,8 @@ namespace SabreTools.Library.DatFiles
Rom rom = new Rom()
{
Name = name,
AltName = altName,
AltTitle = altTitle,
PartName = partName,
PartInterface = partInterface,
Features = features,
@@ -715,6 +747,8 @@ namespace SabreTools.Library.DatFiles
Sample sample = new Sample()
{
Name = name,
AltName = altName,
AltTitle = altTitle,
PartName = partName,
PartInterface = partInterface,
Features = features,
@@ -1066,6 +1100,8 @@ namespace SabreTools.Library.DatFiles
#region DatItem
#region Common
case "itemtype":
case "item type":
case "type":
@@ -1083,6 +1119,30 @@ namespace SabreTools.Library.DatFiles
case "rom name":
return "DatItem.Name";
#endregion
#region AttractMode
case "altname":
case "alt name":
case "alt-name":
case "altromname":
case "alt romname":
case "alt-romname":
return "DatItem.AltName";
case "alttitle":
case "alt title":
case "alt-title":
case "altromtitle":
case "alt romtitle":
case "alt-romtitle":
return "DatItem.AltTitle";
#endregion
#region SoftwareList
case "partname":
case "part name":
return "DatItem.PartName";
@@ -1102,6 +1162,8 @@ namespace SabreTools.Library.DatFiles
case "area size":
return "DatItem.AreaSize";
#endregion
case "default":
return "DatItem.Default";
@@ -1190,7 +1252,7 @@ namespace SabreTools.Library.DatFiles
case "inverted":
return "DatItem.Inverted";
#endregion
#endregion // DatItem
default:
return "INVALID";

View File

@@ -28,6 +28,9 @@
ItemType = this.ItemType,
DupeType = this.DupeType,
AltName = this.AltName,
AltTitle = this.AltTitle,
PartName = this.PartName,
PartInterface = this.PartInterface,
Features = this.Features,

View File

@@ -85,6 +85,9 @@ namespace SabreTools.Library.DatItems
ItemType = this.ItemType,
DupeType = this.DupeType,
AltName = this.AltName,
AltTitle = this.AltTitle,
PartName = this.PartName,
PartInterface = this.PartInterface,
Features = this.Features,

View File

@@ -28,6 +28,9 @@
ItemType = this.ItemType,
DupeType = this.DupeType,
AltName = this.AltName,
AltTitle = this.AltTitle,
PartName = this.PartName,
PartInterface = this.PartInterface,
Features = this.Features,

View File

@@ -21,7 +21,7 @@ namespace SabreTools.Library.DatItems
{
#region Fields
#region Standard item information
#region Common Fields
/// <summary>
/// Name of the item
@@ -43,7 +43,7 @@ namespace SabreTools.Library.DatItems
#endregion
#region Machine information
#region Machine Fields
/// <summary>
/// Machine values
@@ -53,6 +53,22 @@ namespace SabreTools.Library.DatItems
#endregion
#region AttractMode Fields
/// <summary>
/// Alternate name for the item
/// </summary>
[JsonProperty("alt_romname")]
public string AltName { get; set; }
/// <summary>
/// Alternate title for the item
/// </summary>
[JsonProperty("alt_title")]
public string AltTitle { get; set; }
#endregion
#region SoftwareList Fields
/// <summary>
@@ -110,28 +126,25 @@ namespace SabreTools.Library.DatItems
/// </summary>
public static readonly List<Field> DatItemFields = new List<Field>()
{
// Common
Field.Name,
// AttractMode
Field.AltName,
Field.AltTitle,
//SoftwareList
Field.PartName,
Field.PartInterface,
Field.Features,
Field.AreaName,
Field.AreaSize,
// BiosSet
Field.BiosDescription,
Field.Default,
Field.Language,
Field.Date,
Field.Bios,
Field.Size,
Field.Offset,
Field.Merge,
Field.Region,
Field.Index,
Field.Writable,
Field.Optional,
Field.Status,
Field.Inverted,
Field.CRC,
// Disk
Field.MD5,
#if NET_FRAMEWORK
Field.RIPEMD160,
@@ -140,6 +153,23 @@ namespace SabreTools.Library.DatItems
Field.SHA256,
Field.SHA384,
Field.SHA512,
Field.Merge,
Field.Region,
Field.Index,
Field.Writable,
Field.Optional,
Field.Status,
// Release
Field.Language,
Field.Date,
// Rom
Field.Bios,
Field.Size,
Field.CRC,
Field.Offset,
Field.Inverted,
};
/// <summary>
@@ -210,6 +240,12 @@ namespace SabreTools.Library.DatItems
case Field.Name:
fieldValue = Name;
break;
case Field.AltName:
fieldValue = AltName;
break;
case Field.AltTitle:
fieldValue = AltTitle;
break;
case Field.PartName:
fieldValue = PartName;
break;
@@ -425,11 +461,7 @@ namespace SabreTools.Library.DatItems
if (!Machine.PassesFilter(filter))
return false;
// Filter on item type
if (filter.ItemTypes.MatchesPositiveSet(ItemType.ToString()) == false)
return false;
if (filter.ItemTypes.MatchesNegativeSet(ItemType.ToString()) == true)
return false;
#region Common
// Filter on item name
if (filter.ItemName.MatchesPositiveSet(Name) == false)
@@ -437,6 +469,32 @@ namespace SabreTools.Library.DatItems
if (filter.ItemName.MatchesNegativeSet(Name) == true)
return false;
// Filter on item type
if (filter.ItemTypes.MatchesPositiveSet(ItemType.ToString()) == false)
return false;
if (filter.ItemTypes.MatchesNegativeSet(ItemType.ToString()) == true)
return false;
#endregion
#region AttractMode
// Filter on alt name
if (filter.AltName.MatchesPositiveSet(AltName) == false)
return false;
if (filter.AltName.MatchesNegativeSet(AltName) == true)
return false;
// Filter on alt title
if (filter.AltTitle.MatchesPositiveSet(AltTitle) == false)
return false;
if (filter.AltTitle.MatchesNegativeSet(AltTitle) == true)
return false;
#endregion
#region SoftwareList
// Filter on part name
if (filter.PartName.MatchesPositiveSet(PartName) == false)
return false;
@@ -463,6 +521,8 @@ namespace SabreTools.Library.DatItems
else if (filter.AreaSize.MatchesNegative(null, AreaSize) == false)
return false;
#endregion
return true;
}
@@ -475,9 +535,25 @@ namespace SabreTools.Library.DatItems
// Remove machine fields
Machine.RemoveFields(fields);
#region Common
if (fields.Contains(Field.Name))
Name = null;
#endregion
#region AttractMode
if (fields.Contains(Field.AltName))
AltName = null;
if (fields.Contains(Field.AltTitle))
AltTitle = null;
#endregion
#region SoftwareList
if (fields.Contains(Field.PartName))
PartName = null;
@@ -492,6 +568,8 @@ namespace SabreTools.Library.DatItems
if (fields.Contains(Field.AreaSize))
AreaSize = null;
#endregion
}
#endregion
@@ -574,9 +652,25 @@ namespace SabreTools.Library.DatItems
/// <param name="fields">List of Fields representing what should be updated</param>
public virtual void ReplaceFields(DatItem item, List<Field> fields)
{
#region Common
if (fields.Contains(Field.Name))
Name = item.Name;
#endregion
#region AttractMode
if (fields.Contains(Field.AltName))
AltName = item.AltName;
if (fields.Contains(Field.AltTitle))
AltTitle = item.AltTitle;
#endregion
#region SoftwareList
if (fields.Contains(Field.PartName))
PartName = item.PartName;
@@ -591,6 +685,8 @@ namespace SabreTools.Library.DatItems
if (fields.Contains(Field.AreaSize))
AreaSize = item.AreaSize;
#endregion
}
#endregion

View File

@@ -242,6 +242,9 @@ namespace SabreTools.Library.DatItems
ItemType = this.ItemType,
DupeType = this.DupeType,
AltName = this.AltName,
AltTitle = this.AltTitle,
PartName = this.PartName,
PartInterface = this.PartInterface,
Features = this.Features,
@@ -281,6 +284,9 @@ namespace SabreTools.Library.DatItems
ItemType = ItemType.Rom,
DupeType = this.DupeType,
AltName = this.AltName,
AltTitle = this.AltTitle,
PartName = this.PartName,
PartInterface = this.PartInterface,
Features = this.Features,

View File

@@ -20,6 +20,8 @@ namespace SabreTools.Library.DatItems
/// <summary>
/// List of valid field types within a DatItem/Machine
/// </summary>
/// TODO: Should this be split into MachineField and DatItemField?
/// TODO: Should there also be a DatFileField?
public enum Field : int
{
NULL = 0,
@@ -67,8 +69,14 @@ namespace SabreTools.Library.DatItems
#region DatItem
// Common DatItem
ItemType,
Name,
ItemType,
// AttractMode DatItem
AltName,
AltTitle,
// SoftwareList DatItem
PartName,
PartInterface,
Features,

View File

@@ -107,6 +107,9 @@ namespace SabreTools.Library.DatItems
ItemType = this.ItemType,
DupeType = this.DupeType,
AltName = this.AltName,
AltTitle = this.AltTitle,
PartName = this.PartName,
PartInterface = this.PartInterface,
Features = this.Features,

View File

@@ -308,6 +308,9 @@ namespace SabreTools.Library.DatItems
ItemType = this.ItemType,
DupeType = this.DupeType,
AltName = this.AltName,
AltTitle = this.AltTitle,
PartName = this.PartName,
PartInterface = this.PartInterface,
Features = this.Features,

View File

@@ -28,6 +28,9 @@
ItemType = this.ItemType,
DupeType = this.DupeType,
AltName = this.AltName,
AltTitle = this.AltTitle,
PartName = this.PartName,
PartInterface = this.PartInterface,
Features = this.Features,

View File

@@ -169,17 +169,35 @@ namespace SabreTools.Library.Filtering
#region DatItem Filters
/// <summary>
/// Include or exclude item types
/// </summary>
public FilterItem<string> ItemTypes { get; private set; } = new FilterItem<string>();
#region Common
/// <summary>
/// Include or exclude item names
/// </summary>
public FilterItem<string> ItemName { get; private set; } = new FilterItem<string>();
// TODO: DatItem.Features - List<KeyValuePair<string, string>>
/// <summary>
/// Include or exclude item types
/// </summary>
public FilterItem<string> ItemTypes { get; private set; } = new FilterItem<string>();
#endregion
#region AttractMode
/// <summary>
/// Include or exclude alt names
/// </summary>
public FilterItem<string> AltName { get; private set; } = new FilterItem<string>();
/// <summary>
/// Include or exclude alt titles
/// </summary>
public FilterItem<string> AltTitle { get; private set; } = new FilterItem<string>();
#endregion
#region SoftwareList
/// <summary>
/// Include or exclude part names
@@ -191,6 +209,8 @@ namespace SabreTools.Library.Filtering
/// </summary>
public FilterItem<string> PartInterface { get; private set; } = new FilterItem<string>();
// TODO: DatItem.Features - List<KeyValuePair<string, string>>
/// <summary>
/// Include or exclude area names
/// </summary>
@@ -202,6 +222,8 @@ namespace SabreTools.Library.Filtering
/// <remarks>Positive means "Greater than or equal", Negative means "Less than or equal", Neutral means "Equal"</remarks>
public FilterItem<long?> AreaSize { get; private set; } = new FilterItem<long?>() { Positive = null, Negative = null, Neutral = null };
#endregion
/// <summary>
/// Include or exclude items with the "Default" tag
/// </summary>
@@ -310,7 +332,7 @@ namespace SabreTools.Library.Filtering
/// </summary>
public FilterItem<bool?> Inverted { get; private set; } = new FilterItem<bool?>();
#endregion
#endregion // DatItem Filters
#region Manipulation Flags
@@ -617,6 +639,15 @@ namespace SabreTools.Library.Filtering
#region DatItem Filters
#region Common
case Field.Name:
if (negate)
ItemName.NegativeSet.Add(value);
else
ItemName.PositiveSet.Add(value);
break;
case Field.ItemType:
if (value.AsItemType() == null)
return;
@@ -627,13 +658,28 @@ namespace SabreTools.Library.Filtering
ItemTypes.PositiveSet.Add(value);
break;
case Field.Name:
#endregion
#region AttractMode
case Field.AltName:
if (negate)
ItemName.NegativeSet.Add(value);
AltName.NegativeSet.Add(value);
else
ItemName.PositiveSet.Add(value);
AltName.PositiveSet.Add(value);
break;
case Field.AltTitle:
if (negate)
AltTitle.NegativeSet.Add(value);
else
AltTitle.PositiveSet.Add(value);
break;
#endregion
#region SoftwareList
case Field.PartName:
if (negate)
PartName.NegativeSet.Add(value);
@@ -707,6 +753,8 @@ namespace SabreTools.Library.Filtering
break;
#endregion
case Field.Default:
if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
Default.Neutral = false;
@@ -901,7 +949,7 @@ namespace SabreTools.Library.Filtering
Inverted.Neutral = true;
break;
#endregion
#endregion // DatItem Filters
}
}

View File

@@ -267,12 +267,62 @@ namespace SabreTools.Library.Tools
#region DatItem
#region Common
case "itemname":
case "item-name":
case "name":
return Field.Name;
case "itemtype":
case "item-type":
case "type":
return Field.ItemType;
#endregion
#region AttractMode
case "altname":
case "alt name":
case "alt-name":
case "altromname":
case "alt romname":
case "alt-romname":
return Field.AltName;
case "alttitle":
case "alt title":
case "alt-title":
case "altromtitle":
case "alt romtitle":
case "alt-romtitle":
return Field.AltTitle;
#endregion
#region SoftwareList
case "partname":
case "part name":
case "part-name":
return Field.PartName;
case "partinterface":
case "part interface":
case "part-interface":
return Field.PartInterface;
case "features":
return Field.Features;
case "areaname":
case "area name":
case "area-name":
return Field.AreaName;
case "areasize":
case "area size":
case "area-size":
return Field.AreaSize;
#endregion
case "bios":
return Field.Bios;
case "biosdescription":
@@ -293,24 +343,14 @@ namespace SabreTools.Library.Tools
case "less":
case "size":
return Field.Size;
case "features":
return Field.Features;
case "index":
return Field.Index;
case "inverted":
return Field.Inverted;
case "itemname":
case "item-name":
case "name":
return Field.Name;
case "itemtatus":
case "item-status":
case "status":
return Field.Status;
case "itemtype":
case "item-type":
case "type":
return Field.ItemType;
case "language":
return Field.Language;
case "md5":
@@ -323,12 +363,6 @@ namespace SabreTools.Library.Tools
return Field.Offset;
case "optional":
return Field.Optional;
case "partinterface":
case "part-interface":
return Field.PartInterface;
case "partname":
case "part-name":
return Field.PartName;
case "region":
return Field.Region;
#if NET_FRAMEWORK