OSDN Git Service

staticプロパティをインスタンスプロパティに変更
[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
137 extension DocksViewController: NyukyoDockStatusObserver {
138     
139     func didUpdate(state: NyukyoDockStatus) {
140         
141         switch state.number {
142             
143         case 1:
144             nDock1Time = state.time.map { $0 as NSNumber }
145             nDock1ShipName = state.name
146             
147         case 2:
148             nDock2Time = state.time.map { $0 as NSNumber }
149             nDock2ShipName = state.name
150             
151         case 3:
152             nDock3Time = state.time.map { $0 as NSNumber }
153             nDock3ShipName = state.name
154             
155         case 4:
156             nDock4Time = state.time.map { $0 as NSNumber }
157             nDock4ShipName = state.name
158             
159         default: ()
160             
161         }
162     }
163 }
164
165 extension DocksViewController: KenzoDockStatusObserver {
166     
167     func didUpdate(state: KenzoDockStatus) {
168         
169         switch state.number {
170             
171         case 1:
172             kDock1Time = state.time.map { $0 as NSNumber }
173         
174         case 2:
175             kDock2Time = state.time.map { $0 as NSNumber }
176             
177         case 3:
178             kDock3Time = state.time.map { $0 as NSNumber }
179             
180         case 4:
181             kDock4Time = state.time.map { $0 as NSNumber }
182             
183         default: ()
184             
185         }
186     }
187 }