2 // DocksViewController.swift
5 // Created by Hori,Masaki on 2016/12/25.
6 // Copyright © 2016年 Hori,Masaki. All rights reserved.
11 class DocksViewController: MainTabVIewItemViewController {
13 ["deck2Time", "mission2Name",
14 "deck3Time", "mission3Name",
15 "deck4Time", "mission4Name"]
16 .forEach { unbind($0) }
17 ["nDock1Time", "nDock1ShipName",
18 "nDock2Time", "nDock2ShipName",
19 "nDock3Time", "nDock3ShipName",
20 "nDock4Time", "nDock4ShipName"]
21 .forEach { unbind($0) }
22 ["kDock1Time", "kDock2Time", "kDock3Time", "kDock4Time"]
23 .forEach { unbind($0) }
25 ["selection", "selection.no", "content.battleCell"]
27 battleContoller.removeObserver(self, forKeyPath: $0)
31 let managedObjectContext = ServerDataStore.default.context
32 let battleManagedObjectController = TemporaryDataStore.default.context
33 let questListViewController = QuestListViewController()
35 let missionStates = (2...4).flatMap { MissionStatus(number: $0) }
36 let ndockStatus = (1...4).flatMap { NyukyoDockStatus(number: $0) }
37 let kdockStatus = (1...4).flatMap { KenzoDockStatus(number: $0) }
39 var nDock1Time: NSNumber?
40 var nDock2Time: NSNumber?
41 var nDock3Time: NSNumber?
42 var nDock4Time: NSNumber?
44 var nDock1ShipName: String?
45 var nDock2ShipName: String?
46 var nDock3ShipName: String?
47 var nDock4ShipName: String?
49 var kDock1Time: NSNumber?
50 var kDock2Time: NSNumber?
51 var kDock3Time: NSNumber?
52 var kDock4Time: NSNumber?
54 var deck2Time: NSNumber?
55 var deck3Time: NSNumber?
56 var deck4Time: NSNumber?
58 var mission2Name: String?
59 var mission3Name: String?
60 var mission4Name: String?
62 @IBOutlet var battleContoller: NSObjectController!
63 @IBOutlet weak var questListViewPlaceholder: NSView!
64 @IBOutlet weak var cellNumberField: NSTextField!
66 override var nibName: String! {
67 return "DocksViewController"
71 return TemporaryDataStore.default.battle()
75 return battleContoller.value(forKeyPath: "content.no") as? Int ?? 0
77 var battleCellNumber: Int {
78 return battleContoller.value(forKeyPath: "content.battleCell") as? Int ?? 0
80 var isBossCell: Bool {
81 return battleContoller.value(forKeyPath: "content.isBossCell") as? Bool ?? false
83 var fleetName: String? {
84 guard let deckId = battleContoller.value(forKeyPath: "content.deckId") as? Int else { return nil }
85 return ServerDataStore.default.deck(byId: deckId)?.name
87 var areaNumber: String? {
88 let mapArea: String = {
89 guard let mapArea = battleContoller.value(forKeyPath: "content.mapArea") as? Int else { return "" }
90 if mapArea > 10 { return "E" }
93 guard mapArea != "" else { return nil }
94 guard let mapInfo = battleContoller.value(forKeyPath: "content.mapInfo") as? Int else { return "" }
95 return "\(mapArea)-\(mapInfo)"
97 var areaName: String? {
98 guard let mapArea = battleContoller.value(forKeyPath: "content.mapArea") as? Int,
99 let mapInfo = battleContoller.value(forKeyPath: "content.mapInfo") as? Int
102 return ServerDataStore.default.mapInfo(area: mapArea, no: mapInfo)?.name
104 var sortieString: String? {
105 guard let fleetName = self.fleetName,
106 let areaName = self.areaName,
107 let areaNumber = self.areaNumber
109 if battleCellNumber == 0 {
110 let format = NSLocalizedString("%@ in sortie into %@ (%@)", comment: "Sortie")
111 return String(format: format, arguments: [fleetName, areaName, areaNumber])
114 let format = NSLocalizedString("%@ battle against the enemy main fleet at %@ war zone in %@ (%@) now",
116 return String(format: format, arguments: [fleetName, battleCellNumber as NSNumber, areaName, areaNumber])
118 let format = NSLocalizedString("%@ battle at %@ war zone in %@ (%@) now", comment: "Sortie")
119 return String(format: format, arguments: [fleetName, battleCellNumber as NSNumber, areaName, areaNumber])
122 override func viewDidLoad() {
127 AppDelegate.shared.addCounterUpdate {
128 self.missionStates.forEach { $0.update() }
129 self.kdockStatus.forEach { $0.update() }
130 self.ndockStatus.forEach { $0.update() }
133 questListViewController.view.frame = questListViewPlaceholder.frame
134 questListViewController.view.autoresizingMask = questListViewPlaceholder.autoresizingMask
135 questListViewPlaceholder.superview?.replaceSubview(questListViewPlaceholder, with: questListViewController.view)
137 ["selection", "selection.no", "content.battleCell"]
139 battleContoller.addObserver(self, forKeyPath: $0, context: nil)
143 cellNumberField.isHidden = false
147 override func observeValue(forKeyPath keyPath: String?,
149 change: [NSKeyValueChangeKey: Any]?,
150 context: UnsafeMutableRawPointer?) {
151 if keyPath == "selection" || keyPath == "content.battleCell" {
152 notifyChangeValue(forKey: "sortieString")
155 if keyPath == "selection.no" {
156 notifyChangeValue(forKey: "cellNumber")
160 super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
163 private func setupStatus() {
165 ("deck2Time", "mission2Name"),
166 ("deck3Time", "mission3Name"),
167 ("deck4Time", "mission4Name")
169 zip(missionStates, missionKeys).forEach {
170 bind($0.1.0, to: $0.0, withKeyPath: "time", options: nil)
171 bind($0.1.1, to: $0.0, withKeyPath: "name", options: nil)
175 ("nDock1Time", "nDock1ShipName"),
176 ("nDock2Time", "nDock2ShipName"),
177 ("nDock3Time", "nDock3ShipName"),
178 ("nDock4Time", "nDock4ShipName")
180 zip(ndockStatus, ndockKeys).forEach {
181 bind($0.1.0, to: $0.0, withKeyPath: "time", options: nil)
182 bind($0.1.1, to: $0.0, withKeyPath: "name", options: nil)
185 let kdockKeys = ["kDock1Time", "kDock2Time", "kDock3Time", "kDock4Time"]
186 zip(kdockStatus, kdockKeys).forEach {
187 bind($0.1, to: $0.0, withKeyPath: "time", options: nil)