| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- 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<MControlPoint> get checkedCPRecord{
- final out = <MControlPoint>[];
- final cpMap = HashMap<Int64, MControlPoint>();
- for (var one in data.controlPointAll){
- cpMap[one.id] = one.toModel();
- }
- var successIter = 0;
- final sortMap = HashMap<Int64, int>();
- for(var i = 0; i< data.controlPointSortedList.length;i++){
- sortMap[data.controlPointSortedList[i].id] = i;
- }
- for (var i = 0; i<save.checkedSortedList.length;i++){
- final one = save.checkedSortedList[i];
- final src = cpMap[one.controlPointId];
- if(src != null){
- final mOne = MControlPoint();
- mOne.areaId = src.areaId;
- mOne.intId = src.intId;
- mOne.isUnchecked=false;
- mOne.checkAfterStart = one.checkAfterStart.toDuration();
- mOne.isSuccess = one.isCheckSuccess;
- if(mOne.isSuccess){
- successIter++;
- }
- if(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);
- // }
- // }
|