2 // EnhancementListItem.swift
5 // Created by Hori,Masaki on 2017/01/25.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
12 enum EquipmentType: Int {
15 case smallCaliberMainGun = 1
16 case mediumCaliberMainGun = 2
17 case largeCaliberMainGun = 3
24 case airplaneSearcher = 10
25 case airplaneBomber = 11
30 case armorPiercingShell = 16
31 case EngineImprovement = 17
35 case antiAircraftGun = 21
36 case specialSubmarine = 22
37 case damageControl = 23
38 case LandingCraft = 24
40 case antiSunmrinerSercher = 26
41 case armorPiercingShellMiddle = 27
42 case armorPiercingShellLarge = 28
46 case submarinTorpedo = 32
50 case antiAircraftSystem = 36
51 case antiLandSystem = 37
52 case largeCaliberMainGunII = 38
53 case shipPersonnel = 39
55 case largeAirplane = 41
56 case largeSearchlight = 42
59 case airplaneFighter = 45
61 case landAttecker = 47
62 case localFighter = 48
65 case TransportationMaterial = 50
66 case SubmarineEquipment = 51
83 case largeLadarII = 93
94 class EnhancementListItem: NSObject, NSCoding, NSCopying {
95 let identifier: String
97 let equipmentType: EquipmentType
98 let targetEquipment: String
99 let remodelEquipment: String?
100 let requiredEquipments: RequiredEquipmentSet
101 let secondsShipNames: [String]
103 init(identifier: String,
105 equipmentType: EquipmentType,
106 targetEquipment: String,
107 remodelEquipment: String?,
108 requiredEquipments: RequiredEquipmentSet,
109 secondsShipNames: [String]) {
110 self.identifier = identifier
111 self.weekday = weekday
112 self.equipmentType = equipmentType
113 self.targetEquipment = targetEquipment
114 self.remodelEquipment = remodelEquipment
115 self.requiredEquipments = requiredEquipments
116 self.secondsShipNames = secondsShipNames
119 func replace(identifier: String? = nil,
121 equipmentType: EquipmentType? = nil,
122 targetEquipment: String? = nil,
123 remodelEquipment: String? = nil,
124 requiredEquipments: RequiredEquipmentSet? = nil,
125 secondsShipNames: [String]? = nil) -> EnhancementListItem {
126 return EnhancementListItem(identifier: identifier ?? self.identifier,
127 weekday: weekday ?? self.weekday,
128 equipmentType: equipmentType ?? self.equipmentType,
129 targetEquipment: targetEquipment ?? self.targetEquipment,
130 remodelEquipment: remodelEquipment ?? self.remodelEquipment,
131 requiredEquipments: requiredEquipments ?? self.requiredEquipments,
132 secondsShipNames: secondsShipNames ?? self.secondsShipNames)
136 static let identifier = "EnhancementListItemIdentifier"
137 static let weekday = "weekday"
138 static let equipmentType = "equipmentType"
139 static let targetEquipment = "targetEquipment"
140 static let remodelEquipment = "remodelEquipment"
141 static let requiredEquipments = "requiredEquipments"
142 static let secondsShipNames = "secondsShipNames"
144 required convenience init?(coder aDecoder: NSCoder) {
145 guard let i = aDecoder.decodeObject(forKey: CodeKey.identifier) as? String,
146 let e = EquipmentType(rawValue: aDecoder.decodeInteger(forKey: CodeKey.equipmentType)),
147 let t = aDecoder.decodeObject(forKey: CodeKey.targetEquipment) as? String,
148 let req = aDecoder.decodeObject(forKey: CodeKey.requiredEquipments) as? RequiredEquipmentSet,
149 let s = aDecoder.decodeObject(forKey: CodeKey.secondsShipNames) as? [String]
150 else { print("Can not decode EnhancementListItem"); return nil }
151 let w = aDecoder.decodeInteger(forKey: CodeKey.weekday)
152 let rem = aDecoder.decodeObject(forKey: CodeKey.remodelEquipment) as? String
153 self.init(identifier: i,
157 remodelEquipment: rem,
158 requiredEquipments: req,
161 func encode(with aCoder: NSCoder) {
162 aCoder.encode(identifier, forKey: CodeKey.identifier)
163 aCoder.encode(weekday, forKey: CodeKey.weekday)
164 aCoder.encode(equipmentType.rawValue, forKey: CodeKey.equipmentType)
165 aCoder.encode(targetEquipment, forKey: CodeKey.targetEquipment)
166 aCoder.encode(remodelEquipment, forKey: CodeKey.remodelEquipment)
167 aCoder.encode(requiredEquipments, forKey: CodeKey.requiredEquipments)
168 aCoder.encode(secondsShipNames, forKey: CodeKey.secondsShipNames)
170 func copy(with zone: NSZone? = nil) -> Any {
171 return EnhancementListItem(identifier: identifier,
173 equipmentType: equipmentType,
174 targetEquipment: targetEquipment,
175 remodelEquipment: remodelEquipment,
176 requiredEquipments: requiredEquipments,
177 secondsShipNames: secondsShipNames)
181 class RequiredEquipmentSet: NSObject, NSCoding, NSCopying {
182 let identifier: String
183 let requiredEquipments: [RequiredEquipment]
185 init(identifier: String, requiredEquipments: [RequiredEquipment]) {
186 self.identifier = identifier
187 self.requiredEquipments = requiredEquipments
192 static let identifier = "RequiredEquipmentSetIdentifier"
193 static let requiredEquipments = "requiredEquipments"
195 required convenience init?(coder aDecoder: NSCoder) {
196 guard let i = aDecoder.decodeObject(forKey: CodeKey.identifier) as? String,
197 let r = aDecoder.decodeObject(forKey: CodeKey.requiredEquipments) as? [RequiredEquipment]
198 else { print("Can not decode RequiredEquipmentSet"); return nil }
199 self.init(identifier: i, requiredEquipments: r)
201 func encode(with aCoder: NSCoder) {
202 aCoder.encode(identifier, forKey: CodeKey.identifier)
203 aCoder.encode(requiredEquipments, forKey: CodeKey.requiredEquipments)
205 func copy(with zone: NSZone? = nil) -> Any {
206 return RequiredEquipmentSet(identifier: identifier,
207 requiredEquipments: requiredEquipments)
211 class RequiredEquipment: NSObject, NSCoding, NSCopying {
212 let identifier: String
213 let currentLevelString: String
219 init(identifier: String, levelRange: String, name: String, number: Int, screw: Int, ensureScrew: Int) {
220 self.identifier = identifier
221 self.currentLevelString = levelRange
225 self.ensureScrew = ensureScrew
229 // MARK: - NSCoding, NSCopying
231 static let identifier = "RequiredEquipmentIdentifier"
232 static let currentLevelString = "currentLevelString"
233 static let name = "name"
234 static let number = "number"
235 static let screw = "screw"
236 static let ensureScrew = "ensureScrew"
238 required convenience init?(coder aDecoder: NSCoder) {
239 guard let i = aDecoder.decodeObject(forKey: CodeKey.identifier) as? String,
240 let c = aDecoder.decodeObject(forKey: CodeKey.currentLevelString) as? String,
241 let na = aDecoder.decodeObject(forKey: CodeKey.name) as? String
242 else { print("Can not decode RequiredEquipment"); return nil }
243 let nu = aDecoder.decodeInteger(forKey: CodeKey.number)
244 let s = aDecoder.decodeInteger(forKey: CodeKey.screw)
245 let e = aDecoder.decodeInteger(forKey: CodeKey.ensureScrew)
246 self.init(identifier: i, levelRange: c, name: na, number: nu, screw: s, ensureScrew: e)
248 func encode(with aCoder: NSCoder) {
249 aCoder.encode(identifier, forKey: CodeKey.identifier)
250 aCoder.encode(currentLevelString, forKey: CodeKey.currentLevelString)
251 aCoder.encode(name, forKey: CodeKey.name)
252 aCoder.encode(number, forKey: CodeKey.number)
253 aCoder.encode(screw, forKey: CodeKey.screw)
254 aCoder.encode(ensureScrew, forKey: CodeKey.ensureScrew)
256 func copy(with zone: NSZone? = nil) -> Any {
257 return RequiredEquipment(identifier: identifier,
258 levelRange: currentLevelString,
262 ensureScrew: ensureScrew)
266 extension RequiredEquipment {
267 dynamic var numberString: String? {
268 if number == 0 { return nil }
269 if number == -1 { return "-" }