metaballs/MetaballsKit/Preferences.swift

109 lines
2.6 KiB
Swift

//
// Preferences.swift
// Metaballs
//
// Created by Eryn Wells on 8/14/17.
// Copyright © 2017 Eryn Wells. All rights reserved.
//
import Cocoa
extension UserDefaults {
public var target: Float {
get {
if let obj = object(forKey: "target") as? NSNumber {
return obj.floatValue
} else {
let defaultValue: Float = 1.0
set(defaultValue, forKey: "target")
return defaultValue
}
}
set {
set(newValue, forKey: "target")
}
}
public var feather: Float {
get {
if let obj = object(forKey: "feather") as? NSNumber {
return obj.floatValue
} else {
let defaultValue: Float = 0.25
set(defaultValue, forKey: "target")
return defaultValue
}
}
set {
set(newValue, forKey: "feather")
}
}
public var colorStyle: ColorStyle? {
get {
let value = integer(forKey: "colorStyle")
if let colorStyle = ColorStyle(rawValue: UInt16(value)) {
return colorStyle
}
return nil
}
set {
if let style = newValue {
set(style.rawValue, forKey: "colorStyle")
} else {
set(nil as Any?, forKey: "colorStyle")
}
}
}
public var color0: Float4? {
get {
return float4(forKey: "color0")
}
set {
set(newValue, forKey: "color0")
}
}
public var color1: Float4? {
get {
return float4(forKey: "color1")
}
set {
set(newValue, forKey: "color1")
}
}
public var color2: Float4? {
get {
return float4(forKey: "color2")
}
set {
set(newValue, forKey: "color2")
}
}
public var color3: Float4? {
get {
return float4(forKey: "color3")
}
set {
set(newValue, forKey: "color3")
}
}
func float4(forKey key: String) -> Float4? {
guard let values = array(forKey: key) as? [Float], values.count >= 4 else {
return nil
}
return Float4(values[0], values[1], values[2], values[3])
}
func set(_ value: Float4?, forKey key: String) {
if let value = value {
set([Float](float4: value), forKey: key)
} else {
set(nil as Any?, forKey: key)
}
}
}