GBA003/Delta/Systems/System.swift
2024-05-30 15:27:14 +08:00

139 lines
3.6 KiB
Swift

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 [ GBA.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 GBA.core
case .n64: return GBA.core
case .gbc: return GBA.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 .gba
case .n64: return .gba
case .gbc: return .gba
case .gba: return .gba
case .ds: return .gba
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
}
}
}