@@ -578,6 +578,14 @@ string trim(string s) {
578
578
return s;
579
579
}
580
580
581
+ void PECSolveEvent (vector<PGREvent> &events) {
582
+ for (int i = 1 ; i < events.size (); i++) events[i].start = events[i - 1 ].end ;
583
+ for (int i = events.size () - 2 ; i >= 0 ; i--) {
584
+ double et = events[i].endTime , st = events[i + 1 ].startTime ;
585
+ if (et < st) events.push_back ({ et, st, events[i].end , events[i].end , 0 });
586
+ if (et > st) events[i + 1 ].startTime = events[i].endTime ;
587
+ } sort (events.begin (), events.end (), [&](PGREvent a, PGREvent b){ return a.startTime + a.endTime < b.startTime + b.endTime ; });
588
+ }
581
589
string fromPEC (string txt, double bgmOffset = 0 ) {
582
590
int easingSize = sizeof (PECEasingMap) / sizeof (int );
583
591
@@ -662,16 +670,8 @@ string fromPEC(string txt, double bgmOffset = 0) {
662
670
sort (j.rotateEvents .begin (), j.rotateEvents .end (), [&](PGREvent a, PGREvent b){ return a.startTime + a.endTime < b.startTime + b.endTime ; });
663
671
sort (j.disappearEvents .begin (), j.disappearEvents .end (), [&](PGREvent a, PGREvent b){ return a.startTime + a.endTime < b.startTime + b.endTime ; });
664
672
for (int i = j.speedEvents .size () - 2 ; i >= 0 ; i--) j.speedEvents [i].endTime = j.speedEvents [i + 1 ].startTime ;
665
- auto solveEvent = [&](vector<PGREvent> &events, bool output = false ){
666
- for (int i = 1 ; i < events.size (); i++) events[i].start = events[i - 1 ].end ;
667
- for (int i = events.size () - 2 ; i >= 0 ; i--) {
668
- double et = events[i].endTime , st = events[i + 1 ].startTime ;
669
- if (et < st) events.push_back ({ et, st, events[i].end , events[i].end , 0 });
670
- if (et > st) events[i + 1 ].startTime = events[i].endTime ;
671
- } sort (events.begin (), events.end (), [&](PGREvent a, PGREvent b){ return a.startTime + a.endTime < b.startTime + b.endTime ; });
672
- };
673
- solveEvent (j.moveXEvents ); solveEvent (j.moveYEvents );
674
- solveEvent (j.rotateEvents ); solveEvent (j.disappearEvents );
673
+ PECSolveEvent (j.moveXEvents ); PECSolveEvent (j.moveYEvents );
674
+ PECSolveEvent (j.rotateEvents ); PECSolveEvent (j.disappearEvents );
675
675
}
676
676
677
677
// 给所有的事件加上个尾巴,不然 tmd 会出事
@@ -717,13 +717,29 @@ string fromPEC(string txt, double bgmOffset = 0) {
717
717
// ========================================================================================
718
718
//
719
719
// RPE Format Chart --> Official Phigros Format Chart
720
+ // 摆了,太 tm 复杂了,有时间我再写
720
721
//
721
722
// ========================================================================================
722
723
723
724
724
725
725
726
double BeatToDouble (Json::Value beat) {
726
727
return beat[0 ].asDouble () + beat[1 ].asDouble () / beat[2 ].asDouble ();
728
+ }
729
+ void RPESolveEvent (vector<PGRSpeedEvent> &events) {
730
+ // 排序
731
+ sort (events.begin (), events.end (), [&](PGRSpeedEvent a, PGRSpeedEvent b){ return a.startTime + a.endTime < b.startTime + b.endTime ; });
732
+ // 先处理异常 1
733
+ assert (events.size ());
734
+ if (events[0 ].startTime > 0 ) events.insert (events.begin (), { 0 , events[0 ].startTime , 0.0 , 0 });
735
+ // 异常 1 处理结束
736
+ // =========================
737
+ // 再处理异常 3
738
+ // for (int i = 0; i < events.size(); i++) if (events[i].startTime > events[i].endTime)
739
+
740
+ }
741
+ void RPESolveEvent (vector<PGREvent> &events) {
742
+
727
743
}
728
744
string fromRPE (string json, double bgmOffset = 0 ) {
729
745
Json::Value rpe; json_decode (json, rpe);
@@ -752,6 +768,7 @@ string fromRPE(string json, double bgmOffset = 0) {
752
768
for (int i = 0 ; i < rpe[" judgeLineList" ].size (); i++) {
753
769
auto item = rpe[" judgeLineList" ][i];
754
770
// 先将所有的事件添加进判定线去
771
+ judgelines[i].bpm = basicBpm * item[" bpmfactor" ].asDouble ();
755
772
for (int j = 0 ; j < item[" eventLayers" ].size (); j++) {
756
773
auto layer = item[" eventLayers" ][j];
757
774
for (int k = 0 ; k < layer[" speedEvents" ].size (); k++)
@@ -811,4 +828,14 @@ string fromRPE(string json, double bgmOffset = 0) {
811
828
});
812
829
}
813
830
}
831
+
832
+ for (auto &j: judgelines) {
833
+ sort (j.moveXEvents .begin (), j.moveXEvents .end (), [&](PGREvent a, PGREvent b){ return a.startTime + a.endTime < b.startTime + b.endTime ; });
834
+ sort (j.moveYEvents .begin (), j.moveYEvents .end (), [&](PGREvent a, PGREvent b){ return a.startTime + a.endTime < b.startTime + b.endTime ; });
835
+ sort (j.rotateEvents .begin (), j.rotateEvents .end (), [&](PGREvent a, PGREvent b){ return a.startTime + a.endTime < b.startTime + b.endTime ; });
836
+ sort (j.disappearEvents .begin (), j.disappearEvents .end (), [&](PGREvent a, PGREvent b){ return a.startTime + a.endTime < b.startTime + b.endTime ; });
837
+ RPESolveEvent (j.speedEvents );
838
+ RPESolveEvent (j.moveXEvents ); RPESolveEvent (j.moveYEvents );
839
+ RPESolveEvent (j.rotateEvents ); RPESolveEvent (j.disappearEvents );
840
+ }
814
841
}
0 commit comments