using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { /// /// Represents the a driver of the machine /// [JsonObject("driver"), XmlRoot("driver")] public sealed class Driver : DatItem { #region Fields public Data.Models.Metadata.Blit? Blit { get => (_internal as Data.Models.Metadata.Driver)?.Blit; set => (_internal as Data.Models.Metadata.Driver)?.Blit = value; } public Data.Models.Metadata.SupportStatus? Cocktail { get => (_internal as Data.Models.Metadata.Driver)?.Cocktail; set => (_internal as Data.Models.Metadata.Driver)?.Cocktail = value; } public Data.Models.Metadata.SupportStatus? Color { get => (_internal as Data.Models.Metadata.Driver)?.Color; set => (_internal as Data.Models.Metadata.Driver)?.Color = value; } public Data.Models.Metadata.SupportStatus? Emulation { get => (_internal as Data.Models.Metadata.Driver)?.Emulation; set => (_internal as Data.Models.Metadata.Driver)?.Emulation = value; } public bool? Incomplete { get => (_internal as Data.Models.Metadata.Driver)?.Incomplete; set => (_internal as Data.Models.Metadata.Driver)?.Incomplete = value; } /// /> public override Data.Models.Metadata.ItemType ItemType => Data.Models.Metadata.ItemType.Driver; public bool? NoSoundHardware { get => (_internal as Data.Models.Metadata.Driver)?.NoSoundHardware; set => (_internal as Data.Models.Metadata.Driver)?.NoSoundHardware = value; } public bool? RequiresArtwork { get => (_internal as Data.Models.Metadata.Driver)?.RequiresArtwork; set => (_internal as Data.Models.Metadata.Driver)?.RequiresArtwork = value; } public Data.Models.Metadata.Supported? SaveState { get => (_internal as Data.Models.Metadata.Driver)?.SaveState; set => (_internal as Data.Models.Metadata.Driver)?.SaveState = value; } public Data.Models.Metadata.SupportStatus? Sound { get => (_internal as Data.Models.Metadata.Driver)?.Sound; set => (_internal as Data.Models.Metadata.Driver)?.Sound = value; } public Data.Models.Metadata.SupportStatus? Status { get => (_internal as Data.Models.Metadata.Driver)?.Status; set => (_internal as Data.Models.Metadata.Driver)?.Status = value; } public bool? Unofficial { get => (_internal as Data.Models.Metadata.Driver)?.Unofficial; set => (_internal as Data.Models.Metadata.Driver)?.Unofficial = value; } #endregion #region Constructors public Driver() : base() { } public Driver(Data.Models.Metadata.Driver item) : base(item) { // Process flag values long? paletteSize = ReadLong(Data.Models.Metadata.Driver.PaletteSizeKey); if (paletteSize is not null) Write(Data.Models.Metadata.Driver.PaletteSizeKey, paletteSize.ToString()); } public Driver(Data.Models.Metadata.Driver item, Machine machine, Source source) : this(item) { Source = source; CopyMachineInformation(machine); } #endregion #region Cloning Methods /// public override object Clone() => new Driver(_internal.DeepClone() as Data.Models.Metadata.Driver ?? []); #endregion } }