GBA001/Delta/Database/Model/Human/ControllerSkin.swift
Riley Testut 93119b4714 Reorganizes Xcode project structure
Merges “Common” folder into main Delta target folder
2016-12-20 18:24:43 -06:00

116 lines
3.5 KiB
Swift

//
// ControllerSkin.swift
// Delta
//
// Created by Riley Testut on 8/30/16.
// Copyright (c) 2016 Riley Testut. All rights reserved.
//
import Foundation
import DeltaCore
extension ControllerSkinConfigurations
{
init(traits: DeltaCore.ControllerSkin.Traits)
{
switch traits.deviceType
{
case .iphone:
switch traits.orientation
{
case .portrait: self = .fullScreenPortrait
case .landscape: self = .fullScreenLandscape
}
case .ipad:
switch traits.displayMode
{
case .fullScreen:
switch traits.orientation
{
case .portrait: self = .fullScreenPortrait
case .landscape: self = .fullScreenLandscape
}
case .splitView:
switch traits.orientation
{
case .portrait: self = .splitViewPortrait
case .landscape: self = .splitViewLandscape
}
}
}
}
}
@objc(ControllerSkin)
public class ControllerSkin: _ControllerSkin
{
public var fileURL: URL {
let fileURL = self.isStandard ? self.controllerSkin!.fileURL : DatabaseManager.controllerSkinsDirectoryURL(for: self.gameType).appendingPathComponent(self.filename)
return fileURL
}
public var isDebugModeEnabled: Bool {
return self.controllerSkin?.isDebugModeEnabled ?? false
}
fileprivate lazy var controllerSkin: DeltaCore.ControllerSkin? = {
let controllerSkin = self.isStandard ? DeltaCore.ControllerSkin.standardControllerSkin(for: self.gameType) : DeltaCore.ControllerSkin(fileURL: self.fileURL)
return controllerSkin
}()
public override func awakeFromFetch()
{
super.awakeFromFetch()
// Kinda hacky, but we initialize controllerSkin on fetch to ensure it is initialized on the correct thread
// We could solve this by wrapping controllerSkin.getter in performAndWait block, but this can lead to a deadlock
_ = self.controllerSkin
}
}
extension ControllerSkin: ControllerSkinProtocol
{
public func supports(_ traits: DeltaCore.ControllerSkin.Traits) -> Bool
{
return self.controllerSkin?.supports(traits) ?? false
}
public func image(for traits: DeltaCore.ControllerSkin.Traits, preferredSize: DeltaCore.ControllerSkin.Size) -> UIImage?
{
return self.controllerSkin?.image(for: traits, preferredSize: preferredSize)
}
public func inputs(for traits: DeltaCore.ControllerSkin.Traits, point: CGPoint) -> [Input]?
{
return self.controllerSkin?.inputs(for: traits, point: point)
}
public func items(for traits: DeltaCore.ControllerSkin.Traits) -> [DeltaCore.ControllerSkin.Item]?
{
return self.controllerSkin?.items(for: traits)
}
public func isTranslucent(for traits: DeltaCore.ControllerSkin.Traits) -> Bool?
{
return self.controllerSkin?.isTranslucent(for: traits)
}
public func gameScreenFrame(for traits: DeltaCore.ControllerSkin.Traits) -> CGRect?
{
return self.controllerSkin?.gameScreenFrame(for: traits)
}
public func aspectRatio(for traits: DeltaCore.ControllerSkin.Traits) -> CGSize?
{
return self.controllerSkin?.aspectRatio(for: traits)
}
}