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")]
20 [("nDock1Time", "nDock1ShipName"),
21 ("nDock2Time", "nDock2ShipName"),
22 ("nDock3Time", "nDock3ShipName"),
23 ("nDock4Time", "nDock4ShipName")]
28 ["kDock1Time", "kDock2Time", "kDock3Time", "kDock4Time"]
29 .forEach { unbind($0) }
31 ["selection", "selection.no", "content.battleCell"]
33 battleContoller.removeObserver(self, forKeyPath: $0)
37 let managedObjectContext = ServerDataStore.default.managedObjectContext
38 let battleManagedObjectController = TemporaryDataStore.default.managedObjectContext
39 let questListViewController = QuestListViewController()
41 let missionStates = (2...4).flatMap { MissionStatus(number: $0) }
42 let ndockStatus = (1...4).flatMap { NyukyoDockStatus(number: $0) }
43 let kdockStatus = (1...4).flatMap { KenzoDockStatus(number: $0) }
45 var nDock1Time: NSNumber? = nil
46 var nDock2Time: NSNumber? = nil
47 var nDock3Time: NSNumber? = nil
48 var nDock4Time: NSNumber? = nil
50 var nDock1ShipName: String? = nil
51 var nDock2ShipName: String? = nil
52 var nDock3ShipName: String? = nil
53 var nDock4ShipName: String? = nil
55 var kDock1Time: NSNumber? = nil
56 var kDock2Time: NSNumber? = nil
57 var kDock3Time: NSNumber? = nil
58 var kDock4Time: NSNumber? = nil
60 var deck2Time: NSNumber? = nil
61 var deck3Time: NSNumber? = nil
62 var deck4Time: NSNumber? = nil
64 var mission2Name: String? = nil
65 var mission3Name: String? = nil
66 var mission4Name: String? = nil
68 @IBOutlet var battleContoller: NSObjectController!
69 @IBOutlet weak var questListViewPlaceholder: NSView!
70 @IBOutlet weak var cellNumberField: NSTextField!
72 override var nibName: String! {
73 return "DocksViewController"
77 return TemporaryDataStore.default.battle()
81 return battleContoller.value(forKeyPath: "content.no") as? Int ?? 0
83 var battleCellNumber: Int {
84 return battleContoller.value(forKeyPath: "content.battleCell") as? Int ?? 0
86 var isBossCell: Bool {
87 return battleContoller.value(forKeyPath: "content.isBossCell") as? Bool ?? false
89 var fleetName: String? {
90 guard let deckId = battleContoller.value(forKeyPath: "content.deckId") as? Int else { return nil }
91 return ServerDataStore.default.deck(byId: deckId)?.name
93 var areaNumber: String? {
94 let mapArea: String = {
95 guard let mapArea = battleContoller.value(forKeyPath: "content.mapArea") as? Int else { return "" }
96 if mapArea > 10 { return "E" }
99 guard mapArea != "" else { return nil }
100 guard let mapInfo = battleContoller.value(forKeyPath: "content.mapInfo") as? Int else { return "" }
101 return "\(mapArea)-\(mapInfo)"
103 var areaName: String? {
104 guard let mapArea = battleContoller.value(forKeyPath: "content.mapArea") as? Int,
105 let mapInfo = battleContoller.value(forKeyPath: "content.mapInfo") as? Int
108 return ServerDataStore.default.mapInfo(area: mapArea, no: mapInfo)?.name
110 var sortieString: String? {
111 guard let fleetName = self.fleetName,
112 let areaName = self.areaName,
113 let areaNumber = self.areaNumber
115 if battleCellNumber == 0 {
116 let format = NSLocalizedString("%@ in sortie into %@ (%@)", comment: "Sortie")
117 return String(format: format, arguments: [fleetName, areaName, areaNumber])
120 let format = NSLocalizedString("%@ battle against the enemy main fleet at %@ war zone in %@ (%@) now", comment: "Sortie")
121 return String(format: format, arguments: [fleetName, battleCellNumber as NSNumber, areaName, areaNumber])
123 let format = NSLocalizedString("%@ battle at %@ war zone in %@ (%@) now", comment: "Sortie")
124 return String(format: format, arguments: [fleetName, battleCellNumber as NSNumber, areaName, areaNumber])
127 override func viewDidLoad() {
132 AppDelegate.shared.addCounterUpdate {
133 self.missionStates.forEach { $0.update() }
134 self.kdockStatus.forEach { $0.update() }
135 self.ndockStatus.forEach { $0.update() }
138 questListViewController.view.frame = questListViewPlaceholder.frame
139 questListViewController.view.autoresizingMask = questListViewPlaceholder.autoresizingMask
140 questListViewPlaceholder.superview?.replaceSubview(questListViewPlaceholder, with: questListViewController.view)
142 ["selection", "selection.no", "content.battleCell"]
144 battleContoller.addObserver(self, forKeyPath: $0, context: nil)
148 cellNumberField.isHidden = false
152 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
153 if keyPath == "selection" || keyPath == "content.battleCell" {
154 willChangeValue(forKey: "sortieString")
155 didChangeValue(forKey: "sortieString")
158 if keyPath == "selection.no" {
159 willChangeValue(forKey: "cellNumber")
160 didChangeValue(forKey: "cellNumber")
164 super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
167 private func setupStatus() {
169 ("deck2Time", "mission2Name"),
170 ("deck3Time", "mission3Name"),
171 ("deck4Time", "mission4Name")
173 zip(missionStates, missionKeys).forEach {
174 bind($0.1.0, to: $0.0, withKeyPath: "time", options: nil)
175 bind($0.1.1, to: $0.0, withKeyPath: "name", options: nil)
179 ("nDock1Time", "nDock1ShipName"),
180 ("nDock2Time", "nDock2ShipName"),
181 ("nDock3Time", "nDock3ShipName"),
182 ("nDock4Time", "nDock4ShipName")
184 zip(ndockStatus, ndockKeys).forEach {
185 bind($0.1.0, to: $0.0, withKeyPath: "time", options: nil)
186 bind($0.1.1, to: $0.0, withKeyPath: "name", options: nil)
189 let kdockKeys = ["kDock1Time", "kDock2Time", "kDock3Time", "kDock4Time"]
190 zip(kdockStatus, kdockKeys).forEach {
191 bind($0.1, to: $0.0, withKeyPath: "time", options: nil)