From d86e45fc43b14f210549b6e8a818d8a4bddf99bf Mon Sep 17 00:00:00 2001 From: masakih Date: Mon, 20 Nov 2017 23:41:18 +0900 Subject: [PATCH] =?utf8?q?api=5Fat=5Feflag=E5=AF=BE=E5=BF=9C=E7=89=88?= =?utf8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- KCD/Battle.swift | 1 + KCD/CalculateDamageCommand.swift | 5 +- KCD/DamageCalculator.swift | 77 +++++++++------------- KCD/MapStartCommand.swift | 3 + .../Temporary.xcdatamodel/contents | 5 +- 5 files changed, 40 insertions(+), 51 deletions(-) diff --git a/KCD/Battle.swift b/KCD/Battle.swift index 54440300..89034748 100644 --- a/KCD/Battle.swift +++ b/KCD/Battle.swift @@ -16,5 +16,6 @@ class Battle: KCManagedObject { @NSManaged var mapArea: Int @NSManaged var mapInfo: Int @NSManaged var no: Int + @NSManaged var firstFleetShipsCount: Int @NSManaged var damages: NSOrderedSet } diff --git a/KCD/CalculateDamageCommand.swift b/KCD/CalculateDamageCommand.swift index 7133507b..968d4f4b 100644 --- a/KCD/CalculateDamageCommand.swift +++ b/KCD/CalculateDamageCommand.swift @@ -134,10 +134,7 @@ extension CalculateDamageCommand { let store = TemporaryDataStore.default - guard let battle = store.battle() else { - - return Logger.shared.log("Battle is invalid.") - } + guard let battle = store.battle() else { return Logger.shared.log("Battle is invalid.") } battle.battleCell = (battle.no == 0 ? nil : battle.no as NSNumber) diff --git a/KCD/DamageCalculator.swift b/KCD/DamageCalculator.swift index b626d4df..9c4c299e 100644 --- a/KCD/DamageCalculator.swift +++ b/KCD/DamageCalculator.swift @@ -233,9 +233,7 @@ extension DamageCalculator { buildDamagedEntity() - let newDamages = store.sortedDamagesById() - - return newDamages + return store.sortedDamagesById() } return array @@ -257,16 +255,14 @@ extension DamageCalculator { guard case 0...1 = fleet else { return Logger.shared.log("fleet must 0 or 1.") } guard let battle = store.battle() else { return Logger.shared.log("Battle is invalid.") } - (0..<6).forEach { - - guard case 0.. Bool { - - if let eFlags = eFlags, 0.. Bool { - return true + return 0.. Bool { + private func firstFleetShipsCount() -> Int { - let upper = (battleFleet == .each ? 12 : 6) - - return 0.. Int? { - let shipOffset = (fleet == .second) ? 6 : 0 + let shipOffset = (fleet == .second) ? firstFleetShipsCount() : 0 let damagePos = pos + shipOffset @@ -351,10 +343,8 @@ extension DamageCalculator { guard let ship = ServerDataStore.default.ship(by: damage.shipID) else { return } damage.hp = damageControlIfPossible(ship: ship) - if damage.hp != 0 { - - damage.useDamageControl = true - } + damage.useDamageControl = (damage.hp != 0) + } private func calculateHogeki(baseKeyPath: String, _ bf: () -> BattleFleet) { @@ -362,6 +352,13 @@ extension DamageCalculator { calculateHogeki(baseKeyPath: baseKeyPath, battleFleet: bf()) } + private func omitEnemyDamage(targetPosLists: [[Int]], damageLists: [[Int]], eFlags: [Int]?) -> [([Int], [Int])] { + + guard let eFlags = eFlags else { return zip(targetPosLists, damageLists).map { $0 } } + + return zip(zip(targetPosLists, damageLists), eFlags).filter { $0.1 == 1 }.map { $0.0 } + } + private func calculateHogeki(baseKeyPath: String, battleFleet: BattleFleet = .first) { let baseValue = json[baseKeyPath.components(separatedBy: ".")] @@ -375,23 +372,15 @@ extension DamageCalculator { guard targetPosLists.count == damageLists.count else { return Logger.shared.log("api_damage is wrong.") } - let eFlags = enemyFlags(baseValue["api_at_eflag"]) - Debug.print("Start Hougeki \(baseKeyPath)", level: .debug) - zip(targetPosLists, damageLists).enumerated().forEach { (i, list) in - - if !isTargetFriend(eFlags: eFlags, index: i) { - - Debug.excute(level: .debug) { - - print("target is enemy") - } - - return - } + let enemyOmitedDamages = omitEnemyDamage(targetPosLists: targetPosLists, + damageLists: damageLists, + eFlags: enemyFlags(baseValue["api_at_eflag"])) + + enemyOmitedDamages.forEach { (targetPosList, damageList) in - zip(list.0, list.1).forEach { (targetPos, damage) in + zip(targetPosList, damageList).forEach { (targetPos, damage) in guard validTargetPos(targetPos, in: battleFleet) else { return Logger.shared.log("invalid position \(targetPos)") } @@ -404,7 +393,7 @@ extension DamageCalculator { Debug.excute(level: .debug) { - let shipOffset = (battleFleet == .second) ? 6 : 0 + let shipOffset = (battleFleet == .second) ? firstFleetShipsCount() : 0 print("Hougeki \(targetPos + shipOffset) -> \(damage)") } } @@ -440,15 +429,13 @@ extension DamageCalculator { frendDamages.enumerated().forEach { (idx, damage) in -// if idx == 0 { return } - guard let damagePos = position(idx, in: battleFleet) else { return } calcHP(damage: damages[damagePos], receive: damage) Debug.excute(level: .debug) { - let shipOffset = (battleFleet == .second) ? 6 : 0 + let shipOffset = (battleFleet == .second) ? firstFleetShipsCount() : 0 print("FDam \(idx + shipOffset) -> \(damage)") } } diff --git a/KCD/MapStartCommand.swift b/KCD/MapStartCommand.swift index f53e5709..dac7f032 100644 --- a/KCD/MapStartCommand.swift +++ b/KCD/MapStartCommand.swift @@ -60,10 +60,13 @@ final class MapStartCommand: JSONCommand { return Logger.shared.log("Can not create Battle") } + let kcd = ServerDataStore.default + battle.deckId = deckId battle.mapArea = mapArea battle.mapInfo = mapInfo battle.no = no + battle.firstFleetShipsCount = kcd.ships(byDeckId: deckId).count } private func nextCell() { diff --git a/KCD/Temporary.xcdatamodeld/Temporary.xcdatamodel/contents b/KCD/Temporary.xcdatamodeld/Temporary.xcdatamodel/contents index fff4f907..6765d544 100644 --- a/KCD/Temporary.xcdatamodeld/Temporary.xcdatamodel/contents +++ b/KCD/Temporary.xcdatamodeld/Temporary.xcdatamodel/contents @@ -1,8 +1,9 @@ - + + @@ -21,7 +22,7 @@ - + -- 2.11.0