2 // BattleInformationViewController.swift
5 // Created by Hori,Masaki on 2017/11/30.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 class BattleInformationViewController: NSViewController {
13 private let notificationObserver = NotificationObserver()
15 @objc private let battleManagedObjectContext = TemporaryDataStore.default.context
17 @IBOutlet private var battleContoller: NSObjectController!
18 @IBOutlet private weak var cellNumberField: NSTextField!
20 override var nibName: NSNib.Name {
22 return .nibName(instanceOf: self)
25 private var battle: Battle? {
26 didSet { updateProperties() }
28 @objc dynamic private var cellNumber: Int = 0
29 private var battleCellNumber: Int = 0
30 private var isBossCell: Bool = false
31 private var deckId: Int = 0 {
33 fleetName = ServerDataStore.default.deck(by: deckId)?.name
36 private var fleetName: String?
37 private var mapArea: Int?
38 private var mapInfo: Int?
39 private var areaNumber: String? {
41 guard let mapInfo = self.mapInfo else { return nil }
45 case let area? where area > 10: mapArea = "E"
46 case let area?: mapArea = "\(area)"
47 case .none: return nil
50 return "\(mapArea)-\(mapInfo)"
52 private var areaName: String? {
54 guard let mapArea = self.mapArea else { return nil }
55 guard let mapInfo = self.mapInfo else { return nil }
57 return ServerDataStore.default.mapInfo(area: mapArea, no: mapInfo)?.name
60 @objc private var sortieString: String? {
62 guard let fleetName = self.fleetName else { return nil }
63 guard let areaName = self.areaName else { return nil }
64 guard let areaNumber = self.areaNumber else { return nil }
66 if battleCellNumber == 0 {
68 return String(format: LocalizedStrings.sortieInfomation.string,
69 arguments: [fleetName, areaName, areaNumber])
73 return String(format: LocalizedStrings.battleWithBOSS.string,
74 arguments: [fleetName, battleCellNumber as NSNumber, areaName, areaNumber])
77 return String(format: LocalizedStrings.battleInformation.string,
78 arguments: [fleetName, battleCellNumber as NSNumber, areaName, areaNumber])
81 override func viewDidLoad() {
86 .addObserver(forName: .NSManagedObjectContextObjectsDidChange,
87 object: TemporaryDataStore.default.context,
88 queue: .main) { notification in
90 if let battle: Battle = notification.insertedManagedObjects().first {
95 if let _: Battle = notification.updatedManagedObjects().first {
97 self.updateProperties()
100 if let _: Battle = notification.deletedManagedObjects().first {
107 cellNumberField.isHidden = false
111 private func updateProperties() {
113 cellNumber = battle?.no ?? 0
114 battleCellNumber = battle?.battleCell as? Int ?? 0
115 isBossCell = battle?.isBossCell ?? false
116 deckId = battle?.deckId ?? 0
117 mapArea = battle?.mapArea
118 mapInfo = battle?.mapInfo
120 notifyChangeValue(forKey: #keyPath(sortieString))