OSDN Git Service

プレースホルダー(NSView)をViewControllerのviewと入れ替える関数を追加
[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 final class DocksViewController: MainTabVIewItemViewController {
12     
13     deinit {
14         
15         [NSBindingName(#keyPath(deck2Time)), NSBindingName(#keyPath(mission2Name)),
16          NSBindingName(#keyPath(deck3Time)), NSBindingName(#keyPath(mission3Name)),
17          NSBindingName(#keyPath(deck4Time)), NSBindingName(#keyPath(mission4Name))]
18             .forEach(unbind)
19         [NSBindingName(#keyPath(nDock1Time)), NSBindingName(#keyPath(nDock1ShipName)),
20          NSBindingName(#keyPath(nDock2Time)), NSBindingName(#keyPath(nDock2ShipName)),
21          NSBindingName(#keyPath(nDock3Time)), NSBindingName(#keyPath(nDock3ShipName)),
22          NSBindingName(#keyPath(nDock4Time)), NSBindingName(#keyPath(nDock4ShipName))]
23             .forEach(unbind)
24         [NSBindingName(#keyPath(kDock1Time)), NSBindingName(#keyPath(kDock2Time)),
25          NSBindingName(#keyPath(kDock3Time)), NSBindingName(#keyPath(kDock4Time))]
26             .forEach(unbind)
27     }
28     
29     @objc let managedObjectContext = ServerDataStore.default.context
30     let questListViewController = QuestListViewController()
31     let battleInfoViewController = BattleInformationViewController()
32     
33     let missionStates = (2...4).flatMap { MissionStatus(number: $0) }
34     let ndockStatus = (1...4).flatMap { NyukyoDockStatus(number: $0) }
35     let kdockStatus = (1...4).flatMap { KenzoDockStatus(number: $0) }
36     
37     @objc var nDock1Time: NSNumber?
38     @objc var nDock2Time: NSNumber?
39     @objc var nDock3Time: NSNumber?
40     @objc var nDock4Time: NSNumber?
41     
42     @objc var nDock1ShipName: String?
43     @objc var nDock2ShipName: String?
44     @objc var nDock3ShipName: String?
45     @objc var nDock4ShipName: String?
46     
47     @objc var kDock1Time: NSNumber?
48     @objc var kDock2Time: NSNumber?
49     @objc var kDock3Time: NSNumber?
50     @objc var kDock4Time: NSNumber?
51     
52     @objc var deck2Time: NSNumber?
53     @objc var deck3Time: NSNumber?
54     @objc var deck4Time: NSNumber?
55     
56     @objc var mission2Name: String?
57     @objc var mission3Name: String?
58     @objc var mission4Name: String?
59     
60     @IBOutlet weak var battleInformationViewPlaceholder: NSView!
61     @IBOutlet weak var questListViewPlaceholder: NSView!
62     
63     override var nibName: NSNib.Name {
64         
65         return .nibName(instanceOf: self)
66     }
67     
68     override func viewDidLoad() {
69         
70         super.viewDidLoad()
71         
72         setupStatus()
73         
74         AppDelegate.shared.addCounterUpdate {
75             
76             self.missionStates.forEach { $0.update() }
77             self.kdockStatus.forEach { $0.update() }
78             self.ndockStatus.forEach { $0.update() }
79         }
80         
81         replace(view: battleInformationViewPlaceholder, with: battleInfoViewController)
82         replace(view: questListViewPlaceholder, with: questListViewController)
83     }
84     
85     private func setupStatus() {
86         
87         let missionKeys = [
88             (#keyPath(deck2Time), #keyPath(mission2Name)),
89             (#keyPath(deck3Time), #keyPath(mission3Name)),
90             (#keyPath(deck4Time), #keyPath(mission4Name))
91         ]
92         zip(missionStates, missionKeys).forEach {
93             
94             bind(NSBindingName(rawValue: $0.1.0), to: $0.0, withKeyPath: #keyPath(MissionStatus.time), options: nil)
95             bind(NSBindingName(rawValue: $0.1.1), to: $0.0, withKeyPath: #keyPath(MissionStatus.name), options: nil)
96         }
97         
98         let ndockKeys = [
99             (#keyPath(nDock1Time), #keyPath(nDock1ShipName)),
100             (#keyPath(nDock2Time), #keyPath(nDock2ShipName)),
101             (#keyPath(nDock3Time), #keyPath(nDock3ShipName)),
102             (#keyPath(nDock4Time), #keyPath(nDock4ShipName))
103         ]
104         zip(ndockStatus, ndockKeys).forEach {
105             
106             bind(NSBindingName(rawValue: $0.1.0), to: $0.0, withKeyPath: #keyPath(NyukyoDockStatus.time), options: nil)
107             bind(NSBindingName(rawValue: $0.1.1), to: $0.0, withKeyPath: #keyPath(NyukyoDockStatus.name), options: nil)
108         }
109         
110         let kdockKeys = [#keyPath(kDock1Time), #keyPath(kDock2Time), #keyPath(kDock3Time), #keyPath(kDock4Time)]
111         zip(kdockStatus, kdockKeys).forEach {
112             
113             bind(NSBindingName(rawValue: $0.1), to: $0.0, withKeyPath: #keyPath(KenzoDockStatus.time), options: nil)
114         }
115     }
116     
117 }