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? {
27 didSet { updateProperties() }
29 @objc dynamic private var cellNumber: Int = 0
30 private var battleCellNumber: Int = 0
31 private var isBossCell: Bool = false
32 private var deckId: Int = 0 {
36 fleetName = ServerDataStore.default.deck(by: deckId)?.name
39 private var fleetName: String?
40 private var mapArea: Int?
41 private var mapInfo: Int?
42 private var areaNumber: String? {
44 guard let mapInfo = self.mapInfo else {
52 case let area? where area > 10: mapArea = "E"
54 case let area?: mapArea = "\(area)"
56 case .none: return nil
60 return "\(mapArea)-\(mapInfo)"
62 private var areaName: String? {
64 guard let mapArea = self.mapArea else {
68 guard let mapInfo = self.mapInfo else {
73 return ServerDataStore.default.mapInfo(area: mapArea, no: mapInfo)?.name
76 @objc private var sortieString: String? {
78 guard let fleetName = self.fleetName else {
82 guard let areaName = self.areaName else {
86 guard let areaNumber = self.areaNumber else {
91 if battleCellNumber == 0 {
93 return String(format: LocalizedStrings.sortieInfomation.string,
94 arguments: [fleetName, areaName, areaNumber])
98 return String(format: LocalizedStrings.battleWithBOSS.string,
99 arguments: [fleetName, battleCellNumber as NSNumber, areaName, areaNumber])
102 return String(format: LocalizedStrings.battleInformation.string,
103 arguments: [fleetName, battleCellNumber as NSNumber, areaName, areaNumber])
106 override func viewDidLoad() {
111 .addObserver(forName: .NSManagedObjectContextObjectsDidChange,
112 object: TemporaryDataStore.default.context,
113 queue: .main) { notification in
115 if let battle: Battle = notification.insertedManagedObjects().first {
120 if let _: Battle = notification.updatedManagedObjects().first {
122 self.updateProperties()
125 if let _: Battle = notification.deletedManagedObjects().first {
132 cellNumberField.isHidden = false
136 private func updateProperties() {
138 cellNumber = battle?.no ?? 0
139 battleCellNumber = battle?.battleCell as? Int ?? 0
140 isBossCell = battle?.isBossCell ?? false
141 deckId = battle?.deckId ?? 0
142 mapArea = battle?.mapArea
143 mapInfo = battle?.mapInfo
145 notifyChangeValue(forKey: #keyPath(sortieString))