buildDamagedEntity()
- let newDamages = store.sortedDamagesById()
-
- return newDamages
+ return store.sortedDamagesById()
}
return array
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..<ships.count = $0 else { return }
+ zip(ships, (0...)).forEach { ship, index in
guard let damage = store.createDamage() else { return Logger.shared.log("Can not create Damage") }
damage.battle = battle
- damage.id = $0 + fleet * 6
- damage.hp = ships[$0].nowhp
- damage.shipID = ships[$0].id
+ damage.hp = ship.nowhp
+ damage.shipID = ship.id
+ damage.id = index
}
}
buildDamagesOfFleet(fleet: 0, ships: firstFleetShips)
// 第二艦隊
- let secondFleetShips = ServerDataStore.default.ships(byDeckId: 2)
- buildDamagesOfFleet(fleet: 1, ships: secondFleetShips)
+ if isCombinedBattle {
+
+ let secondFleetShips = ServerDataStore.default.ships(byDeckId: 2)
+ buildDamagesOfFleet(fleet: 1, ships: secondFleetShips)
+ }
}
}
return list.array?.flatMap { $0.int }
}
- private func isTargetFriend(eFlags: [Int]?, index: Int) -> Bool {
-
- if let eFlags = eFlags, 0..<eFlags.count ~= index {
-
- return eFlags[index] == 1
- }
+ private func validTargetPos(_ targetPos: Int, in battleFleet: BattleFleet) -> Bool {
- return true
+ return 0..<damages.count ~= targetPos
}
- private func validTargetPos(_ targetPos: Int, in battleFleet: BattleFleet) -> Bool {
+ private func firstFleetShipsCount() -> Int {
- let upper = (battleFleet == .each ? 12 : 6)
-
- return 0..<upper ~= targetPos
+ return store.battle()?.firstFleetShipsCount ?? 6
}
private func position(_ pos: Int, in fleet: BattleFleet) -> Int? {
- let shipOffset = (fleet == .second) ? 6 : 0
+ let shipOffset = (fleet == .second) ? firstFleetShipsCount() : 0
let damagePos = pos + shipOffset
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) {
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: ".")]
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)") }
Debug.excute(level: .debug) {
- let shipOffset = (battleFleet == .second) ? 6 : 0
+ let shipOffset = (battleFleet == .second) ? firstFleetShipsCount() : 0
print("Hougeki \(targetPos + shipOffset) -> \(damage)")
}
}
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)")
}
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="11759" systemVersion="16D32" minimumToolsVersion="Xcode 4.3" sourceLanguage="Objective-C" userDefinedModelVersionIdentifier="">
+<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="13533" systemVersion="17B48" minimumToolsVersion="Xcode 4.3" sourceLanguage="Objective-C" userDefinedModelVersionIdentifier="">
<entity name="Battle" representedClassName="KCD.Battle" syncable="YES">
<attribute name="battleCell" optional="YES" attributeType="Integer 64" usesScalarValueType="NO" syncable="YES"/>
<attribute name="deckId" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="NO" syncable="YES"/>
+ <attribute name="firstFleetShipsCount" optional="YES" attributeType="Integer 64" defaultValueString="1" usesScalarValueType="NO" syncable="YES"/>
<attribute name="isBossCell" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="NO" syncable="YES"/>
<attribute name="mapArea" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="NO" syncable="YES"/>
<attribute name="mapInfo" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="NO" syncable="YES"/>
<attribute name="shipID" attributeType="Integer 64" defaultValueString="-1" usesScalarValueType="NO" syncable="YES"/>
</entity>
<elements>
- <element name="Battle" positionX="-63" positionY="-18" width="128" height="150"/>
+ <element name="Battle" positionX="-63" positionY="-18" width="128" height="165"/>
<element name="Damage" positionX="-54" positionY="18" width="128" height="120"/>
<element name="GuardEscaped" positionX="-54" positionY="27" width="128" height="75"/>
</elements>