| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import 'dart:async';
- import 'dart:math';
- import 'package:flutter/cupertino.dart';
- import 'package:get/get.dart';
- import 'package:fixnum/fixnum.dart';
- import 'package:grpc/grpc.dart';
- import 'package:trackoffical_app/model/game_map.dart';
- // import 'package:trackoffical_app/model/settlement.dart';
- import 'package:trackoffical_app/pb.dart' as pb;
- import 'package:trackoffical_app/service/app_map.dart';
- import 'package:trackoffical_app/service/game/game_model.dart';
- import 'package:trackoffical_app/service/game/plug.dart';
- // import 'package:trackoffical_app/service/game/plug_location.dart';
- // import 'package:trackoffical_app/service/game/plug_sport_wear.dart';
- // import 'package:trackoffical_app/service/game/rule_in_order.dart';
- import 'package:trackoffical_app/service/game/show_position_controller.dart';
- import 'package:trackoffical_app/utils.dart';
- // import 'package:trackoffical_app/view/ingame/settlement_view.dart';
- import 'package:vibration/vibration.dart';
- import 'package:wakelock/wakelock.dart';
- import '../../logger.dart';
- import '../../model/m_control_point.dart';
- import '../api.dart';
- import '../../model.dart';
- import '../app.dart';
- import '../database.dart';
- import 'map_status.dart';
- import 'plug_orientation.dart';
- // import 'rule.dart';
- // import '../image.dart';
- class MapService extends GetxService {
- static MapService get to => Get.find();
- final DatabaseService _database = Get.find();
- final GameModel _model = Get.find();
- final App _app = Get.find();
- final mapStatus = MapStatus();
- final errorMsg = ''.obs;
- final name = "".obs;
- var mapId = 0;
- Offset? get positionOnMap => _model.myPositionOnMap.value;
- // static const _progressMap = 0.6;
- // static const _progressApi = 0.2;
- final _loadProgress = 0.0.obs;
- double get loadProgress => _loadProgress.value;
- List<MControlPoint> get controlPointWantSequence =>
- _model.controlPointWantSequence;
- Future<void> mapLoad() async {
- info('载入地图[$mapId]');
- // await _plugsClear();
- final gameMap = pb.ToMapInfoV2().zipImage.toGameMap();
- mapStatus.gameMapData = gameMap;
- await gameMap.loadMemory(onReceiveProgress: (count, total) {
- if (total > 0) {
- var p = count.toDouble() / total;
- // p = p * _progressMap + _progressApi;
- _loadProgress.value = p;
- }
- });
- mapStatus.mapImageData.value = gameMap.pic!;
- // --- 确定地图图片首次缩放比例 ---
- final screenSize = _app.screenSize;
- final fitted = applyBoxFit(
- BoxFit.contain,
- Size(gameMap.width, gameMap.height),
- Size(screenSize.width, screenSize.height));
- mapStatus.picFirstScale = fitted.destination.width / fitted.source.width;
- // --------------
- _model.mapRotateCenter =
- Offset(screenSize.width / 2, screenSize.height / 2);
- await mapStatus.resetMatrix();
- // _model.controlPointWantSequence.value =
- // await _getControlPointWantSequence();
- // _gameLoadCheckedCP();
- // final plugLocation = PlugLocation(
- // gameMap: gameMap,
- // lastInfo: _model.gameSrcState.value.pbGameSave.gameGpsInfos);
- //
- // _plugs.add(plugLocation);
- // _plugs.add(PlugSportWear(
- // lastHr: _model.gameSrcState.value.pbGameSave.gameHrInfos));
- // _plugs.add(PlugOrientation(mapStatus: mapStatus));
- //
- // await _plugsAllInit();
- info('载入完成');
- }
- showLocation() {
- final p = positionOnMap;
- if (p != null) {
- final dst = _model.mapRotateCenter;
- if (_model.isEnableUserLocation && !_model.isAlwaysShowMyLocation) {
- Get.find<ShowPositionController>().show();
- }
- if (dst != null) {
- mapStatus.movePicPointTo(p, dst);
- }
- }
- }
- @override
- void onReady() {
- }
- @override
- void onClose() {
- }
- static Future<MapService> init() async {
- final gs = MapService();
- return gs;
- }
- }
|