Collect baseSpecificMoves in separate function

This commit is contained in:
Marcel Schwarz 2020-05-31 14:45:57 +02:00
parent ad861f63c4
commit 0d20cc6716

View File

@ -13,8 +13,6 @@ class RoundCalculatorService {
static let sharedInstance = RoundCalculatorService()
static let LOG = OSLog.init(subsystem: "Round Calculator", category: "RoundCalculatorService")
var allPlayerMoves: [String: [PlayerMove]] = [:]
var baseSpecificMoves: [Int: [String: [PlayerMove]]] = [:]
var entityManager = EntityManager.gameEMInstance
var isCalculating = false
@ -27,21 +25,10 @@ class RoundCalculatorService {
isCalculating = true
let currentSnapshotModel = DataService.sharedInstance.snapshotModel
for playerMove in DataService.sharedInstance.remotePlayerMoves {
addPlayerMove(playerName: playerMove.key, playerMoves: playerMove.value)
}
addPlayerMove(playerName: GKLocalPlayer.local.displayName, playerMoves: DataService.sharedInstance.localPlayerMoves)
for playerMove in allPlayerMoves {
for move in playerMove.value {
mapPlayerMoveToAttackedBase(playerName: playerMove.key, playerMove: move)
}
}
var baseSpecificMoves = collectBaseSpecificMoves()
// TODO: Refactor to a less complex way
for (key, value) in baseSpecificMoves {
let baseId = key
var playerMovesByBase = value
for (baseId, var playerMovesByBase) in baseSpecificMoves {
let targetBase = currentSnapshotModel?.baseEntites.filter { $0.baseId == baseId }[0]
let possiblyOwnershipMoves = playerMovesByBase.filter { $0.key == targetBase?.ownership}
@ -110,7 +97,6 @@ class RoundCalculatorService {
}
baseSpecificMoves.removeValue(forKey: baseId)
}
allPlayerMoves.removeAll()
DataService.sharedInstance.localPlayerMoves.removeAll()
MultiplayerNetwork.sharedInstance.sendSnapshotModelToPlayers()
DataService.sharedInstance.snapshotModel = currentSnapshotModel
@ -120,21 +106,36 @@ class RoundCalculatorService {
os_log("Finished calculating Round", log: RoundCalculatorService.LOG, type: .info)
}
func addPlayerMove(playerName: String, playerMoves: [PlayerMove]) {
self.allPlayerMoves[playerName] = playerMoves
func collectBaseSpecificMoves() -> [Int: [String: [PlayerMove]]] {
var allPlayerMoves: [String: [PlayerMove]] = [:]
// collect moves from remote player
for playerMove in DataService.sharedInstance.remotePlayerMoves {
allPlayerMoves[playerMove.key] = playerMove.value
}
func mapPlayerMoveToAttackedBase(playerName: String, playerMove: PlayerMove) {
if self.baseSpecificMoves.keys.contains(playerMove.toBase) {
if (self.baseSpecificMoves[playerMove.toBase]?.keys.contains(playerName))!{
self.baseSpecificMoves[playerMove.toBase]?[playerName]?.append(playerMove)
// collect moves from local player
allPlayerMoves[GKLocalPlayer.local.displayName] = DataService.sharedInstance.localPlayerMoves
var baseSpecificMoves: [Int: [String: [PlayerMove]]] = [:]
for playerMove in allPlayerMoves {
for move in playerMove.value {
if baseSpecificMoves.keys.contains(move.toBase) {
if (baseSpecificMoves[move.toBase]?.keys.contains(playerMove.key))!{
baseSpecificMoves[move.toBase]?[playerMove.key]?.append(move)
} else {
self.baseSpecificMoves[playerMove.toBase]?.merge([playerName: [playerMove]]){(current, _) in current}
baseSpecificMoves[move.toBase]?.merge([playerMove.key: [move]]){(current, _) in current}
}
} else {
self.baseSpecificMoves[playerMove.toBase] = [playerName: [playerMove]]
baseSpecificMoves[move.toBase] = [playerMove.key: [move]]
}
}
}
return baseSpecificMoves
}
func resolvePlayerMove(playerMove: PlayerMove, unitCount: Int, ownership: String?, resolveType: String) {
//TODO: outsource playermoves