Skip to content

Commit ea5dc4a

Browse files
author
LittleYang0531
committed
Fix: FPS Drop
1 parent b01c035 commit ea5dc4a

21 files changed

+52
-28
lines changed

convert.h

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,14 @@ string trim(string s) {
578578
return s;
579579
}
580580

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+
}
581589
string fromPEC(string txt, double bgmOffset = 0) {
582590
int easingSize = sizeof(PECEasingMap) / sizeof(int);
583591

@@ -662,16 +670,8 @@ string fromPEC(string txt, double bgmOffset = 0) {
662670
sort(j.rotateEvents.begin(), j.rotateEvents.end(), [&](PGREvent a, PGREvent b){ return a.startTime + a.endTime < b.startTime + b.endTime; });
663671
sort(j.disappearEvents.begin(), j.disappearEvents.end(), [&](PGREvent a, PGREvent b){ return a.startTime + a.endTime < b.startTime + b.endTime; });
664672
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);
675675
}
676676

677677
// 给所有的事件加上个尾巴,不然 tmd 会出事
@@ -717,13 +717,29 @@ string fromPEC(string txt, double bgmOffset = 0) {
717717
// ========================================================================================
718718
//
719719
// RPE Format Chart --> Official Phigros Format Chart
720+
// 摆了,太 tm 复杂了,有时间我再写
720721
//
721722
// ========================================================================================
722723

723724

724725

725726
double BeatToDouble(Json::Value beat) {
726727
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+
727743
}
728744
string fromRPE(string json, double bgmOffset = 0) {
729745
Json::Value rpe; json_decode(json, rpe);
@@ -752,6 +768,7 @@ string fromRPE(string json, double bgmOffset = 0) {
752768
for (int i = 0; i < rpe["judgeLineList"].size(); i++) {
753769
auto item = rpe["judgeLineList"][i];
754770
// 先将所有的事件添加进判定线去
771+
judgelines[i].bpm = basicBpm * item["bpmfactor"].asDouble();
755772
for (int j = 0; j < item["eventLayers"].size(); j++) {
756773
auto layer = item["eventLayers"][j];
757774
for (int k = 0; k < layer["speedEvents"].size(); k++)
@@ -811,4 +828,14 @@ string fromRPE(string json, double bgmOffset = 0) {
811828
});
812829
}
813830
}
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+
}
814841
}

engine/buckets.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ auto bucket = defineBuckets<class Buckets>({
1717
x: 0,
1818
y: 0,
1919
w: 4.0,
20-
h: 4.0,
20+
h: 2.0,
2121
rotation: 0
2222
}
2323
},
@@ -30,7 +30,7 @@ auto bucket = defineBuckets<class Buckets>({
3030
x: 0,
3131
y: 0,
3232
w: 4.0,
33-
h: 4.0,
33+
h: 2.0,
3434
rotation: 0
3535
}
3636
},
@@ -64,7 +64,7 @@ auto bucket = defineBuckets<class Buckets>({
6464
x: 0,
6565
y: 0,
6666
w: 4.0,
67-
h: 4.0,
67+
h: 2.0,
6868
rotation: 0
6969
}
7070
},

engine/constants.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ double targetAspectRatio = 1920.0 / 1080.0;
55
double judgelineHeight = 0.01;
66
double baseNoteWidth = 0.48;
77
double minSFXDistance = 0.02;
8-
double noteRatio = 1;
9-
double dragRatio = 1;
10-
double flickRatio = 1;
11-
double hlNoteRatio = 1;
12-
double hlDragRatio = 1;
13-
double hlFlickRatio = 1;
8+
double noteRatio = 2;
9+
double dragRatio = 2;
10+
double flickRatio = 2;
11+
double hlNoteRatio = 2;
12+
double hlDragRatio = 2;
13+
double hlFlickRatio = 2;
1414
double holdHeadRatio = 989.0 / 50.0;
1515
double holdBodyRatio = 989.0 / 1950.0;
1616
double hlHoldHeadRatio = 1062.0 / 97.0;
@@ -68,7 +68,7 @@ class stage {
6868
#endif
6969

7070
#if play || watch
71-
let noteWidth = noteWidth2 / (3.25 / stage.w);
71+
let noteWidth = noteWidth2 * (stage.w / 3.55) * (stage.w / 3.55);
7272
class judgment {
7373
public:
7474

engine/watch/notes/DragNote.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,7 @@ class DragNote: public Archetype {
107107
SonolusApi updateSequential() {
108108
FUNCBEGIN
109109
IF (times.now < 0) Return(0); FI
110-
IF (isAbove) positionY = floorPosition - line.get(5);
111-
ELSE positionY = floorPosition + line.get(5); FI
110+
positionY = If(isAbove, floorPosition - line.get(5), floorPosition + line.get(5));
112111
return VOID;
113112
}
114113

engine/watch/notes/FlickNote.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,7 @@ class FlickNote: public Archetype {
106106
SonolusApi updateSequential() {
107107
FUNCBEGIN
108108
IF (times.now < 0) Return(0); FI
109-
IF (isAbove) positionY = floorPosition - line.get(5);
110-
ELSE positionY = floorPosition + line.get(5); FI
109+
positionY = If(isAbove, floorPosition - line.get(5), floorPosition + line.get(5));
111110
return VOID;
112111
}
113112

engine/watch/notes/HoldNote.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,7 @@ class HoldNote: public Archetype {
8282
FUNCBEGIN
8383
IF (times.skip) lastSpawn = -1; FI
8484
IF (times.now < 0) Return(0); FI
85-
IF (isAbove) positionY = floorPosition - line.get(5);
86-
ELSE positionY = floorPosition + line.get(5); FI
85+
positionY = If(isAbove, floorPosition - line.get(5), floorPosition + line.get(5));
8786
IF (isFake) Return(0); FI
8887

8988
// 画粒子效果

engine/watch/notes/NormalNote.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,7 @@ class NormalNote: public Archetype {
124124
SonolusApi updateSequential() {
125125
FUNCBEGIN
126126
IF (times.now < 0) Return(0); FI
127-
IF (isAbove) positionY = floorPosition - line.get(5);
128-
ELSE positionY = floorPosition + line.get(5); FI
127+
positionY = If(isAbove, floorPosition - line.get(5), floorPosition + line.get(5));
129128
return VOID;
130129
}
131130

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
},
4242
"level": {
4343
"name": "phigros-test-114514",
44+
"generate": "",
4445
"i18n": [
4546
{
4647
"localization": "default",

skin/#JUDGMENT_LINE.png

-350 Bytes
Loading

skin/#NOTE_CONNECTION_BLUE.png

-1000 KB
Loading

skin/#NOTE_CONNECTION_YELLOW.png

-979 KB
Loading

skin/#NOTE_HEAD_BLUE.png

-28.2 KB
Loading

skin/#NOTE_HEAD_CYAN.png

-22.9 KB
Loading

skin/#NOTE_HEAD_RED.png

-24.1 KB
Loading

skin/#NOTE_HEAD_YELLOW.png

-21.1 KB
Loading

skin/#NOTE_TAIL_BLUE.png

-41.2 KB
Loading

skin/#NOTE_TAIL_CYAN.png

-33.3 KB
Loading

skin/#NOTE_TAIL_RED.png

-42.2 KB
Loading

skin/#NOTE_TAIL_YELLOW.png

-29.6 KB
Loading

skin/Judgeline AllPerfect.png

-202 Bytes
Loading

skin/Judgeline FullCombo.png

-354 Bytes
Loading

0 commit comments

Comments
 (0)