game_state.dart 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import 'package:get/get.dart';
  2. import 'package:isar/isar.dart';
  3. import 'package:trackoffical_app/pb.dart' as pb;
  4. part 'game_state.g.dart';
  5. @collection
  6. class GameStateData {
  7. Id id = 0;
  8. List<byte> pbGameData = List.empty();
  9. List<byte> pbGameSave = List.empty();
  10. String name = '';
  11. GameState toState() {
  12. return GameState()
  13. ..name = name
  14. ..timeLocalServerDiff = Duration(microseconds: timeLocalServerDiffMicro)
  15. ..pbGameData = pb.GameData.fromBuffer(pbGameData)
  16. ..pbGameSave = pb.GameSave.fromBuffer(pbGameSave);
  17. }
  18. int timeLocalServerDiffMicro = 0;
  19. }
  20. class GameState {
  21. String name = '';
  22. pb.GameData pbGameData = pb.GameData();
  23. pb.GameSave pbGameSave = pb.GameSave();
  24. Duration timeLocalServerDiff = 0.seconds;
  25. DateTime get createTime => pbGameData.gameStart.toDateTime().toLocal();
  26. GameStateData get data {
  27. return GameStateData()
  28. ..name = name
  29. ..timeLocalServerDiffMicro = timeLocalServerDiff.inMicroseconds
  30. ..pbGameData = pbGameData.writeToBuffer()
  31. ..pbGameSave = pbGameSave.writeToBuffer();
  32. }
  33. }
  34. extension GameDataExtension on pb.GameData {
  35. GameState toGameState() {
  36. final save = pb.GameSave()
  37. ..gameId=gameId;
  38. final localNow = DateTime.now();
  39. final serverNow = gameStart.toDateTime();
  40. return GameState()
  41. ..timeLocalServerDiff = localNow.difference(serverNow)
  42. ..pbGameData = this
  43. ..pbGameSave = save;
  44. }
  45. }