2 // AnchorageRepairManager.swift
5 // Created by Hori,Masaki on 2017/01/22.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
12 final class AnchorageRepairManager: NSObject {
14 static let `default`: AnchorageRepairManager = AnchorageRepairManager()
16 private let fleetManager: FleetManager
17 private let repairShipTypeIds: [Int] = [19]
21 fleetManager = AppDelegate.shared.fleetManager
25 let nc = NotificationCenter.default
26 nc.addObserver(forName: .HenseiDidChange, object: nil, queue: nil) { notification in
28 guard let userInfo = notification.userInfo else { return }
29 guard let info = userInfo[ChangeHenseiCommand.userInfoKey] as? HenseiDidChangeUserInfo else { return }
31 self.resetIfNeeds(info: info)
34 nc.addObserver(forName: .PortAPIReceived, object: nil, queue: nil) { _ in
36 if Date().timeIntervalSince(self.repairTime) < 20 * 60 { return }
44 NotificationCenter.default.removeObserver(self)
47 private(set) var repairTime: Date {
49 get { return UserDefaults.standard[.repairTime] }
50 set { UserDefaults.standard[.repairTime] = newValue }
53 private func reset() {
58 private func shipTypeId(fleetNumber: Int, position: Int) -> Int? {
60 guard case 1...4 = fleetNumber else { return nil }
61 guard case 0...5 = position else { return nil }
63 let ship = fleetManager.fleets[fleetNumber - 1][position]
65 return ship?.master_ship.stype.id
68 private func shipTypeId(shipId: Int) -> Int? {
70 return ServerDataStore.default
71 .ship(by: shipId)?.master_ship.stype.id
74 private func needsReset(info: HenseiDidChangeUserInfo) -> Bool {
77 if let flagShipType = shipTypeId(fleetNumber: info.fleetNumber, position: 0),
78 repairShipTypeIds.contains(flagShipType) {
82 if info.type == .replace,
83 let replaceFleet = info.replaceFleetNumber,
84 let flagShipType = shipTypeId(fleetNumber: replaceFleet, position: 0),
85 repairShipTypeIds.contains(flagShipType) {
92 // 入れ替えた結果、工作艦が旗艦になったか?
93 if info.type == .remove || info.type == .append || info.type == .replace,
95 let shipType = shipTypeId(shipId: info.shipID),
96 repairShipTypeIds.contains(shipType) {
100 if info.type == .replace,
101 let replacePos = info.replacePosition,
103 let shipId = info.replaceShipID,
104 let shipType = shipTypeId(shipId: shipId),
105 repairShipTypeIds.contains(shipType) {
110 // 旗艦が外された結果、工作艦が旗艦になったか?
111 if info.type == .remove,
113 let shipType = shipTypeId(fleetNumber: info.fleetNumber, position: 1),
114 repairShipTypeIds.contains(shipType) {
121 private func resetIfNeeds(info: HenseiDidChangeUserInfo) {
123 if needsReset(info: info) { reset() }