2 // MapStartCommand.swift
5 // Created by Hori,Masaki on 2017/01/18.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class MapStartCommand: JSONCommand {
13 private let store = TemporaryDataStore.oneTimeEditor()
15 override class func canExecuteAPI(_ api: API) -> Bool {
17 return api.type == .map
20 override func execute() {
24 case .start: startBattle()
32 Logger.shared.log("Missing API: \(apiResponse.api)")
37 GuardShelterCommand(apiResponse: apiResponse).execute()
40 private func startBattle() {
42 store.sync { self.store.battles().forEach(self.store.delete) }
44 guard let deckId = parameter["api_deck_id"].int,
45 let mapArea = parameter["api_maparea_id"].int,
46 let mapInfo = parameter["api_mapinfo_no"].int else {
48 Logger.shared.log("startBattle Arguments is wrong")
53 guard let no = data["api_no"].int else {
55 Logger.shared.log("startBattle JSON is wrong")
60 guard let battle = store.sync(execute: { self.store.createBattle() }) else {
62 Logger.shared.log("Can not create Battle")
67 let kcd = ServerDataStore.default
71 battle.deckId = deckId
72 battle.mapArea = mapArea
73 battle.mapInfo = mapInfo
75 battle.firstFleetShipsCount = kcd.sync { kcd.ships(byDeckId: deckId).count }
79 private func nextCell() {
81 guard let cellNumber = data["api_no"].int,
82 let eventId = data["api_event_id"].int else {
84 Logger.shared.log("updateBattleCell JSON is wrong")
89 guard let battle = store.sync(execute: { self.store.battle() }) else {
91 Logger.shared.log("Battle is invalid.")
98 battle.no = cellNumber
99 battle.isBossCell = (eventId == 5)
103 private func updateBattleCell() {
107 self.store.battle().map { $0.battleCell = nil }