app_map.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import 'dart:ui';
  2. import 'package:dio/dio.dart';
  3. import 'package:trackoffical_app/appcore/map_package.dart';
  4. import 'package:trackoffical_app/model/game_map.dart';
  5. import '../logger.dart';
  6. import '../model/m_net_image.dart';
  7. import 'package:trackoffical_app/service/image.dart';
  8. extension GameMapExtension on GameMap{
  9. Future<void> loadMemory({
  10. required ProgressCallback onReceiveProgress
  11. }) async{
  12. if (isLoaded){
  13. return;
  14. }
  15. final image = MNetImage()
  16. ..md5=md5
  17. ;
  18. data = await image.loadMemory(onReceiveProgress: onReceiveProgress);
  19. debug('[加载地图](${image.md5Hex}) \n文件类型:${image.ext}\n 文件大小${data?.length}');
  20. if(image.ext != 'zip'){
  21. throw const FormatException('不是zip');
  22. }
  23. final mp = MapPackage();
  24. await mp.loadMemory(data!);
  25. final size = await mp.dstSize;
  26. pic = await mp.mapImageData;
  27. debug('[加载地图]解压完成');
  28. data = null;
  29. height = size.height;
  30. width = size.width;
  31. mapPackage = mp;
  32. const p0Src = Offset(0, 0);
  33. final p1Src = Offset(width, 0);
  34. final mapTopLeftLocation = await pixelToWorld(p0Src);
  35. final mapTopRightLocation = await pixelToWorld(p1Src);
  36. mapWidth = mapTopLeftLocation.distance(mapTopRightLocation);
  37. isLoaded = true;
  38. debug('[加载地图] 加载完成\n尺寸: ($width, $height)\n宽度:$mapWidth');
  39. return;
  40. }
  41. }