OSDN Git Service

staticプロパティをインスタンスプロパティに変更
[kcd/KCD.git] / KCD / MapStartCommand.swift
1 //
2 //  MapStartCommand.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/18.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class MapStartCommand: JSONCommand {
12     
13     private let store = TemporaryDataStore.oneTimeEditor()
14     
15     override class func canExecuteAPI(_ api: API) -> Bool {
16         
17         return api.type == .map
18     }
19     
20     override func execute() {
21         
22         switch api.endpoint {
23             
24         case .start: startBattle()
25             
26         case .next:
27             nextCell()
28             updateBattleCell()
29             
30         default:
31             
32             Logger.shared.log("Missing API: \(apiResponse.api)")
33             
34             return
35         }
36         
37         GuardShelterCommand(apiResponse: apiResponse).execute()
38     }
39     
40     private func startBattle() {
41         
42         store.sync { self.store.battles().forEach(self.store.delete) }
43         
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 {
47                 
48                 Logger.shared.log("startBattle Arguments is wrong")
49                 
50                 return
51         }
52         
53         guard let no = data["api_no"].int else {
54             
55             Logger.shared.log("startBattle JSON is wrong")
56             
57             return
58         }
59         
60         guard let battle = store.sync(execute: { self.store.createBattle() }) else {
61             
62             Logger.shared.log("Can not create Battle")
63             
64             return
65         }
66         
67         let kcd = ServerDataStore.default
68         
69         store.sync {
70             
71             battle.deckId = deckId
72             battle.mapArea = mapArea
73             battle.mapInfo = mapInfo
74             battle.no = no
75             battle.firstFleetShipsCount = kcd.sync { kcd.ships(byDeckId: deckId).count }
76         }
77     }
78     
79     private func nextCell() {
80         
81         guard let cellNumber = data["api_no"].int,
82             let eventId = data["api_event_id"].int else {
83                 
84                 Logger.shared.log("updateBattleCell JSON is wrong")
85                 
86                 return
87         }
88         
89         guard let battle = store.sync(execute: { self.store.battle() }) else {
90             
91             Logger.shared.log("Battle is invalid.")
92             
93             return
94         }
95         
96         store.sync {
97             
98             battle.no = cellNumber
99             battle.isBossCell = (eventId == 5)
100         }
101     }
102     
103     private func updateBattleCell() {
104         
105         store.sync {
106             
107             self.store.battle().map { $0.battleCell = nil }
108         }
109     }
110 }