import 'dart:collection'; import 'package:fixnum/fixnum.dart'; import 'package:get/get.dart'; import 'package:trackoffical_app/pb.dart' as pb; import 'package:trackoffical_app/utils.dart'; import 'm_control_point.dart'; class Settlement{ pb.GameData data; pb.GameSave save; Duration durationAfterStartCheck=0.seconds; int checkedCountAll = 0; int checkedCountValid = 0; bool get isPassed{ if(save.checkedSortedList.isNotEmpty){ if(checkedCountValid< data.controlPointSortedList.length-2){ return false; } final last = save.checkedSortedList.last; if(isPointFinish(data, last)){ final maxDuration = data.maxDuration.toDuration(); return last.checkAfterStart.toDuration() <= maxDuration; } } return false; } Settlement({ required this.data, required this.save, Duration? durationAfterStartCheck, }) { var isStarted = false; for (final one in save.checkedSortedList){ if (isPointStart(data, one) && (!isStarted)){ isStarted = true; continue; } if (!isPointFinish(data,one)){ checkedCountAll++; } } for (final one in save.checkedSortedList){ if ((!isPointStart(data,one)) && (!isPointFinish(data,one)) && (one.isCheckSuccess)){ checkedCountValid++; } } if(durationAfterStartCheck!= null){ this.durationAfterStartCheck = durationAfterStartCheck; }else if(save.checkedSortedList.isNotEmpty){ final last = save.checkedSortedList.last; this.durationAfterStartCheck = last.checkAfterStart.toDuration(); } } List get checkedCPRecord{ final out = []; final cpMap = HashMap(); for (var one in data.controlPointAll){ cpMap[one.id] = one.toModel(); } var successIter = 0; final sortMap = HashMap(); for(var i = 0; i< data.controlPointSortedList.length;i++){ sortMap[data.controlPointSortedList[i].id] = i; } for (var i = 0; i 0){ final prev = save.checkedSortedList[i-1]; mOne.checkAfterPrev = mOne.checkAfterStart - prev.checkAfterStart.toDuration(); } out.add(mOne); } } for (; successIter < data.controlPointSortedList.length; successIter++){ final one = data.controlPointSortedList[successIter]; out.add(one.toModel()); } for(var one in out){ var snInt = sortMap[one.intId]; if(snInt!=null){ one.sn = snInt.toString(); if(snInt ==0){ one.isStart=true; } if(snInt == data.controlPointSortedList.length-1){ one.isFinish=true; } } } return out; } } bool isPointStart(pb.GameData data, pb.GameSaveControlPoint p) { final seq = data.controlPointSortedList; if (seq.isNotEmpty) { return p.controlPointId == seq.first.id; } return false; } bool isPointFinish(pb.GameData data, pb.GameSaveControlPoint p) { final seq = data.controlPointSortedList; if (seq.isNotEmpty) { return p.controlPointId == seq.last.id; } return false; } pb.ControlPointSimple gameSaveControlPointFindInProject(pb.GameData data, pb.GameSaveControlPoint p) { final all = data.controlPointAll; for (final one in all) { if (one.id == p.controlPointId) { return one; } } return pb.ControlPointSimple(); } // extension PbHistoryGameDetailReplyExt on pb.HistoryGameDetailReply{ // Settlement toSettlement(){ // return Settlement( // data: gameData, // save: gameSave); // } // }