// // System.swift // Delta // // Created by Riley Testut on 4/30/17. // Copyright © 2017 Riley Testut. All rights reserved. // import DeltaCore import SNESDeltaCore import GBADeltaCore import GBCDeltaCore //import NESDeltaCore import N64DeltaCore //import MelonDSDeltaCore import Systems // Legacy Cores import struct DSDeltaCore.DS enum System: CaseIterable { case nes case genesis case snes case n64 case gbc case gba case ds static var registeredSystems: [System] { let systems = System.allCases.filter { Delta.registeredCores.keys.contains($0.gameType) } return systems } static var allCores: [DeltaCoreProtocol] { return [ SNES.core, N64.core, GBC.core, GBA.core, DS.core, GPGX.core] } } extension System { var localizedName: String { switch self { case .nes: return NSLocalizedString("", comment: "") case .snes: return NSLocalizedString("Super Nintendo", comment: "") case .n64: return NSLocalizedString("Nintendo 64", comment: "") case .gbc: return NSLocalizedString("Game Boy Color", comment: "") case .gba: return NSLocalizedString("Game Boy Advance", comment: "") case .ds: return NSLocalizedString("Nintendo DS", comment: "") case .genesis: return NSLocalizedString("Sega Genesis", comment: "") } } var localizedShortName: String { switch self { case .nes: return NSLocalizedString("NES", comment: "") case .snes: return NSLocalizedString("SNES", comment: "") case .n64: return NSLocalizedString("N64", comment: "") case .gbc: return NSLocalizedString("GBC", comment: "") case .gba: return NSLocalizedString("GBA", comment: "") case .ds: return NSLocalizedString("DS", comment: "") case .genesis: return NSLocalizedString("Genesis (Beta)", comment: "") } } var year: Int { switch self { case .nes: return 1985 case .genesis: return 1989 case .snes: return 1990 case .n64: return 1996 case .gbc: return 1998 case .gba: return 2001 case .ds: return 2004 } } } extension System { var deltaCore: DeltaCoreProtocol { switch self { case .nes: return GBA.core case .snes: return SNES.core case .n64: return N64.core case .gbc: return GBC.core case .gba: return GBA.core case .ds: return GBA.core//return Settings.preferredCore(for: .ds) ?? MelonDS.core? case .genesis: return GPGX.core } } var gameType: DeltaCore.GameType { switch self { case .nes: return .gba case .snes: return .snes case .n64: return .n64 case .gbc: return .gbc case .gba: return .gba case .ds: return .ds case .genesis: return .genesis } } init?(gameType: DeltaCore.GameType) { switch gameType { // case GameType.nes: self = .nes case GameType.snes: self = .snes case GameType.n64: self = .n64 case GameType.gbc: self = .gbc case GameType.gba: self = .gba case GameType.ds: self = .ds case GameType.genesis: self = .genesis default: return nil } } } extension DeltaCore.GameType { init?(fileExtension: String) { switch fileExtension.lowercased() { // case "nes": self = .nes case "smc", "sfc", "fig": self = .snes case "n64", "z64": self = .n64 case "gbc", "gb": self = .gbc case "gba": self = .gba case "ds", "nds": self = .ds case "gen", "bin", "md", "smd": self = .genesis default: return nil } } }