diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs index 0c160083..7d3dd8b6 100644 --- a/SabreTools.Library/DatFiles/Listxml.cs +++ b/SabreTools.Library/DatFiles/Listxml.cs @@ -780,19 +780,57 @@ namespace SabreTools.Library.DatFiles switch (reader.Name) { case "control": - var control = new Control(); - control.ControlType = reader.GetAttribute("type"); - control.Player = reader.GetAttribute("player"); - control.Buttons = reader.GetAttribute("buttons"); - control.RegButtons = reader.GetAttribute("regbuttons"); - control.Minimum = reader.GetAttribute("minimum"); - control.Maximum = reader.GetAttribute("maximum"); - control.Sensitivity = reader.GetAttribute("sensitivity"); - control.KeyDelta = reader.GetAttribute("keydelta"); - control.Reverse = reader.GetAttribute("reverse").AsYesNo(); - control.Ways = reader.GetAttribute("ways"); - control.Ways2 = reader.GetAttribute("ways2"); - control.Ways3 = reader.GetAttribute("ways3"); + var control = new Control + { + ControlType = reader.GetAttribute("type"), + RegButtons = reader.GetAttribute("regbuttons"), + Reverse = reader.GetAttribute("reverse").AsYesNo(), + Ways = reader.GetAttribute("ways"), + Ways2 = reader.GetAttribute("ways2"), + Ways3 = reader.GetAttribute("ways3"), + }; + + // Set the player + if (reader.GetAttribute("player") != null) + { + if (Int64.TryParse(reader.GetAttribute("player"), out long player)) + control.Player = player; + } + + // Set the buttons + if (reader.GetAttribute("buttons") != null) + { + if (Int64.TryParse(reader.GetAttribute("buttons"), out long buttons)) + control.Buttons = buttons; + } + + // Set the minimum + if (reader.GetAttribute("minimum") != null) + { + if (Int64.TryParse(reader.GetAttribute("minimum"), out long minimum)) + control.Minimum = minimum; + } + + // Set the maximum + if (reader.GetAttribute("maximum") != null) + { + if (Int64.TryParse(reader.GetAttribute("maximum"), out long maximum)) + control.Maximum = maximum; + } + + // Set the sensitivity + if (reader.GetAttribute("sensitivity") != null) + { + if (Int64.TryParse(reader.GetAttribute("sensitivity"), out long sensitivity)) + control.Sensitivity = sensitivity; + } + + // Set the keydelta + if (reader.GetAttribute("keydelta") != null) + { + if (Int64.TryParse(reader.GetAttribute("keydelta"), out long keyDelta)) + control.KeyDelta = keyDelta; + } input.Controls.Add(control); @@ -1654,13 +1692,13 @@ namespace SabreTools.Library.DatFiles { xtw.WriteStartElement("control"); xtw.WriteOptionalAttributeString("type", control.ControlType); - xtw.WriteOptionalAttributeString("player", control.Player); - xtw.WriteOptionalAttributeString("buttons", control.Buttons); + xtw.WriteOptionalAttributeString("player", control.Player?.ToString()); + xtw.WriteOptionalAttributeString("buttons", control.Buttons?.ToString()); xtw.WriteOptionalAttributeString("regbuttons", control.RegButtons); - xtw.WriteOptionalAttributeString("minimum", control.Minimum); - xtw.WriteOptionalAttributeString("maximum", control.Maximum); - xtw.WriteOptionalAttributeString("sensitivity", control.Sensitivity); - xtw.WriteOptionalAttributeString("keydelta", control.KeyDelta); + xtw.WriteOptionalAttributeString("minimum", control.Minimum?.ToString()); + xtw.WriteOptionalAttributeString("maximum", control.Maximum?.ToString()); + xtw.WriteOptionalAttributeString("sensitivity", control.Sensitivity?.ToString()); + xtw.WriteOptionalAttributeString("keydelta", control.KeyDelta?.ToString()); xtw.WriteOptionalAttributeString("reverse", control.Reverse.FromYesNo()); xtw.WriteOptionalAttributeString("ways", control.Ways); xtw.WriteOptionalAttributeString("ways2", control.Ways2); diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs index 4ec1c350..895d7bab 100644 --- a/SabreTools.Library/DatFiles/SabreDat.cs +++ b/SabreTools.Library/DatFiles/SabreDat.cs @@ -1503,13 +1503,13 @@ namespace SabreTools.Library.DatFiles { xtw.WriteStartElement("control"); xtw.WriteOptionalAttributeString("type", control.ControlType); - xtw.WriteOptionalAttributeString("player", control.Player); - xtw.WriteOptionalAttributeString("buttons", control.Buttons); + xtw.WriteOptionalAttributeString("player", control.Player?.ToString()); + xtw.WriteOptionalAttributeString("buttons", control.Buttons?.ToString()); xtw.WriteOptionalAttributeString("regbuttons", control.RegButtons); - xtw.WriteOptionalAttributeString("minimum", control.Minimum); - xtw.WriteOptionalAttributeString("maximum", control.Maximum); - xtw.WriteOptionalAttributeString("sensitivity", control.Sensitivity); - xtw.WriteOptionalAttributeString("keydelta", control.KeyDelta); + xtw.WriteOptionalAttributeString("minimum", control.Minimum?.ToString()); + xtw.WriteOptionalAttributeString("maximum", control.Maximum?.ToString()); + xtw.WriteOptionalAttributeString("sensitivity", control.Sensitivity?.ToString()); + xtw.WriteOptionalAttributeString("keydelta", control.KeyDelta?.ToString()); xtw.WriteOptionalAttributeString("reverse", control.Reverse.FromYesNo()); xtw.WriteOptionalAttributeString("ways", control.Ways); xtw.WriteOptionalAttributeString("ways2", control.Ways2); diff --git a/SabreTools.Library/DatItems/Control.cs b/SabreTools.Library/DatItems/Control.cs index 2771fd53..d0ea2b10 100644 --- a/SabreTools.Library/DatItems/Control.cs +++ b/SabreTools.Library/DatItems/Control.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using SabreTools.Library.Filtering; @@ -25,17 +26,18 @@ namespace SabreTools.Library.DatItems /// Player ID /// [JsonProperty("player", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string Player { get; set; } // TODO: Int32? + public long? Player { get; set; } /// /// Button count /// [JsonProperty("buttons", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string Buttons { get; set; } // TODO: Int32? + public long? Buttons { get; set; } /// /// Regular button count /// + /// Couldn't find this used in newest ListXML [JsonProperty("regbuttons", DefaultValueHandling = DefaultValueHandling.Ignore)] public string RegButtons { get; set; } // TODO: Int32? @@ -43,25 +45,25 @@ namespace SabreTools.Library.DatItems /// Minimum value /// [JsonProperty("minimum", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string Minimum { get; set; } // TODO: Int32? Float? + public long? Minimum { get; set; } /// /// Maximum value /// [JsonProperty("maximum", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string Maximum { get; set; } // TODO: Int32? Float? + public long? Maximum { get; set; } /// /// Sensitivity value /// [JsonProperty("sensitivity", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string Sensitivity { get; set; } // TODO: Int32? Float? + public long? Sensitivity { get; set; } /// /// Keypress delta /// [JsonProperty("keydelta", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string KeyDelta { get; set; } // TODO: Int32? Float? + public long? KeyDelta { get; set; } /// /// Determines if the control is reversed @@ -73,19 +75,19 @@ namespace SabreTools.Library.DatItems /// First set of ways /// [JsonProperty("ways", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string Ways { get; set; } // TODO: Int32? Float? + public string Ways { get; set; } /// /// Second set of ways /// [JsonProperty("ways2", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string Ways2 { get; set; } // TODO: Int32? Float? + public string Ways2 { get; set; } /// /// Third set of ways /// [JsonProperty("ways3", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string Ways3 { get; set; } // TODO: Int32? Float? + public string Ways3 { get; set; } #endregion @@ -105,25 +107,43 @@ namespace SabreTools.Library.DatItems ControlType = mappings[Field.DatItem_Control_Type]; if (mappings.Keys.Contains(Field.DatItem_Control_Player)) - Player = mappings[Field.DatItem_Control_Player]; + { + if (Int64.TryParse(mappings[Field.DatItem_Control_Player], out long player)) + Player = player; + } if (mappings.Keys.Contains(Field.DatItem_Control_Buttons)) - Buttons = mappings[Field.DatItem_Control_Buttons]; + { + if (Int64.TryParse(mappings[Field.DatItem_Control_Buttons], out long buttons)) + Buttons = buttons; + } if (mappings.Keys.Contains(Field.DatItem_Control_RegButtons)) RegButtons = mappings[Field.DatItem_Control_RegButtons]; if (mappings.Keys.Contains(Field.DatItem_Control_Minimum)) - Minimum = mappings[Field.DatItem_Control_Minimum]; + { + if (Int64.TryParse(mappings[Field.DatItem_Control_Minimum], out long minimum)) + Minimum = minimum; + } if (mappings.Keys.Contains(Field.DatItem_Control_Maximum)) - Maximum = mappings[Field.DatItem_Control_Maximum]; + { + if (Int64.TryParse(mappings[Field.DatItem_Control_Maximum], out long maximum)) + Maximum = maximum; + } if (mappings.Keys.Contains(Field.DatItem_Control_Sensitivity)) - Sensitivity = mappings[Field.DatItem_Control_Sensitivity]; + { + if (Int64.TryParse(mappings[Field.DatItem_Control_Sensitivity], out long sensitivity)) + Sensitivity = sensitivity; + } if (mappings.Keys.Contains(Field.DatItem_Control_KeyDelta)) - KeyDelta = mappings[Field.DatItem_Control_KeyDelta]; + { + if (Int64.TryParse(mappings[Field.DatItem_Control_KeyDelta], out long keyDelta)) + KeyDelta = keyDelta; + } if (mappings.Keys.Contains(Field.DatItem_Control_Reverse)) Reverse = mappings[Field.DatItem_Control_Reverse].AsYesNo(); @@ -230,15 +250,15 @@ namespace SabreTools.Library.DatItems return false; // Filter on display type - if (filter.DatItem_Control_Player.MatchesPositiveSet(Player) == false) + if (filter.DatItem_Control_Player.MatchesPositive(null, Player) == false) return false; - if (filter.DatItem_Control_Player.MatchesNegativeSet(Player) == true) + if (filter.DatItem_Control_Player.MatchesNegative(null, Player) == true) return false; // Filter on buttons - if (filter.DatItem_Control_Buttons.MatchesPositiveSet(Buttons) == false) + if (filter.DatItem_Control_Buttons.MatchesPositive(null, Buttons) == false) return false; - if (filter.DatItem_Control_Buttons.MatchesNegativeSet(Buttons) == true) + if (filter.DatItem_Control_Buttons.MatchesNegative(null, Buttons) == true) return false; // Filter on regbuttons @@ -248,27 +268,27 @@ namespace SabreTools.Library.DatItems return false; // Filter on minimum - if (filter.DatItem_Control_Minimum.MatchesPositiveSet(Minimum) == false) + if (filter.DatItem_Control_Minimum.MatchesPositive(null, Minimum) == false) return false; - if (filter.DatItem_Control_Minimum.MatchesNegativeSet(Minimum) == true) + if (filter.DatItem_Control_Minimum.MatchesNegative(null, Minimum) == true) return false; // Filter on maximum - if (filter.DatItem_Control_Maximum.MatchesPositiveSet(Maximum) == false) + if (filter.DatItem_Control_Maximum.MatchesPositive(null, Maximum) == false) return false; - if (filter.DatItem_Control_Maximum.MatchesNegativeSet(Maximum) == true) + if (filter.DatItem_Control_Maximum.MatchesNegative(null, Maximum) == true) return false; // Filter on sensitivity - if (filter.DatItem_Control_Sensitivity.MatchesPositiveSet(Sensitivity) == false) + if (filter.DatItem_Control_Sensitivity.MatchesPositive(null, Sensitivity) == false) return false; - if (filter.DatItem_Control_Sensitivity.MatchesNegativeSet(Sensitivity) == true) + if (filter.DatItem_Control_Sensitivity.MatchesNegative(null, Sensitivity) == true) return false; // Filter on keydelta - if (filter.DatItem_Control_KeyDelta.MatchesPositiveSet(KeyDelta) == false) + if (filter.DatItem_Control_KeyDelta.MatchesPositive(null, KeyDelta) == false) return false; - if (filter.DatItem_Control_KeyDelta.MatchesNegativeSet(KeyDelta) == true) + if (filter.DatItem_Control_KeyDelta.MatchesNegative(null, KeyDelta) == true) return false; // Filter on reverse diff --git a/SabreTools.Library/Filtering/Filter.cs b/SabreTools.Library/Filtering/Filter.cs index 1b15156f..85b43b4c 100644 --- a/SabreTools.Library/Filtering/Filter.cs +++ b/SabreTools.Library/Filtering/Filter.cs @@ -177,13 +177,13 @@ namespace SabreTools.Library.Filtering // Control public FilterItem DatItem_Control_Type { get; private set; } = new FilterItem(); - public FilterItem DatItem_Control_Player { get; private set; } = new FilterItem(); - public FilterItem DatItem_Control_Buttons { get; private set; } = new FilterItem(); + public FilterItem DatItem_Control_Player { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; + public FilterItem DatItem_Control_Buttons { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; public FilterItem DatItem_Control_RegButtons { get; private set; } = new FilterItem(); - public FilterItem DatItem_Control_Minimum { get; private set; } = new FilterItem(); - public FilterItem DatItem_Control_Maximum { get; private set; } = new FilterItem(); - public FilterItem DatItem_Control_Sensitivity { get; private set; } = new FilterItem(); - public FilterItem DatItem_Control_KeyDelta { get; private set; } = new FilterItem(); + public FilterItem DatItem_Control_Minimum { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; + public FilterItem DatItem_Control_Maximum { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; + public FilterItem DatItem_Control_Sensitivity { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; + public FilterItem DatItem_Control_KeyDelta { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; public FilterItem DatItem_Control_Reverse { get; private set; } = new FilterItem() { Neutral = null }; public FilterItem DatItem_Control_Ways { get; private set; } = new FilterItem(); public FilterItem DatItem_Control_Ways2 { get; private set; } = new FilterItem(); @@ -770,11 +770,11 @@ namespace SabreTools.Library.Filtering break; case Field.DatItem_Control_Player: - SetStringFilter(DatItem_Control_Player, value, negate); + SetOptionalLongFilter(DatItem_Control_Player, value, negate); break; case Field.DatItem_Control_Buttons: - SetStringFilter(DatItem_Control_Buttons, value, negate); + SetOptionalLongFilter(DatItem_Control_Buttons, value, negate); break; case Field.DatItem_Control_RegButtons: @@ -782,19 +782,19 @@ namespace SabreTools.Library.Filtering break; case Field.DatItem_Control_Minimum: - SetStringFilter(DatItem_Control_Minimum, value, negate); + SetOptionalLongFilter(DatItem_Control_Minimum, value, negate); break; case Field.DatItem_Control_Maximum: - SetStringFilter(DatItem_Control_Maximum, value, negate); + SetOptionalLongFilter(DatItem_Control_Maximum, value, negate); break; case Field.DatItem_Control_Sensitivity: - SetStringFilter(DatItem_Control_Sensitivity, value, negate); + SetOptionalLongFilter(DatItem_Control_Sensitivity, value, negate); break; case Field.DatItem_Control_KeyDelta: - SetStringFilter(DatItem_Control_KeyDelta, value, negate); + SetOptionalLongFilter(DatItem_Control_KeyDelta, value, negate); break; case Field.DatItem_Control_Reverse: