OSDN Git Service

guard の書き方を統一した
[kcd/KCD.git] / KCD / SakutekiCalculator.swift
index 07a204d..11b128b 100644 (file)
@@ -17,7 +17,7 @@ final class SimpleCalculator: SakutekiCalculator {
     
     func calculate(_ ships: [Ship]) -> Double {
         
-        return Double(ships.reduce(0) { $0.0 + $0.1.sakuteki_0 })
+        return Double(ships.reduce(0) { $0 + $1.sakuteki_0 })
     }
 }
 
@@ -39,12 +39,12 @@ final class Formula33: SakutekiCalculator {
             .flatMap { $0 as? SlotItem }
             .reduce("") {
                 
-                let saku = $0.1.master_slotItem.saku ?? 0
-                let ratio = typeRatio($0.1)
-                let bounus = levelBounus($0.1)
-                let culcSaku = ratio * (Double(saku) + bounus)
+                let saku = $1.master_slotItem.saku ?? 0
+                let ratio = typeRatio($1)
+                let bounus = levelBounus($1)
+                let culcSaku = ratio * (Double(truncating: saku) + bounus)
                 
-                return $0.0 + "\n\t\($0.1.name)\tLv.\($0.1.level)\t\t\(saku)\t\(ratio)\t\(bounus)\t\(culcSaku)"
+                return $0 + "\n\t\($1.name)\tLv.\($1.level)\t\t\(saku)\t\(ratio)\t\(bounus)\t\(culcSaku)"
         }
         
         print("\(shipData)\(itemNames)\n")
@@ -53,16 +53,18 @@ final class Formula33: SakutekiCalculator {
     
     func calculate(_ ships: [Ship]) -> Double {
         
-        Debug.excute(level: .debug) {
+        Debug.excute(level: .full) {
             ships.forEach(printShipData)
         }
         
-        let saku1 = ships
+        let aliveShips = ships.filter(alive)
+        
+        let saku1 = aliveShips
             .map(normalSakuteki)
             .map(sqrt)
             .reduce(0, +)
         
-        let saku2 = ships
+        let saku2 = aliveShips
             .map(equipsSakuteki)
             .reduce(0, +)
         
@@ -73,6 +75,16 @@ final class Formula33: SakutekiCalculator {
         return saku1 + saku2 - saku3 + Double(saku4)
     }
     
+    private func alive(_ ship: Ship) -> Bool {
+        
+        if let _ = TemporaryDataStore.default.ensuredGuardEscaped(byShipId: ship.id) {
+            
+            return false
+        }
+        
+        return true
+    }
+    
     private func normalSakuteki(_ ship: Ship) -> Double {
         
         let eqSakuteki = ship
@@ -112,8 +124,7 @@ final class Formula33: SakutekiCalculator {
         
         let type2 = item.master_slotItem.type_2
         
-        guard let eqType = EquipmentType(rawValue: type2)
-            else { return 1 }
+        guard let eqType = EquipmentType(rawValue: type2) else { return 1 }
         
         switch eqType {
         case .fighter: return 0.6
@@ -152,8 +163,7 @@ final class Formula33: SakutekiCalculator {
         
         let type2 = item.master_slotItem.type_2
         
-        guard let eqType = EquipmentType(rawValue: type2)
-            else { return 1 }
+        guard let eqType = EquipmentType(rawValue: type2) else { return 1 }
         
         switch eqType {
         case .smallRadar: return 1.25
@@ -165,8 +175,7 @@ final class Formula33: SakutekiCalculator {
     
     private func shireiSakuteki() -> Double {
         
-        guard let basic = ServerDataStore.default.basic()
-            else { return 0 }
+        guard let basic = ServerDataStore.default.basic() else { return 0 }
         
         return ceil(0.4 * Double(basic.level))
     }