import 'dart:convert'; import 'dart:ui'; import 'package:dio/dio.dart'; import 'package:f_cache/f_cache.dart'; import 'package:trackoffical_app/appcore/map_package.dart'; import 'package:trackoffical_app/model/game_map.dart'; import '../logger.dart'; import '../model/m_net_image.dart'; import 'api.dart' as api; import '../appcore/ffi.dart' as ffi; extension GameMapExtension on GameMap{ Future loadMemory({ required ProgressCallback onReceiveProgress }) async{ if (isLoaded){ return; } final image = MNetImage() ..md5=md5 ; // data = await image.loadMemory(onReceiveProgress: onReceiveProgress); // debug('[加载地图](${image.md5Hex}) \n文件类型:${image.ext}\n 文件大小${data?.length}'); final r = await CacheManager().getCached( id: image.md5Hex!, onProcess: onReceiveProgress, readerBuilder: () async{ final bin = await api.ApiService.to.getBinReaderByMd5(md5); final reader = bin.reader; reader.meta['nonce']=bin.nonce; reader.ext=bin.ext; return bin.reader; }); data = r.data; image.ext = r.ext??''; final nonceStr = r.meta['nonce']??''; final nonce = base64Decode(nonceStr); debug('解密地图'); data=await ffi.Crypto(bridge: ffi.api).decrypt(nonce: nonce, data: data!); info('解密成功'); debug('[加载地图](${image.md5Hex}) \n文件类型:${image.ext}\n 文件大小${data?.length}'); if(image.ext != 'zip'){ throw const FormatException('不是zip'); } final mp = MapPackage(); await mp.loadMemory(data!); final size = await mp.dstSize; pic = await mp.mapImageData; debug('[加载地图]解压完成'); data = null; height = size.height; width = size.width; mapPackage = mp; const p0Src = Offset(0, 0); final p1Src = Offset(width, 0); final mapTopLeftLocation = await pixelToWorld(p0Src); final mapTopRightLocation = await pixelToWorld(p1Src); mapWidth = mapTopLeftLocation.distance(mapTopRightLocation); isLoaded = true; debug('[加载地图] 加载完成\n尺寸: ($width, $height)\n宽度:$mapWidth'); return; } }