Split Input.Control and Input.ControlAttr

This commit is contained in:
Matt Nadareski
2026-04-03 22:31:10 -04:00
parent b55a932b2b
commit cdc55e721e
17 changed files with 35 additions and 20 deletions

View File

@@ -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;

View File

@@ -12,6 +12,9 @@ namespace SabreTools.Data.Models.Metadata
public long? Coins { get; set; }
/// <remarks>Attribute also named Control</remarks>
public string? ControlAttr { get; set; }
public long? Players { get; set; }
/// <remarks>(yes|no) "no"</remarks>
@@ -24,7 +27,7 @@ namespace SabreTools.Data.Models.Metadata
#region Keys
/// <remarks>string / Control[]</remarks>
/// <remarks>Control[]</remarks>
public const string ControlKey = "control";
#endregion

View File

@@ -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);

View File

@@ -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);

View File

@@ -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
{

View File

@@ -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;

View File

@@ -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)

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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,

View File

@@ -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,

View File

@@ -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.Control[]>(Data.Models.Metadata.Input.ControlKey);
if (controls is not null && controls.Length > 0)
input.Control = Array.ConvertAll(controls, ConvertFromInternalModel);

View File

@@ -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,
};

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);