import 'package:get/get.dart'; import 'package:isar/isar.dart'; import 'package:trackoffical_app/pb.dart' as pb; part 'game_state.g.dart'; @collection class GameStateData { Id id = 0; List pbGameData = List.empty(); List pbGameSave = List.empty(); String name = ''; GameState toState() { return GameState() ..name = name ..timeLocalServerDiff = Duration(microseconds: timeLocalServerDiffMicro) ..pbGameData = pb.GameData.fromBuffer(pbGameData) ..pbGameSave = pb.GameSave.fromBuffer(pbGameSave); } int timeLocalServerDiffMicro = 0; } class GameState { String name = ''; pb.GameData pbGameData = pb.GameData(); pb.GameSave pbGameSave = pb.GameSave(); Duration timeLocalServerDiff = 0.seconds; DateTime get createTime => pbGameData.gameStart.toDateTime().toLocal(); GameStateData get data { return GameStateData() ..name = name ..timeLocalServerDiffMicro = timeLocalServerDiff.inMicroseconds ..pbGameData = pbGameData.writeToBuffer() ..pbGameSave = pbGameSave.writeToBuffer(); } } extension GameDataExtension on pb.GameData { GameState toGameState() { final save = pb.GameSave() ..gameId=gameId; final localNow = DateTime.now(); final serverNow = gameStart.toDateTime(); return GameState() ..timeLocalServerDiff = localNow.difference(serverNow) ..pbGameData = this ..pbGameSave = save; } }