OSDN Git Service

洋上補給の補強増設用のショートネームをつけた
[kcd/KCD.git] / KCD / DocksViewController.swift
1 //
2 //  DocksViewController.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2016/12/25.
6 //  Copyright © 2016年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 protocol DockInformationUpdater: class {
12     
13     func update()
14 }
15
16 final class DocksViewController: MainTabVIewItemViewController {
17     
18     @objc let managedObjectContext = ServerDataStore.default.context
19     let questListViewController = QuestListViewController()
20     let battleInfoViewController = BattleInformationViewController()
21     
22     private var updaters: [DockInformationUpdater] = []
23     
24     @objc dynamic var nDock1Time: NSNumber?
25     @objc dynamic var nDock2Time: NSNumber?
26     @objc dynamic var nDock3Time: NSNumber?
27     @objc dynamic var nDock4Time: NSNumber?
28     
29     @objc dynamic var nDock1ShipName: String?
30     @objc dynamic var nDock2ShipName: String?
31     @objc dynamic var nDock3ShipName: String?
32     @objc dynamic var nDock4ShipName: String?
33     
34     @objc dynamic var kDock1Time: NSNumber?
35     @objc dynamic var kDock2Time: NSNumber?
36     @objc dynamic var kDock3Time: NSNumber?
37     @objc dynamic var kDock4Time: NSNumber?
38     
39     @objc dynamic var deck2Time: NSNumber?
40     @objc dynamic var deck3Time: NSNumber?
41     @objc dynamic var deck4Time: NSNumber?
42     
43     @objc dynamic var mission2Name: String?
44     @objc dynamic var mission3Name: String?
45     @objc dynamic var mission4Name: String?
46     
47     @IBOutlet private weak var battleInformationViewPlaceholder: NSView!
48     @IBOutlet private weak var questListViewPlaceholder: NSView!
49     
50     override var nibName: NSNib.Name {
51         
52         return .nibName(instanceOf: self)
53     }
54     
55     override func viewDidLoad() {
56         
57         super.viewDidLoad()
58         
59         setupStatus()
60         
61         replace(view: battleInformationViewPlaceholder, with: battleInfoViewController)
62         replace(view: questListViewPlaceholder, with: questListViewController)
63     }
64     
65     private func setupStatus() {
66                 
67         (2...4).forEach {
68             
69             createMissionSatusFuture(number: $0)
70                 .onSuccess { status in
71                     
72                     self.updaters += [status]
73                     status.delegate = self
74                 }
75                 .onFailure { error in
76                     
77                     Logger.shared.log("\(error)")
78             }
79         }
80         
81         (1...4).forEach {
82             
83             createNyukyoDockStatusFuture(number: $0)
84                 .onSuccess { status in
85                     
86                     self.updaters += [status]
87                     status.delegate = self
88                 }
89                 .onFailure { error in
90                     
91                     Logger.shared.log("\(error)")
92             }
93             
94             createKenzoDockStatusFuture(number: $0)
95                 .onSuccess { status in
96                     
97                     self.updaters += [status]
98                     status.delegate = self
99                 }
100                 .onFailure { error in
101                     
102                     Logger.shared.log("\(error)")
103             }
104         }
105         
106         AppDelegate.shared.addCounterUpdate {
107             
108             self.updaters.forEach { $0.update() }
109         }
110     }
111 }
112
113 extension DocksViewController: MissionStatusObserver {
114     
115     func didUpdate(state: MissionStatus) {
116         
117         switch state.number {
118             
119         case 2:
120             deck2Time = state.time.map { $0 as NSNumber }
121             mission2Name = state.name
122             
123         case 3:
124             deck3Time = state.time.map { $0 as NSNumber }
125             mission3Name = state.name
126             
127         case 4:
128             deck4Time = state.time.map { $0 as NSNumber }
129             mission4Name = state.name
130             
131         default: ()
132         }
133     }
134 }
135
136 extension DocksViewController: NyukyoDockStatusObserver {
137     
138     func didUpdate(state: NyukyoDockStatus) {
139         
140         switch state.number {
141             
142         case 1:
143             nDock1Time = state.time.map { $0 as NSNumber }
144             nDock1ShipName = state.name
145             
146         case 2:
147             nDock2Time = state.time.map { $0 as NSNumber }
148             nDock2ShipName = state.name
149             
150         case 3:
151             nDock3Time = state.time.map { $0 as NSNumber }
152             nDock3ShipName = state.name
153             
154         case 4:
155             nDock4Time = state.time.map { $0 as NSNumber }
156             nDock4ShipName = state.name
157             
158         default: ()
159         }
160     }
161 }
162
163 extension DocksViewController: KenzoDockStatusObserver {
164     
165     func didUpdate(state: KenzoDockStatus) {
166         
167         switch state.number {
168             
169         case 1:
170             kDock1Time = state.time.map { $0 as NSNumber }
171         
172         case 2:
173             kDock2Time = state.time.map { $0 as NSNumber }
174             
175         case 3:
176             kDock3Time = state.time.map { $0 as NSNumber }
177             
178         case 4:
179             kDock4Time = state.time.map { $0 as NSNumber }
180             
181         default: ()
182         }
183     }
184 }