OSDN Git Service

ColorSetを変更
[kcd/KCD.git] / KCD / ColorSet.swift
1 //
2 //  ColorSet.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2018/06/24.
6 //  Copyright © 2018年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 struct ColorName {
12     
13     let name: String
14     
15     init(name: String) {
16         
17         self.name = name
18     }
19     
20     init(_ name: String) {
21         
22         self.name = name
23     }
24 }
25
26 extension ColorName: Equatable {
27     
28     static func == (lhs: ColorName, rhs: ColorName) -> Bool {
29         
30         return lhs.name == rhs.name
31     }
32 }
33
34 extension ColorName {
35     
36     // for DamageView
37     static let damageViewInnerSlightly = ColorName("DamageView.inner.slightly")
38     static let damageViewInnerModest = ColorName("DamageView.inner.modest")
39     static let damageViewInnerBadly = ColorName("DamageView.inner.badly")
40     static let damageViewBoarderSlightly = ColorName("DamageView.border.slightly")
41     static let damageViewBoarderModest = ColorName("DamageView.border.modest")
42     static let damageViewBoarderBadly = ColorName("DamageView.border.badly")
43     
44     // for AirPlanInfoView
45     static let airPlanInforViewNormal = ColorName("AirPlanInfoView.normal")
46     static let airPlanInforViewTired = ColorName("AirPlanInfoView.tired")
47     static let airPlanInforViewBad = ColorName("AirPlanInfoView.bad")
48     static let airPlanInforViewBoarderNormal = ColorName("AirPlanInfoView.boarder.normal")
49     static let airPlanInforViewBoarderTired = ColorName("AirPlanInfoView.border.tired")
50     static let airPlanInforViewBoarderBad = ColorName("AirPlanInfoView.boarder.bad")
51     
52     // for SuppliesCell
53     static let suppliesCellGreen = ColorName("SuppliesCell.greenColor")
54     static let suppliesCellYellow = ColorName("SuppliesCell.yellowColor")
55     static let suppliesCellOrange = ColorName("SuppliesCell.orangeColor")
56     static let suppliesCellRedColor = ColorName("SuppliesCell.redColor")
57     static let suppliesCellBorder = ColorName("SuppliesCell.borderColor")
58     static let suppliesCellBackground = ColorName("SuppliesCell.backgroundColor")
59     
60     // for SlotItemLevelView
61     static let slotItemLevelViewLevel = ColorName("SlotItemLevelView.levelColor")
62     static let slotItemLevelViewLowAirLevel = ColorName("SlotItemLevelView.airLevel.low")
63     static let slotItemLevelViewHighAirLevel = ColorName("SlotItemLevelView.airLevel.high")
64     static let slotItemLevelViewLowAirLevelShadow = ColorName("SlotItemLevelView.airLevel.low.shadow")
65     static let slotItemLevelViewHighAirLevelShadow = ColorName("SlotItemLevelView.airLevel.high.shadow")
66 }
67
68 protocol ColorSet {
69     
70     subscript(named: ColorName) -> NSColor { get }
71 }
72
73
74 struct ColorSetManager {
75     
76     static var current: ColorSet {
77         
78         if NSWorkspace.shared.accessibilityDisplayShouldIncreaseContrast {
79             
80             return HighContrastColorSet.shared
81         }
82         
83         return DefaultColorSet.shared
84     }
85 }
86
87 private struct DefaultColorSet: ColorSet {
88     
89     static let shared = DefaultColorSet()
90     
91     subscript(named: ColorName) -> NSColor {
92         
93         switch named {
94             
95         case .damageViewInnerSlightly: return #colorLiteral(red: 1.000, green: 0.956, blue: 0.012, alpha: 0.5)
96             
97         case .damageViewInnerModest: return NSColor.orange.withAlphaComponent(0.5)
98             
99         case .damageViewInnerBadly: return NSColor.red.withAlphaComponent(0.5)
100             
101         case .damageViewBoarderSlightly: return NSColor.orange.withAlphaComponent(0.5)
102             
103         case .damageViewBoarderModest: return NSColor.orange.withAlphaComponent(0.9)
104             
105         case .damageViewBoarderBadly: return NSColor.red.withAlphaComponent(0.9)
106             
107             
108         case .airPlanInforViewNormal: return .clear
109             
110         case .airPlanInforViewTired: return #colorLiteral(red: 1, green: 0.7233425379, blue: 0.1258574128, alpha: 0.8239436619)
111             
112         case .airPlanInforViewBad: return #colorLiteral(red: 0.7320367694, green: 0.07731548697, blue: 0.06799335033, alpha: 1)
113             
114         case .airPlanInforViewBoarderNormal: return .clear
115             
116         case .airPlanInforViewBoarderTired: return #colorLiteral(red: 0.458858192, green: 0.3335277438, blue: 0.07979661971, alpha: 1)
117             
118         case .airPlanInforViewBoarderBad: return #colorLiteral(red: 0.5462518334, green: 0.04599834234, blue: 0.04913448542, alpha: 1)
119             
120             
121         case .suppliesCellGreen: return NSColor(calibratedWhite: 0.39, alpha: 1.0)
122             
123         case .suppliesCellYellow: return NSColor(calibratedWhite: 0.55, alpha: 1.0)
124             
125         case .suppliesCellOrange: return NSColor(calibratedWhite: 0.7, alpha: 1.0)
126             
127         case .suppliesCellRedColor: return NSColor(calibratedWhite: 0.79, alpha: 1.0)
128             
129         case .suppliesCellBorder: return .gridColor
130             
131         case .suppliesCellBackground: return .controlColor
132             
133             
134         case .slotItemLevelViewLevel: return #colorLiteral(red: 0.135, green: 0.522, blue: 0.619, alpha: 1)
135             
136         case .slotItemLevelViewLowAirLevel: return #colorLiteral(red: 0.257, green: 0.523, blue: 0.643, alpha: 1)
137             
138         case .slotItemLevelViewHighAirLevel: return #colorLiteral(red: 0.784, green: 0.549, blue: 0.000, alpha: 1)
139             
140         case .slotItemLevelViewLowAirLevelShadow: return #colorLiteral(red: 0.095, green: 0.364, blue: 0.917, alpha: 1)
141             
142         case .slotItemLevelViewHighAirLevelShadow: return .yellow
143             
144         default: return .clear
145             
146         }
147     }
148 }
149
150
151 private struct HighContrastColorSet: ColorSet {
152     
153     
154     static let shared = HighContrastColorSet()
155     
156     subscript(named: ColorName) -> NSColor {
157         
158         switch named {
159             
160         case .damageViewBoarderSlightly: return .red
161             
162         case .damageViewBoarderModest: return .red
163             
164         case .damageViewBoarderBadly: return .red
165             
166         default: return DefaultColorSet.shared[named]
167         }
168     }
169 }
170
171 private struct DarkModeColorSet: ColorSet {
172     
173     private static let shared = DarkModeColorSet()
174     
175     subscript(named: ColorName) -> NSColor {
176         
177         switch named {
178             
179         default: return DefaultColorSet.shared[named]
180         }
181     }
182 }