OSDN Git Service

MOD HMCShipObjectの一部attributeをオプショナルにした
[kcd/KCD.git] / KCD / HMKCShipObject+Extension.swift
1 //
2 //  HMKCShipObject.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2014/12/31.
6 //  Copyright (c) 2014年 Hori,Masaki. All rights reserved.
7 //
8
9 import Foundation
10 import CoreData
11
12 var sShortSTypeNames: [String]?
13 var sLevelUpExps: [NSNumber]?
14
15 extension HMKCShipObject
16 {
17         override class func keyPathsForValuesAffectingValueForKey(key: String) -> NSSet {
18                 switch key {
19                 case "statusColor":
20                         return NSSet(array: ["nowhp", "maxph"])
21                 case "conditionColor":
22                         return NSSet(array: ["cond"])
23                 case "name":
24                         return NSSet(array: ["ship_id"])
25                 case "shortTypeName":
26                         return NSSet(array: ["ship_id"])
27                 default:
28                         return NSSet()
29                 }
30         }
31         
32         var shortSTypeNames: [String] {
33                 if sShortSTypeNames != nil { return sShortSTypeNames! }
34                 if let url = NSBundle.mainBundle().URLForResource("STypeShortName", withExtension: "plist") {
35                         if let array = NSArray(contentsOfURL: url) as? [String] {
36                                 sShortSTypeNames = array
37                         } else {
38                                 println("Can not load STypeShortName.plist.")
39                         }
40                 }
41                 return sShortSTypeNames!
42         }
43         var levelUpExps: [NSNumber] {
44                 if sLevelUpExps != nil { return sLevelUpExps! }
45                 if let url = NSBundle.mainBundle().URLForResource("LevelUpExp", withExtension: "plist") {
46                         if let array = NSArray(contentsOfURL: url) as? [Int] {
47                                 sLevelUpExps = array
48                         } else {
49                                 println("Can not load LevelUpExp.plist.")
50                         }
51                 }
52                 return sLevelUpExps!
53         }
54         
55         
56         var name: String? {
57                 willAccessValueForKey("master_ship")
58                 let name = master_ship?.name
59                 didAccessValueForKey("master_ship")
60                 return name
61         }
62         var shortTypeName: String? {
63                 willAccessValueForKey("master_ship")
64                 let idValue = master_ship?.stype.valueForKey("id") as? NSNumber
65                 didAccessValueForKey("master_ship")
66                 if idValue == nil { return nil }
67                 let id = idValue!.integerValue
68                 if shortSTypeNames.count < id { return nil }
69                 return shortSTypeNames[id - 1]
70         }
71         var next: NSNumber? {
72                 willAccessValueForKey("lv")
73                 let lv = self.lv
74                 didAccessValueForKey("lv")
75                 willAccessValueForKey("exp")
76                 let exp = self.exp
77                 didAccessValueForKey("exp")
78                 
79                 let currentLevel = lv.integerValue
80                 if currentLevel >= levelUpExps.count { return nil }
81                 if currentLevel == 99 { return nil }
82                 
83                 var nextExp = levelUpExps[currentLevel].integerValue
84                 if currentLevel > 99 {
85                         nextExp += 1_000_000
86                 }
87                 return nextExp - exp.integerValue
88         }
89         
90         var statusColor: NSColor {
91                 willAccessValueForKey("maxhp")
92                 let maxhp = self.maxhp.doubleValue
93                 didAccessValueForKey("maxhp")
94                 willAccessValueForKey("nowhp")
95                 let nowhp = self.nowhp.doubleValue
96                 didAccessValueForKey("nowhp")
97                 
98                 let status = nowhp / maxhp
99                 if status <= 0.25 {
100                         return NSColor.redColor()
101                 }
102                 if status <= 0.5 {
103                         return NSColor.orangeColor()
104                 }
105                 if status <= 0.75 {
106                         return NSColor.yellowColor()
107                 }
108                 return NSColor.controlTextColor()
109         }
110         var conditionColor: NSColor {
111                 return NSColor.controlTextColor()
112         }
113         var planColor: NSColor {
114                 if !HMUserDefaults.hmStandardDefauls().showsPlanColor {
115                         return NSColor.controlTextColor()
116                 }
117                 willAccessValueForKey("sally_area")
118                 let planType = sally_area?.integerValue
119                 didAccessValueForKey("sally_area")
120                 if planType == nil { return NSColor.controlTextColor() }
121                 switch planType! {
122                 case 1:
123                         return HMUserDefaults.hmStandardDefauls().plan01Color
124                 case 2:
125                         return HMUserDefaults.hmStandardDefauls().plan02Color
126                 case 2:
127                         return HMUserDefaults.hmStandardDefauls().plan03Color
128                 default:
129                         return NSColor.controlTextColor()
130                 }
131         }
132         var maxFuel: NSNumber? {
133                 willAccessValueForKey("master_ship")
134                 let number = master_ship?.fuel_max
135                 didAccessValueForKey("master_ship")
136                 return number
137         }
138         var maxBull: NSNumber? {
139                 willAccessValueForKey("master_ship")
140                 let number = master_ship?.bull_max
141                 didAccessValueForKey("master_ship")
142                 return number
143         }
144         var upgradeLevel: NSNumber? {
145                 willAccessValueForKey("master_ship")
146                 let number = master_ship?.afterlv
147                 didAccessValueForKey("master_ship")
148                 return number
149         }
150         var upgradeExp: NSNumber? {
151                 let upgradeLevel = self.upgradeLevel?.integerValue
152                 if upgradeLevel == nil || upgradeLevel! <= 0 { return nil }
153                 
154                 var upgradeExp = levelUpExps[upgradeLevel! - 1].integerValue
155                 upgradeExp = upgradeExp - exp.integerValue
156                 if upgradeExp < 0 { upgradeExp = 0 }
157                 return upgradeExp
158         }
159         
160         var isMaxKaryoku: NSNumber {
161                 willAccessValueForKey("master_ship")
162                 let defaultValue = master_ship?.houg_0?.integerValue
163                 didAccessValueForKey("master_ship")
164                 willAccessValueForKey("karyoku_1")
165                 let maxValue = karyoku_1?.integerValue
166                 didAccessValueForKey("karyoku_1")
167                 willAccessValueForKey("kyouka_0")
168                 let growth = kyouka_0?.integerValue
169                 didAccessValueForKey("kyouka_0")
170                 if defaultValue == nil || maxValue == nil || growth == nil { return 0 }
171                 
172                 return defaultValue! + growth! >= maxValue!
173         }
174         var isMaxRaisou: NSNumber {
175                 willAccessValueForKey("master_ship")
176                 let defaultValue = master_ship?.raig_0?.integerValue
177                 didAccessValueForKey("master_ship")
178                 willAccessValueForKey("raisou_1")
179                 let maxValue = raisou_1?.integerValue
180                 didAccessValueForKey("raisou_1")
181                 willAccessValueForKey("kyouka_1")
182                 let growth = kyouka_1?.integerValue
183                 didAccessValueForKey("kyouka_1")
184                 if defaultValue == nil || maxValue == nil || growth == nil { return 0 }
185                 
186                 return defaultValue! + growth! >= maxValue!
187         }
188         var isMaxTaiku: NSNumber {
189                 willAccessValueForKey("master_ship")
190                 let defaultValue = master_ship?.tyku_0?.integerValue
191                 didAccessValueForKey("master_ship")
192                 willAccessValueForKey("taiku_1")
193                 let maxValue = taiku_1?.integerValue
194                 didAccessValueForKey("taiku_1")
195                 willAccessValueForKey("kyouka_2")
196                 let growth = kyouka_2?.integerValue
197                 didAccessValueForKey("kyouka_2")
198                 if defaultValue == nil || maxValue == nil || growth == nil { return 0 }
199                 
200                 return defaultValue! + growth! >= maxValue!
201         }
202         var isMaxSoukou: NSNumber {
203                 willAccessValueForKey("master_ship")
204                 let defaultValue = master_ship?.souk_0?.integerValue
205                 didAccessValueForKey("master_ship")
206                 willAccessValueForKey("soukou_1")
207                 let maxValue = soukou_1?.integerValue
208                 didAccessValueForKey("soukou_1")
209                 willAccessValueForKey("kyouka_3")
210                 let growth = kyouka_3?.integerValue
211                 didAccessValueForKey("kyouka_3")
212                 if defaultValue == nil || maxValue == nil || growth == nil { return 0 }
213                 
214                 return defaultValue! + growth! >= maxValue!
215         }
216         var isMaxLucky: NSNumber {
217                 willAccessValueForKey("master_ship")
218                 let defaultValue = master_ship?.luck_0?.integerValue
219                 didAccessValueForKey("master_ship")
220                 willAccessValueForKey("lucky_1")
221                 let maxValue = lucky_1?.integerValue
222                 didAccessValueForKey("lucky_1")
223                 willAccessValueForKey("kyouka_4")
224                 let growth = kyouka_4?.integerValue
225                 didAccessValueForKey("kyouka_4")
226                 if defaultValue == nil || maxValue == nil || growth == nil { return 0 }
227                 
228                 return defaultValue! + growth! >= maxValue!
229         }
230 }