diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs index bbb9172d..d43acea9 100644 --- a/SabreTools.Data.Extensions/MetadataExtensions.cs +++ b/SabreTools.Data.Extensions/MetadataExtensions.cs @@ -301,6 +301,7 @@ namespace SabreTools.Data.Extensions { cloneInput.Buttons = selfInput.Buttons; cloneInput.Coins = selfInput.Coins; + cloneInput.ControlAttr = selfInput.ControlAttr; cloneInput.Players = selfInput.Players; cloneInput.Service = selfInput.Service; cloneInput.Tilt = selfInput.Tilt; diff --git a/SabreTools.Data.Models/Metadata/Input.cs b/SabreTools.Data.Models/Metadata/Input.cs index 9496337c..87072425 100644 --- a/SabreTools.Data.Models/Metadata/Input.cs +++ b/SabreTools.Data.Models/Metadata/Input.cs @@ -12,6 +12,9 @@ namespace SabreTools.Data.Models.Metadata public long? Coins { get; set; } + /// Attribute also named Control + public string? ControlAttr { get; set; } + public long? Players { get; set; } /// (yes|no) "no" @@ -24,7 +27,7 @@ namespace SabreTools.Data.Models.Metadata #region Keys - /// string / Control[] + /// Control[] public const string ControlKey = "control"; #endregion diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs index 8cf264fb..6b095fb2 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -665,6 +665,7 @@ namespace SabreTools.Metadata.DatFiles.Test Buttons = 12345, Coins = 12345, [Data.Models.Metadata.Input.ControlKey] = new Data.Models.Metadata.Control[] { CreateMetadataControl() }, + ControlAttr = "controlattr", Players = 12345, Service = true, Tilt = true, @@ -1395,6 +1396,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(input); Assert.Equal(12345, input.Buttons); Assert.Equal(12345, input.Coins); + Assert.Equal("controlattr", input.ControlAttr); Assert.Equal(12345, input.Players); Assert.True(input.Service); Assert.True(input.Tilt); diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs index 84156cd9..de331159 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs @@ -930,6 +930,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(input); Assert.Equal(12345, input.Buttons); Assert.Equal(12345, input.Coins); + Assert.Equal("controlattr", input.ControlAttr); Assert.Equal(12345, input.Players); Assert.True(input.Service); Assert.True(input.Tilt); diff --git a/SabreTools.Metadata.DatItems/Formats/Input.cs b/SabreTools.Metadata.DatItems/Formats/Input.cs index 7a742ef5..3ab64efd 100644 --- a/SabreTools.Metadata.DatItems/Formats/Input.cs +++ b/SabreTools.Metadata.DatItems/Formats/Input.cs @@ -25,6 +25,12 @@ namespace SabreTools.Metadata.DatItems.Formats set => (_internal as Data.Models.Metadata.Input)?.Coins = value; } + public string? ControlAttr + { + get => (_internal as Data.Models.Metadata.Input)?.ControlAttr; + set => (_internal as Data.Models.Metadata.Input)?.ControlAttr = value; + } + [JsonIgnore] public bool ControlsSpecified { diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs index 3d9f6728..c8f9b298 100644 --- a/SabreTools.Metadata.Filter/FilterObject.cs +++ b/SabreTools.Metadata.Filter/FilterObject.cs @@ -723,6 +723,9 @@ namespace SabreTools.Metadata.Filter case Input item when fieldName == "coins": checkValue = item.Coins?.ToString(); return true; + case Input item when fieldName == "controlattr": + checkValue = item.ControlAttr; + return true; case Input item when fieldName == "players": checkValue = item.Players?.ToString(); return true; diff --git a/SabreTools.Metadata/DictionaryBaseExtensions.cs b/SabreTools.Metadata/DictionaryBaseExtensions.cs index 712b3c44..9b1b61e8 100644 --- a/SabreTools.Metadata/DictionaryBaseExtensions.cs +++ b/SabreTools.Metadata/DictionaryBaseExtensions.cs @@ -260,6 +260,8 @@ namespace SabreTools.Metadata return false; if (selfInput.Coins != otherInput.Coins) return false; + if (selfInput.ControlAttr != otherInput.ControlAttr) + return false; if (selfInput.Players != otherInput.Players) return false; if (selfInput.Service != otherInput.Service) diff --git a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs index cdda4263..525728fc 100644 --- a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs @@ -173,7 +173,7 @@ namespace SabreTools.Serialization.CrossModel.Test Service = true, Tilt = true, Players = 12345, - //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control + ControlAttr = "controlattr", Buttons = 12345, Coins = 12345, Control = [control], @@ -601,7 +601,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal(true, input.Service); Assert.Equal(true, input.Tilt); Assert.Equal(12345, input.Players); - //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control + Assert.Equal("controlattr", input.ControlAttr); Assert.Equal(12345, input.Buttons); Assert.Equal(12345, input.Coins); diff --git a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs index f151b31c..73453a6b 100644 --- a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs +++ b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs @@ -169,7 +169,7 @@ namespace SabreTools.Serialization.CrossModel.Test Service = true, Tilt = true, Players = 12345, - //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control + ControlAttr = "controlattr", Buttons = 12345, Coins = 12345, Control = [control], @@ -595,7 +595,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal(true, input.Service); Assert.Equal(true, input.Tilt); Assert.Equal(12345, input.Players); - //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control + Assert.Equal("controlattr", input.ControlAttr); Assert.Equal(12345, input.Buttons); Assert.Equal(12345, input.Coins); diff --git a/SabreTools.Serialization.CrossModel.Test/MessTests.cs b/SabreTools.Serialization.CrossModel.Test/MessTests.cs index f3fa9a92..cefd38d2 100644 --- a/SabreTools.Serialization.CrossModel.Test/MessTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/MessTests.cs @@ -169,7 +169,7 @@ namespace SabreTools.Serialization.CrossModel.Test Service = true, Tilt = true, Players = 12345, - //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control + ControlAttr = "controlattr", Buttons = 12345, Coins = 12345, Control = [control], @@ -595,7 +595,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal(true, input.Service); Assert.Equal(true, input.Tilt); Assert.Equal(12345, input.Players); - //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control + Assert.Equal("controlattr", input.ControlAttr); Assert.Equal(12345, input.Buttons); Assert.Equal(12345, input.Coins); diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs index 8fdca741..14db6920 100644 --- a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs @@ -230,7 +230,7 @@ namespace SabreTools.Serialization.CrossModel var input = new Input { Players = item.Players, - Control = item.ReadString(Data.Models.Metadata.Input.ControlKey), + Control = item.ControlAttr, Buttons = item.Buttons, Coins = item.Coins, Tilt = item.Tilt, diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs index 3dc10ef6..1803144b 100644 --- a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs @@ -243,7 +243,7 @@ namespace SabreTools.Serialization.CrossModel var input = new Data.Models.Metadata.Input { Players = item.Players, - [Data.Models.Metadata.Input.ControlKey] = item.Control, + ControlAttr = item.Control, Buttons = item.Buttons, Coins = item.Coins, Tilt = item.Tilt, diff --git a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs index 62b56763..f168b43c 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs @@ -499,14 +499,11 @@ namespace SabreTools.Serialization.CrossModel Service = item.Service, Tilt = item.Tilt, Players = item.Players, + ControlAttr = item.ControlAttr, Buttons = item.Buttons, Coins = item.Coins, }; - var controlAttr = item.ReadString(Data.Models.Metadata.Input.ControlKey); - if (controlAttr is not null) - input.ControlAttr = controlAttr; - var controls = item.Read(Data.Models.Metadata.Input.ControlKey); if (controls is not null && controls.Length > 0) input.Control = Array.ConvertAll(controls, ConvertFromInternalModel); diff --git a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs index 86f488af..8e572716 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs @@ -537,7 +537,7 @@ namespace SabreTools.Serialization.CrossModel Service = item.Service, Tilt = item.Tilt, Players = item.Players, - [Data.Models.Metadata.Input.ControlKey] = item.ControlAttr, + ControlAttr = item.ControlAttr, Buttons = item.Buttons, Coins = item.Coins, }; diff --git a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs index 50763fe1..a4997294 100644 --- a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs +++ b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs @@ -240,7 +240,7 @@ namespace SabreTools.Serialization.Readers.Test Service = true, Tilt = true, Players = 12345, - ControlAttr = "XXXXXX", + ControlAttr = "controlattr", Buttons = 12345, Coins = 12345, Control = [control], @@ -668,7 +668,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal(true, input.Service); Assert.Equal(true, input.Tilt); Assert.Equal(12345, input.Players); - Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control + Assert.Equal("controlattr", input.ControlAttr); Assert.Equal(12345, input.Buttons); Assert.Equal(12345, input.Coins); diff --git a/SabreTools.Serialization.Readers.Test/M1Tests.cs b/SabreTools.Serialization.Readers.Test/M1Tests.cs index 9a48a233..3f581a31 100644 --- a/SabreTools.Serialization.Readers.Test/M1Tests.cs +++ b/SabreTools.Serialization.Readers.Test/M1Tests.cs @@ -236,7 +236,7 @@ namespace SabreTools.Serialization.Readers.Test Service = true, Tilt = true, Players = 12345, - //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control + ControlAttr = "controlattr", Buttons = 12345, Coins = 12345, Control = [control], @@ -662,7 +662,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal(true, input.Service); Assert.Equal(true, input.Tilt); Assert.Equal(12345, input.Players); - //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control + Assert.Equal("controlattr", input.ControlAttr); Assert.Equal(12345, input.Buttons); Assert.Equal(12345, input.Coins); diff --git a/SabreTools.Serialization.Readers.Test/MessTests.cs b/SabreTools.Serialization.Readers.Test/MessTests.cs index a6f471cb..4d18462d 100644 --- a/SabreTools.Serialization.Readers.Test/MessTests.cs +++ b/SabreTools.Serialization.Readers.Test/MessTests.cs @@ -236,7 +236,7 @@ namespace SabreTools.Serialization.Readers.Test Service = true, Tilt = true, Players = 12345, - //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control + ControlAttr = "controlattr", Buttons = 12345, Coins = 12345, Control = [control], @@ -662,7 +662,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal(true, input.Service); Assert.Equal(true, input.Tilt); Assert.Equal(12345, input.Players); - //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control + Assert.Equal("controlattr", input.ControlAttr); Assert.Equal(12345, input.Buttons); Assert.Equal(12345, input.Coins);