| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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<void> 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;
- }
- }
|