Path: blob/a-new-beginning/Folium-iOS/Classes/SkinManager/Skin/Button.swift
2 views
//
// Button.swift
// Folium-iOS
//
// Created by Jarrod Norwell on 13/6/2024.
//
import Foundation
import UIKit
struct Button : Codable, Hashable {
enum `Type` : String, Codable, Hashable {
case a = "a"
case b = "b"
case x = "x"
case y = "y"
/*
added for SEGA Genesis and Mega Drive
*/
case c = "c",
z = "z"
case up = "up"
case down = "down"
case left = "left"
case right = "right"
case l = "l"
case r = "r"
case zl = "zl"
case zr = "zr"
case home = "home"
case minus = "minus"
case plus = "plus"
case settings = "settings"
case loadState = "loadState"
case saveState = "saveState"
init(rawValue: String) {
self = switch rawValue {
case "a", "circle": .a
case "b", "cross": .b
case "x", "triangle": .x
case "y", "square": .y
case "c": .c
case "z": .z
case "up", "dpadUp": .up
case "down", "dpadDown": .down
case "left", "dpadLeft": .left
case "right", "dpadRight": .right
case "l", "l1": .l
case "r", "r1": .r
case "zl", "l2": .zl
case "zr", "r2": .zr
case "home": .home
case "minus", "select": .minus
case "plus", "start": .plus
case "settings": .settings
case "loadState": .loadState
case "saveState": .saveState
default: .a
}
}
}
var alpha: Double? = 1
let x, y: Double
let width, height: Double
let type: `Type`
var backgroundImageName: String? = nil
var buttonClassName: String? = "defaultButton"
var transparent: Bool? = false
var vibrateOnTap: Bool? = true
struct BorderedStyle : Codable, Hashable {
let borderColor: String // hex
let borderWidth: CGFloat
}
struct DefaultStyle : Codable, Hashable {
let backgroundImageName: String
}
var borderedStyle: BorderedStyle? = nil
var defaultStyle: DefaultStyle? = nil
func letter(for core: Core) -> String? {
switch type {
case .a:
core.nintendo ? "A" : nil
case .b:
core.nintendo ? "B" : nil
case .x:
core.nintendo ? "X" : nil
case .y:
core.nintendo ? "Y" : nil
case .c:
core.nintendo ? "C" : nil
case .z:
core.nintendo ? "Z" : nil
case .l:
core.nintendo ? "L" : "L1"
case .r:
core.nintendo ? "R" : "R1"
case .zl:
core.nintendo ? "ZL" : "L2"
case .zr:
core.nintendo ? "ZR" : "R2"
default:
nil
}
}
func image(for core: Core) -> UIImage? {
switch type {
case .a:
return .init(systemName: core.nintendo ? "a.circle" : "circle")
case .b:
return .init(systemName: core.nintendo ? "b.circle" : "xmark")
case .x:
return .init(systemName: core.nintendo ? "x.circle" : "triangle")
case .y:
return .init(systemName: core.nintendo ? "y.circle" : "square")
case .c, .z: return nil
case .up:
return .init(systemName: "arrow.up")
case .down:
return .init(systemName: "arrow.down")
case .left:
return .init(systemName: "arrow.left")
case .right:
return .init(systemName: "arrow.right")
case .l, .r: return nil
case .zl, .zr: return nil
case .home:
return .init(systemName: "house")
case .minus:
return .init(systemName: "minus")
case .plus:
return .init(systemName: "plus")
case .settings:
return .init(systemName: "ellipsis")
case .loadState:
// let string = if #available(iOS 18, *) { "arrow.up.document" } else { "arrow.up.doc" }
return .init(systemName: "square.and.arrow.up.on.square")
case .saveState:
// let string = if #available(iOS 18, *) { "arrow.down.document" } else { "arrow.down.doc" }
return .init(systemName: "square.and.arrow.down.on.square")
}
}
}