Add Leaderboard managing methods
This commit is contained in:
parent
1a9c075dce
commit
c517a36adc
@ -109,6 +109,77 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG
|
||||
}
|
||||
}
|
||||
|
||||
func submitLeaderboardScore(identifier: String, score: Int64) {
|
||||
let reportedScore = GKScore(leaderboardIdentifier: identifier)
|
||||
reportedScore.value = score
|
||||
GKScore.report([reportedScore]) { (error) in
|
||||
guard error == nil else {
|
||||
print(error?.localizedDescription ?? "")
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func calculateLeaderboardScore(identifier: String, scoreOffset: Int64) {
|
||||
GKLeaderboard.loadLeaderboards { (leaderboards: [GKLeaderboard]?, err: Error?) in
|
||||
leaderboards?.forEach({ (leaderboard: GKLeaderboard) in
|
||||
if leaderboard.identifier == identifier {
|
||||
leaderboard.loadScores { (scores: [GKScore]?, err: Error?) in
|
||||
scores?.forEach({ (score: GKScore) in
|
||||
if score.player == self.localPlayer {
|
||||
score.value += scoreOffset
|
||||
GKScore.report([score]) { (error) in
|
||||
guard error == nil else {
|
||||
print(error?.localizedDescription ?? "")
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: not finished -> DELETE if not usefull
|
||||
// Possible way to implement matchmaking based on 2 players
|
||||
// can be changed into method with fixed leaderboard and offset, boolean hasWon: true/false to calculate outcome of a match
|
||||
func calculateLeaderboardScoreExperimentalMatchmaking(identifier: String, scoreOffset: Int64, opponentPlayer: GKPlayer) {
|
||||
// Iterate through leaderboards
|
||||
GKLeaderboard.loadLeaderboards { (leaderboards: [GKLeaderboard]?, err: Error?) in
|
||||
leaderboards?.forEach({ (leaderboard: GKLeaderboard) in
|
||||
if leaderboard.identifier == identifier {
|
||||
leaderboard.loadScores { (scores: [GKScore]?, err: Error?) in
|
||||
// Iterate through scores
|
||||
var currentScore: GKScore = GKScore.init()
|
||||
currentScore.value = -1
|
||||
var opponetScore: GKScore = GKScore.init()
|
||||
currentScore.value = 0
|
||||
// Get scores of self and opponent
|
||||
scores?.forEach({ (score: GKScore) in
|
||||
if score.player == self.localPlayer {
|
||||
currentScore = score
|
||||
opponetScore = score
|
||||
}
|
||||
if score.player == opponentPlayer {
|
||||
opponetScore = score
|
||||
}
|
||||
})
|
||||
// do silly calculation
|
||||
currentScore.value += scoreOffset + (opponetScore.value - currentScore.value)
|
||||
GKScore.report([currentScore]) { (error) in
|
||||
guard error == nil else {
|
||||
print(error?.localizedDescription ?? "")
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func match(_ match: GKMatch, didReceive data: Data, fromRemotePlayer player: GKPlayer) {
|
||||
if myMatch != match { return }
|
||||
let jsonDecoder = JSONDecoder()
|
||||
|
Loading…
Reference in New Issue
Block a user