2 // MapStartCommand.swift
5 // Created by Hori,Masaki on 2017/01/18.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
13 case start = "/kcsapi/api_req_map/start"
14 case next = "/kcsapi/api_req_map/next"
17 final class MapStartCommand: JSONCommand {
19 private let store = TemporaryDataStore.oneTimeEditor()
21 override class func canExecuteAPI(_ api: String) -> Bool {
23 return MapAPI(rawValue: api) != nil
26 override func execute() {
28 MapAPI(rawValue: api).map {
31 case .start: startBattle()
39 GuardShelterCommand(apiResponse: apiResponse).execute()
42 private func startBattle() {
44 store.battles().forEach { store.delete($0) }
46 guard let deckId = parameter["api_deck_id"].int,
47 let mapArea = parameter["api_maparea_id"].int,
48 let mapInfo = parameter["api_mapinfo_no"].int else {
50 return Logger.shared.log("startBattle Arguments is wrong")
53 guard let no = data["api_no"].int else {
55 return Logger.shared.log("startBattle JSON is wrong")
58 guard let battle = store.createBattle() else {
60 return Logger.shared.log("Can not create Battle")
63 let kcd = ServerDataStore.default
65 battle.deckId = deckId
66 battle.mapArea = mapArea
67 battle.mapInfo = mapInfo
69 battle.firstFleetShipsCount = kcd.ships(byDeckId: deckId).count
72 private func nextCell() {
74 guard let cellNumber = data["api_no"].int,
75 let eventId = data["api_event_id"].int else {
77 return Logger.shared.log("updateBattleCell JSON is wrong")
80 guard let battle = store.battle() else { return Logger.shared.log("Battle is invalid.") }
82 battle.no = cellNumber
83 battle.isBossCell = (eventId == 5)
86 private func updateBattleCell() {
88 store.battle().map { $0.battleCell = nil }