2 // AnchorageRepairManager.swift
5 // Created by Hori,Masaki on 2017/01/22.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
12 class AnchorageRepairManager: NSObject {
13 static let `default`: AnchorageRepairManager = AnchorageRepairManager()
15 private let fleetManager: FleetManager
16 private let repairShipTypeIds: [Int] = [19]
19 fleetManager = AppDelegate.shared.fleetManager
21 let nc = NotificationCenter.default
22 nc.addObserver(forName: .HenseiDidChange, object: nil, queue: nil) { notification in
23 guard let userInfo = notification.userInfo,
24 let info = userInfo[ChangeHenseiCommand.userInfoKey] as? HenseiDidChangeUserInfo
26 self.resetIfNeeds(info: info)
28 nc.addObserver(forName: .PortAPIReceived, object: nil, queue: nil) { _ in
29 if Date().timeIntervalSince(self.repairTime) < 20 * 60 { return }
34 NotificationCenter.default.removeObserver(self)
37 private(set) var repairTime: Date {
38 get { return UserDefaults.standard.repairTime }
39 set { UserDefaults.standard.repairTime = newValue }
42 private func reset() {
45 private func shipTypeId(fleetNumber: Int, position: Int) -> Int? {
46 guard 1...4 ~= fleetNumber,
49 let ship = fleetManager.fleets[fleetNumber - 1][position]
50 return ship?.master_ship.stype.id
52 private func shipTypeId(shipId: Int) -> Int? {
53 return ServerDataStore.default
54 .ship(byId: shipId)?.master_ship.stype.id
56 private func needsReset(info: HenseiDidChangeUserInfo) -> Bool {
58 if let flagShipType = shipTypeId(fleetNumber: info.fleetNumber, position: 0),
59 repairShipTypeIds.contains(flagShipType) {
62 if info.type == .replace,
63 let replaceFleet = info.replaceFleetNumber,
64 let flagShipType = shipTypeId(fleetNumber: replaceFleet, position: 0),
65 repairShipTypeIds.contains(flagShipType) {
71 // 入れ替えた結果、工作艦が旗艦になったか?
72 if info.type == .remove || info.type == .append || info.type == .replace,
74 let shipType = shipTypeId(shipId: info.shipID),
75 repairShipTypeIds.contains(shipType) {
78 if info.type == .replace,
79 let replacePos = info.replacePosition,
81 let shipId = info.replaceShipID,
82 let shipType = shipTypeId(shipId: shipId),
83 repairShipTypeIds.contains(shipType) {
87 // 旗艦が外された結果、工作艦が旗艦になったか?
88 if info.type == .remove,
90 let shipType = shipTypeId(fleetNumber: info.fleetNumber, position: 1),
91 repairShipTypeIds.contains(shipType) {
97 private func resetIfNeeds(info: HenseiDidChangeUserInfo) {
98 if needsReset(info: info) { reset() }