// // ChangeHenseiCommand.swift // KCD // // Created by Hori,Masaki on 2017/01/09. // Copyright © 2017年 Hori,Masaki. All rights reserved. // import Cocoa enum ChangeHenseiType: Int { case append case replace case remove case removeAllWithoutFlagship } extension Notification.Name { static let HenseiDidChange = Notification.Name("com.masakih.KCD.Notification.HenseiDidChange") } class HenseiDidChangeUserInfo: NSObject { let type: ChangeHenseiType let fleetNumber: Int let position: Int let shipID: Int let replaceFleetNumber: Int? let replacePosition: Int? let replaceShipID: Int? var objcType: Int { return type.rawValue } var objcReplaceFleetNumbner: NSNumber? { return replaceFleetNumber as NSNumber?? ?? nil } var objcReplacePosition: NSNumber? { return replacePosition as NSNumber?? ?? nil } var objcReplaceShipID: NSNumber? { return replaceShipID as NSNumber?? ?? nil } required init(type: ChangeHenseiType, fleetNumber: Int, position: Int, shipID: Int, replaceFleetNumber: Int? = nil, replacePosition: Int? = nil, replaceShipID: Int? = nil) { self.type = type self.fleetNumber = fleetNumber self.position = position self.shipID = shipID self.replaceFleetNumber = replaceFleetNumber self.replacePosition = replacePosition self.replaceShipID = replaceShipID super.init() } } class ChangeHenseiCommand: JSONCommand { static let userInfoKey = "HenseiDidChangeUserInfoKey" override class func canExecuteAPI(_ api: String) -> Bool { if api == "/kcsapi/api_req_hensei/change" { return true } return false } // api_ship_id の値 // ship_id > 0 : 艦娘のID append or replace // ship_id == -1 : remove. // ship_id == -2 : remove all without flag ship. override func execute() { guard let deckNumber = arguments["api_id"].flatMap({ Int($0) }), let shipId = arguments["api_ship_id"].flatMap({ Int($0) }), let shipIndex = arguments["api_ship_idx"].flatMap({ Int($0) }) else { return print("parameter is wrong") } if shipId == -2 { excludeShipsWithoutFlagShip(deckNumber: deckNumber) notify(type: .removeAllWithoutFlagship) return } let store = ServerDataStore.oneTimeEditor() let decks = store.decksSortedById() let shipIds = decks.flatMap { deck in (0..<6).map { deck.shipId(of: $0) ?? -1 } } // すでに編成されているか? どこに? let currentIndex = shipIds.index(of: shipId) let shipDeckNumber = currentIndex.map { $0 / 6 } ?? -1 let shipDeckIndex = currentIndex.map { $0 % 6 } ?? -1 // 配置しようとする位置に今配置されている艦娘 let replaceIndex = (deckNumber - 1) * 6 + shipIndex guard 0..