Я пытаюсь реализовать GKGameModel
в своем приложении. В нем он содержит переменные для нескольких вещей, но для целей моего вопроса меня интересуют следующие две переменные:
import GameplayKit
final class GameModel: NSObject, GKGameModel {
var players: [GKGameModelPlayer]?
var activePlayer: GKGameModelPlayer?
}
Я делаю что-то вроде этого, чтобы инициализировать игру с 3 игроками ( неточно)
let game = GameModel.init()
game.players = [Player(),Player(),Player()] // Create 3 players
guard let firstPlayer = game.players.first else {
return
}
game.activePlayer = firstPlayer
Класс игрока определяется как:
class Player : NSObject, GKGameModelPlayer {
var playerId: Int // GKGameModelPlayer protocol variable
let name: String
var cash: Int = 0
}
В моем проекте у меня есть Realm Entities и модели разделены. Таким образом, будут классы PlayerEntity
и Player
.
Я хочу использовать RealmSwift
для сохранения и загрузки данных GKGameModelPlayer
и, в частности, возможность сохранять / повторно сохранить активного игрока.
Я думаю, что ключ здесь - переменная playerId
; но я не уверен.
Но в чем я не уверен, так это в получении этой информации и последующем преобразовании ее в действительный формат GKGameModelPlayer
Моя текущая идея / теория заключается в том, что Мне нужно сопоставить мою модель с классом сущности и наоборот.
Ie:
// [REALM] Player entity
class PlayerEntity: Object {
@objc dynamic var id = UUID().uuidString
@objc dynamic var playerId: Int = 0
@objc dynamic var name: String = ""
@objc dynamic var cash: Int = 0
override static func primaryKey() -> String {
return "id"
}
}
И затем я расширяю этот класс, чтобы выполнить некое «сопоставление»:
extension PlayerEntity {
// Map model -> entity
convenience init(model: Player) {
self.init()
self.playerId = model.playerId
self.name = model.name
self.cash = model.cash
}
}
extension Player {
// Map entity -> model
convenience init(entity: PlayerEntity) {
let playerId = entity.playerId
let name = entity.name
let cash = entity.cash
self.init(id: playerId, name: name, cash: cash)
}
}
Прямо сейчас playerId
всегда равен нулю (0), потому что я не совсем уверен, как его установить.
Я могу сохранить игрока в игровом мире.
Проблема возникает, когда я пытаюсь восстановить проигрыватель, и я хочу восстановить переменную activePlayer в GameModel
Поэтому мой вопрос:
Как мне go о сохранении и восстановлении переменной activePlayer
, чтобы она продолжала соответствовать GKGameModelPlayer
?
Я благодарен за любую помощь по этому поводу.
С благодарностью