From 233e8daeb7bd056ffdd406a302fd6a0df330c03d Mon Sep 17 00:00:00 2001 From: J-rg <4042863+J-rg@users.noreply.github.com> Date: Fri, 24 Feb 2023 16:35:49 +0100 Subject: [PATCH] Add accessors for game core options to OECorePlugin --- Source/OECorePlugin.swift | 65 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/Source/OECorePlugin.swift b/Source/OECorePlugin.swift index 3677102..229a5cc 100644 --- a/Source/OECorePlugin.swift +++ b/Source/OECorePlugin.swift @@ -108,16 +108,15 @@ public class OECorePlugin: OEPlugin { return infoDictionary[OEGameCoreSystemIdentifiersKey] as? [String] ?? [] } - public var coreOptions: [String: Any] { - return infoDictionary[OEGameCoreOptionsKey] as? [String: Any] ?? [:] + public var coreOptions: [String: [String: Any]] { + return infoDictionary[OEGameCoreOptionsKey] as? [String: [String: Any]] ?? [:] } public var requiredFiles: [[String: Any]] { var allRequiredFiles: [[String: Any]] = [] for value in coreOptions.values { - if let resultDict = value as? [String: Any], - let object = resultDict[OEGameCoreRequiredFilesKey] as? [[String: Any]] { + if let object = value[OEGameCoreRequiredFilesKey] as? [[String: Any]] { allRequiredFiles.append(contentsOf: object) } } @@ -216,3 +215,61 @@ public class OECorePlugin: OEPlugin { } } } + +public extension OECorePlugin { + + func requiredFiles(forSystemIdentifier systemIdentifier: String) -> [[String: Any]]? { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreRequiredFilesKey] as? [[String: Any]] ?? nil + } + + func requiresFiles(forSystemIdentifier systemIdentifier: String) -> Bool { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreRequiresFilesKey] as? Bool ?? false + } + + func supportsCheatCode(forSystemIdentifier systemIdentifier: String) -> Bool { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreSupportsCheatCodeKey] as? Bool ?? false + } + + func hasGlitches(forSystemIdentifier systemIdentifier: String) -> Bool { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreHasGlitchesKey] as? Bool ?? false + } + + func saveStatesNotSupported(forSystemIdentifier systemIdentifier: String) -> Bool { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreSaveStatesNotSupportedKey] as? Bool ?? false + } + + func supportsMultipleDiscs(forSystemIdentifier systemIdentifier: String) -> Bool { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreSupportsMultipleDiscsKey] as? Bool ?? false + } + + func supportsRewinding(forSystemIdentifier systemIdentifier: String) -> Bool { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreSupportsRewindingKey] as? Bool ?? false + } + + func supportsFileInsertion(forSystemIdentifier systemIdentifier: String) -> Bool { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreSupportsFileInsertionKey] as? Bool ?? false + } + + func supportsDisplayModeChange(forSystemIdentifier systemIdentifier: String) -> Bool { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreSupportsDisplayModeChangeKey] as? Bool ?? false + } + + func rewindInterval(forSystemIdentifier systemIdentifier: String) -> Int { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreRewindIntervalKey] as? Int ?? 0 + } + + func rewindBufferSeconds(forSystemIdentifier systemIdentifier: String) -> Int { + let options = coreOptions[systemIdentifier] + return options?[OEGameCoreRewindBufferSecondsKey] as? Int ?? 0 + } +}