Report scores to multiple leaderboards
This commit is contained in:
parent
528f32f788
commit
890d43edca
@ -17,18 +17,19 @@ class EloHelper {
|
|||||||
|
|
||||||
static private let LOG = OSLog.init(subsystem: "EloHelper", category: "EloHelper")
|
static private let LOG = OSLog.init(subsystem: "EloHelper", category: "EloHelper")
|
||||||
|
|
||||||
static let IDENTIFIER = "de.hft.stuttgart.ip2.goldwars.matchmaking"
|
static let IDENTIFIER_ALL_ELO = "de.hft.stuttgart.ip2.goldwars.leaderboard"
|
||||||
|
static let IDENTIFIER_ELO = "de.hft.stuttgart.ip2.goldwars.matchmaking"
|
||||||
|
|
||||||
static func updateEloScore(winner: GKPlayer, hatDenNikoGemacht looser: GKPlayer) {
|
static func updateEloScore(winner: GKPlayer, hatDenNikoGemacht looser: GKPlayer) {
|
||||||
|
|
||||||
let leaderboard = GKLeaderboard.init(players: [winner, looser])
|
let leaderboard = GKLeaderboard.init(players: [winner, looser])
|
||||||
leaderboard.identifier = EloHelper.IDENTIFIER
|
leaderboard.identifier = EloHelper.IDENTIFIER_ELO
|
||||||
|
|
||||||
leaderboard.loadScores{scores, error in
|
leaderboard.loadScores{scores, error in
|
||||||
|
|
||||||
// Get Scores
|
// Get Scores
|
||||||
let R_looser = scores?.filter { $0.player == looser }.first ?? GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER, player: looser)
|
let R_looser = scores?.filter { $0.player == looser }.first ?? GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER_ELO, player: looser)
|
||||||
let R_winner = scores?.filter { $0.player == winner }.first ?? GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER, player: winner)
|
let R_winner = scores?.filter { $0.player == winner }.first ?? GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER_ELO, player: winner)
|
||||||
|
|
||||||
// Calc ELO
|
// Calc ELO
|
||||||
let Q_looser = pow(10.0, Double(R_looser.value) / 400.0)
|
let Q_looser = pow(10.0, Double(R_looser.value) / 400.0)
|
||||||
@ -40,21 +41,26 @@ class EloHelper {
|
|||||||
let R_looser_new = Int64(Double(R_looser.value) + 10.0 * (0.0 - E_looser))
|
let R_looser_new = Int64(Double(R_looser.value) + 10.0 * (0.0 - E_looser))
|
||||||
|
|
||||||
// Update Elo on leaderboard
|
// Update Elo on leaderboard
|
||||||
let winner_new = GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER, player: winner)
|
let winner_new = GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER_ELO, player: winner)
|
||||||
winner_new.value = R_winner_new
|
winner_new.value = R_winner_new
|
||||||
let looser_new = GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER, player: looser)
|
let looser_new = GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER_ELO, player: looser)
|
||||||
looser_new.value = R_looser_new
|
looser_new.value = R_looser_new
|
||||||
|
|
||||||
let scoreForPeer = winner == GameCenterManager.sharedInstance.localPlayer ? looser_new : winner_new
|
let scoreForPeer = winner == GameCenterManager.sharedInstance.localPlayer ? looser_new : winner_new
|
||||||
let scoreForHost = winner == GameCenterManager.sharedInstance.localPlayer ? winner_new : looser_new
|
let scoreForHost = winner == GameCenterManager.sharedInstance.localPlayer ? winner_new : looser_new
|
||||||
|
|
||||||
MultiplayerNetwork.sharedInstance.sendEloData(scoreToReport: scoreForPeer)
|
MultiplayerNetwork.sharedInstance.sendEloData(scoreToReport: scoreForPeer)
|
||||||
|
reportScore(score: scoreForHost.value)
|
||||||
GKScore.report([scoreForHost], withCompletionHandler: { error in
|
|
||||||
os_log("New Scores reported to EloSystem", log: LOG, type: .info)
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static func reportScore(score: Int64) {
|
||||||
|
let gkScoreElo = GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER_ELO, player: GameCenterManager.sharedInstance.localPlayer)
|
||||||
|
gkScoreElo.value = score
|
||||||
|
let gkScoreAll = GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER_ALL_ELO, player: GameCenterManager.sharedInstance.localPlayer)
|
||||||
|
gkScoreAll.value = score
|
||||||
|
GKScore.report([gkScoreAll, gkScoreElo], withCompletionHandler: { error in
|
||||||
|
os_log("New Scores reported to EloSystem", log: self.LOG, type: .info)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -213,11 +213,7 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG
|
|||||||
|
|
||||||
if let eloData = try? jsonDecoder.decode(EloDataForPeer.self, from: data) {
|
if let eloData = try? jsonDecoder.decode(EloDataForPeer.self, from: data) {
|
||||||
print("Recieved elo data: \(eloData.scoreToReport)")
|
print("Recieved elo data: \(eloData.scoreToReport)")
|
||||||
let score = GKScore(leaderboardIdentifier: EloHelper.IDENTIFIER, player: self.localPlayer)
|
EloHelper.reportScore(score: eloData.scoreToReport)
|
||||||
score.value = eloData.scoreToReport
|
|
||||||
GKScore.report([score], withCompletionHandler: { error in
|
|
||||||
os_log("New Scores reported to EloSystem", log: self.LOG, type: .info)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
if let heartbeat = try? jsonDecoder.decode(Heartbeat.self, from: data) {
|
if let heartbeat = try? jsonDecoder.decode(Heartbeat.self, from: data) {
|
||||||
entityManager.getHUD()?.roundTimer.isHeartbeatLocked = false
|
entityManager.getHUD()?.roundTimer.isHeartbeatLocked = false
|
||||||
|
Loading…
Reference in New Issue
Block a user