map.dart 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import 'dart:async';
  2. import 'dart:math';
  3. import 'package:flutter/cupertino.dart';
  4. import 'package:get/get.dart';
  5. import 'package:fixnum/fixnum.dart';
  6. import 'package:grpc/grpc.dart';
  7. import 'package:trackoffical_app/model/game_map.dart';
  8. // import 'package:trackoffical_app/model/settlement.dart';
  9. import 'package:trackoffical_app/pb.dart' as pb;
  10. import 'package:trackoffical_app/service/app_map.dart';
  11. import 'package:trackoffical_app/service/game/game_model.dart';
  12. import 'package:trackoffical_app/service/game/plug.dart';
  13. // import 'package:trackoffical_app/service/game/plug_location.dart';
  14. // import 'package:trackoffical_app/service/game/plug_sport_wear.dart';
  15. // import 'package:trackoffical_app/service/game/rule_in_order.dart';
  16. import 'package:trackoffical_app/service/game/show_position_controller.dart';
  17. import 'package:trackoffical_app/utils.dart';
  18. // import 'package:trackoffical_app/view/ingame/settlement_view.dart';
  19. import 'package:vibration/vibration.dart';
  20. import 'package:wakelock/wakelock.dart';
  21. import '../../logger.dart';
  22. import '../../model/m_control_point.dart';
  23. import '../api.dart';
  24. import '../../model.dart';
  25. import '../app.dart';
  26. import '../database.dart';
  27. import 'map_status.dart';
  28. import 'plug_orientation.dart';
  29. // import 'rule.dart';
  30. // import '../image.dart';
  31. class MapService extends GetxService {
  32. static MapService get to => Get.find();
  33. final DatabaseService _database = Get.find();
  34. final GameModel _model = Get.find();
  35. final App _app = Get.find();
  36. final mapStatus = MapStatus();
  37. final errorMsg = ''.obs;
  38. final name = "".obs;
  39. var mapId = 0;
  40. Offset? get positionOnMap => _model.myPositionOnMap.value;
  41. // static const _progressMap = 0.6;
  42. // static const _progressApi = 0.2;
  43. final _loadProgress = 0.0.obs;
  44. double get loadProgress => _loadProgress.value;
  45. List<MControlPoint> get controlPointWantSequence =>
  46. _model.controlPointWantSequence;
  47. Future<void> mapLoad() async {
  48. info('载入地图[$mapId]');
  49. // await _plugsClear();
  50. final gameMap = pb.ToMapInfoV2().zipImage.toGameMap();
  51. mapStatus.gameMapData = gameMap;
  52. await gameMap.loadMemory(onReceiveProgress: (count, total) {
  53. if (total > 0) {
  54. var p = count.toDouble() / total;
  55. // p = p * _progressMap + _progressApi;
  56. _loadProgress.value = p;
  57. }
  58. });
  59. mapStatus.mapImageData.value = gameMap.pic!;
  60. // --- 确定地图图片首次缩放比例 ---
  61. final screenSize = _app.screenSize;
  62. final fitted = applyBoxFit(
  63. BoxFit.contain,
  64. Size(gameMap.width, gameMap.height),
  65. Size(screenSize.width, screenSize.height));
  66. mapStatus.picFirstScale = fitted.destination.width / fitted.source.width;
  67. // --------------
  68. _model.mapRotateCenter =
  69. Offset(screenSize.width / 2, screenSize.height / 2);
  70. await mapStatus.resetMatrix();
  71. // _model.controlPointWantSequence.value =
  72. // await _getControlPointWantSequence();
  73. // _gameLoadCheckedCP();
  74. // final plugLocation = PlugLocation(
  75. // gameMap: gameMap,
  76. // lastInfo: _model.gameSrcState.value.pbGameSave.gameGpsInfos);
  77. //
  78. // _plugs.add(plugLocation);
  79. // _plugs.add(PlugSportWear(
  80. // lastHr: _model.gameSrcState.value.pbGameSave.gameHrInfos));
  81. // _plugs.add(PlugOrientation(mapStatus: mapStatus));
  82. //
  83. // await _plugsAllInit();
  84. info('载入完成');
  85. }
  86. showLocation() {
  87. final p = positionOnMap;
  88. if (p != null) {
  89. final dst = _model.mapRotateCenter;
  90. if (_model.isEnableUserLocation && !_model.isAlwaysShowMyLocation) {
  91. Get.find<ShowPositionController>().show();
  92. }
  93. if (dst != null) {
  94. mapStatus.movePicPointTo(p, dst);
  95. }
  96. }
  97. }
  98. @override
  99. void onReady() {
  100. }
  101. @override
  102. void onClose() {
  103. }
  104. static Future<MapService> init() async {
  105. final gs = MapService();
  106. return gs;
  107. }
  108. }