5 // Created by Hori,Masaki on 2017/01/22.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 extension Notification.Name {
12 static let DidPrepareFleet = Notification.Name("com.masakih.KCD.Notification.DidPrepareFleet")
15 class FleetManager: NSObject {
21 private(set) var fleets: [Fleet] = []
22 private var fleetController: NSArrayController!
24 override func observeValue(forKeyPath keyPath: String?,
26 change: [NSKeyValueChangeKey: Any]?,
27 context: UnsafeMutableRawPointer?) {
28 if keyPath == "arrangedObjects.ships" {
29 setNewFleetNumberToShip()
32 super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
35 private func setupFleetController() {
36 fleetController = NSArrayController(content: fleets)
37 fleetController.addObserver(self, forKeyPath: "arrangedObjects.ships", context: nil)
39 private func setupFleets() {
40 fleets = (1...4).flatMap { Fleet(number: $0) }
41 guard fleets.count == 4 else { return print("Can not create Fleet") }
42 if fleets[0].ships.isEmpty {
43 let center = NotificationCenter.default
44 var token: NSObjectProtocol!
45 token = center.addObserver(forName: .PortAPIReceived, object: nil, queue: nil) {_ in
46 center.removeObserver(token)
47 self.setupFleetController()
48 center.post(name: .DidPrepareFleet, object: self)
50 } else { setupFleetController() }
53 private func setNewFleetNumberToShip() {
54 let store = ServerDataStore.oneTimeEditor()
57 store.shipsInFleet().forEach { $0.fleet = 0 as NSNumber }
60 fleets.enumerated().forEach { (index, fleet) in
62 store.ship(byId: $0.id)?.fleet = (index + 1) as NSNumber