using System.Xml.Serialization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using SabreTools.Core; using SabreTools.Core.Tools; using SabreTools.Filter; namespace SabreTools.DatItems.Formats { /// /// Represents control for an input /// [JsonObject("control"), XmlRoot("control")] public class Control : DatItem { #region Fields /// /// General type of input /// [JsonProperty("type", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("type")] [JsonConverter(typeof(StringEnumConverter))] public ControlType ControlType { get => _internal.ReadString(Models.Metadata.Control.ControlTypeKey).AsEnumValue(); set => _internal[Models.Metadata.Control.ControlTypeKey] = value.AsStringValue(); } [JsonIgnore] public bool ControlTypeSpecified { get { return ControlType != ControlType.NULL; } } /// /// Player which the input belongs to /// [JsonProperty("player", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("player")] public long? Player { get => _internal.ReadLong(Models.Metadata.Control.PlayerKey); set => _internal[Models.Metadata.Control.PlayerKey] = value; } [JsonIgnore] public bool PlayerSpecified { get { return Player != null; } } /// /// Total number of buttons /// [JsonProperty("buttons", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("buttons")] public long? Buttons { get => _internal.ReadLong(Models.Metadata.Control.ButtonsKey); set => _internal[Models.Metadata.Control.ButtonsKey] = value; } [JsonIgnore] public bool ButtonsSpecified { get { return Buttons != null; } } /// /// Total number of non-optional buttons /// [JsonProperty("reqbuttons", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("reqbuttons")] public long? RequiredButtons { get => _internal.ReadLong(Models.Metadata.Control.ReqButtonsKey); set => _internal[Models.Metadata.Control.ReqButtonsKey] = value; } [JsonIgnore] public bool RequiredButtonsSpecified { get { return RequiredButtons != null; } } /// /// Analog minimum value /// [JsonProperty("minimum", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("minimum")] public long? Minimum { get => _internal.ReadLong(Models.Metadata.Control.MinimumKey); set => _internal[Models.Metadata.Control.MinimumKey] = value; } [JsonIgnore] public bool MinimumSpecified { get { return Minimum != null; } } /// /// Analog maximum value /// [JsonProperty("maximum", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("maximum")] public long? Maximum { get => _internal.ReadLong(Models.Metadata.Control.MaximumKey); set => _internal[Models.Metadata.Control.MaximumKey] = value; } [JsonIgnore] public bool MaximumSpecified { get { return Maximum != null; } } /// /// Default analog sensitivity /// [JsonProperty("sensitivity", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sensitivity")] public long? Sensitivity { get => _internal.ReadLong(Models.Metadata.Control.SensitivityKey); set => _internal[Models.Metadata.Control.SensitivityKey] = value; } [JsonIgnore] public bool SensitivitySpecified { get { return Sensitivity != null; } } /// /// Default analog keydelta /// [JsonProperty("keydelta", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("keydelta")] public long? KeyDelta { get => _internal.ReadLong(Models.Metadata.Control.KeyDeltaKey); set => _internal[Models.Metadata.Control.KeyDeltaKey] = value; } [JsonIgnore] public bool KeyDeltaSpecified { get { return KeyDelta != null; } } /// /// Default analog reverse setting /// [JsonProperty("reverse", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("reverse")] public bool? Reverse { get => _internal.ReadBool(Models.Metadata.Control.ReverseKey); set => _internal[Models.Metadata.Control.ReverseKey] = value; } [JsonIgnore] public bool ReverseSpecified { get { return Reverse != null; } } /// /// First set of ways /// [JsonProperty("ways", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ways")] public string? Ways { get => _internal.ReadString(Models.Metadata.Control.WaysKey); set => _internal[Models.Metadata.Control.WaysKey] = value; } /// /// Second set of ways /// [JsonProperty("ways2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ways2")] public string? Ways2 { get => _internal.ReadString(Models.Metadata.Control.Ways2Key); set => _internal[Models.Metadata.Control.Ways2Key] = value; } /// /// Third set of ways /// [JsonProperty("ways3", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ways3")] public string? Ways3 { get => _internal.ReadString(Models.Metadata.Control.Ways3Key); set => _internal[Models.Metadata.Control.Ways3Key] = value; } #endregion #region Constructors /// /// Create a default, empty Control object /// public Control() { _internal = new Models.Metadata.Control(); Machine = new Machine(); ItemType = ItemType.Control; } #endregion #region Cloning Methods /// public override object Clone() { return new Control() { ItemType = this.ItemType, DupeType = this.DupeType, Machine = this.Machine.Clone() as Machine ?? new Machine(), Source = this.Source?.Clone() as Source, Remove = this.Remove, _internal = this._internal?.Clone() as Models.Metadata.Control ?? [], }; } #endregion } }