OSDN Git Service

staticプロパティをインスタンスプロパティに変更
[kcd/KCD.git] / KCD / MapStartCommand.swift
index a786292..64d4768 100644 (file)
 
 import Cocoa
 
-enum MapAPI: String {
-    case start = "/kcsapi/api_req_map/start"
-    case next = "/kcsapi/api_req_map/next"
-}
-
-class MapStartCommand: JSONCommand {
+final class MapStartCommand: JSONCommand {
+    
     private let store = TemporaryDataStore.oneTimeEditor()
     
-    override class func canExecuteAPI(_ api: String) -> Bool {
-        return MapAPI(rawValue: api) != nil ? true : false
+    override class func canExecuteAPI(_ api: API) -> Bool {
+        
+        return api.type == .map
     }
     
     override func execute() {
-        MapAPI(rawValue: api).map {
-            switch $0 {
-            case .start: startBattle()
-            case .next:
-                nextCell()
-                updateBattleCell()
-            }
+        
+        switch api.endpoint {
+            
+        case .start: startBattle()
+            
+        case .next:
+            nextCell()
+            updateBattleCell()
+            
+        default:
+            
+            Logger.shared.log("Missing API: \(apiResponse.api)")
+            
+            return
         }
+        
         GuardShelterCommand(apiResponse: apiResponse).execute()
     }
     
     private func startBattle() {
-        store.battles().forEach { store.delete($0) }
+        
+        store.sync { self.store.battles().forEach(self.store.delete) }
         
         guard let deckId = parameter["api_deck_id"].int,
             let mapArea = parameter["api_maparea_id"].int,
-            let mapInfo = parameter["api_mapinfo_no"].int
-            else { return print("startBattle Arguments is wrong") }
+            let mapInfo = parameter["api_mapinfo_no"].int else {
+                
+                Logger.shared.log("startBattle Arguments is wrong")
+                
+                return
+        }
+        
+        guard let no = data["api_no"].int else {
+            
+            Logger.shared.log("startBattle JSON is wrong")
+            
+            return
+        }
+        
+        guard let battle = store.sync(execute: { self.store.createBattle() }) else {
+            
+            Logger.shared.log("Can not create Battle")
+            
+            return
+        }
         
-        guard let no = data["api_no"].int
-            else { return print("startBattle JSON is wrong") }
-        guard let battle = store.createBattle()
-            else { return print("Can not create Battle") }
-        battle.deckId = deckId
-        battle.mapArea = mapArea
-        battle.mapInfo = mapInfo
-        battle.no = no
+        let kcd = ServerDataStore.default
+        
+        store.sync {
+            
+            battle.deckId = deckId
+            battle.mapArea = mapArea
+            battle.mapInfo = mapInfo
+            battle.no = no
+            battle.firstFleetShipsCount = kcd.sync { kcd.ships(byDeckId: deckId).count }
+        }
     }
+    
     private func nextCell() {
+        
         guard let cellNumber = data["api_no"].int,
-            let eventId = data["api_event_id"].int
-            else { return print("updateBattleCell JSON is wrong") }
-        guard let battle = store.battle()
-            else { return print("Battle is invalid.") }
-        battle.no = cellNumber
-        battle.isBossCell = (eventId == 5)
+            let eventId = data["api_event_id"].int else {
+                
+                Logger.shared.log("updateBattleCell JSON is wrong")
+                
+                return
+        }
+        
+        guard let battle = store.sync(execute: { self.store.battle() }) else {
+            
+            Logger.shared.log("Battle is invalid.")
+            
+            return
+        }
+        
+        store.sync {
+            
+            battle.no = cellNumber
+            battle.isBossCell = (eventId == 5)
+        }
     }
+    
     private func updateBattleCell() {
-        store.battle().map { $0.battleCell = nil }
+        
+        store.sync {
+            
+            self.store.battle().map { $0.battleCell = nil }
+        }
     }
 }