Skip to content

Commit ec2a399

Browse files
authored
optimize __notePerStrum (#901)
* Update StrumLine.hx * Update StrumLine.hx * Update StrumLine.hx * Update StrumLine.hx
1 parent 3c15805 commit ec2a399

1 file changed

Lines changed: 38 additions & 24 deletions

File tree

source/funkin/game/StrumLine.hx

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -258,21 +258,28 @@ class StrumLine extends FlxTypedGroup<Strum> {
258258
}
259259
}
260260
function __inputProcessJustPressed(note:Note) {
261-
if (__justPressed[note.strumID] && !note.isSustainNote && !note.wasGoodHit && note.canBeHit) {
262-
var cur = __notePerStrum[note.strumID];
263-
var songPos = __updateNote_songPos;
264-
265-
var noteDist = Math.abs(note.strumTime - songPos);
266-
var curDist = cur != null ? Math.abs(cur.strumTime - songPos) : 999999;
261+
var strumID = note.strumID;
262+
if (!__justPressed[strumID] || note.isSustainNote || note.wasGoodHit || !note.canBeHit) return;
263+
264+
var cur = __notePerStrum[strumID];
265+
if (cur == null) {
266+
__notePerStrum[strumID] = note;
267+
return;
268+
}
267269

268-
var notePenalty = note.avoid ? 1 : 0;
269-
var curPenalty = (cur != null && cur.avoid) ? 1 : 0;
270+
var songPos = __updateNote_songPos;
271+
var noteDist = Math.abs(note.strumTime - songPos);
270272

271-
if (cur == null
272-
|| notePenalty < curPenalty
273-
|| (notePenalty == curPenalty && noteDist < curDist))
274-
__notePerStrum[note.strumID] = note;
273+
var noteShouldAvoid = note.avoid;
274+
var curShouldAvoid = cur.avoid;
275+
if (!noteShouldAvoid && curShouldAvoid) {
276+
__notePerStrum[strumID] = note;
277+
return;
275278
}
279+
280+
var curDist = Math.abs(cur.strumTime - songPos);
281+
if (noteShouldAvoid == curShouldAvoid && noteDist < curDist)
282+
__notePerStrum[strumID] = note;
276283
}
277284

278285
/**
@@ -284,13 +291,18 @@ class StrumLine extends FlxTypedGroup<Strum> {
284291

285292
if (cpu) return;
286293

287-
if (__pressed.length != members.length) {
288-
__pressed.resize(members.length);
289-
__justPressed.resize(members.length);
290-
__justReleased.resize(members.length);
294+
final membersLength = members.length;
295+
296+
if (__pressed.length != membersLength) {
297+
__pressed.resize(membersLength);
298+
__justPressed.resize(membersLength);
299+
__justReleased.resize(membersLength);
291300
}
292301

293-
for (i in 0...members.length) {
302+
if (__notePerStrum.length != membersLength)
303+
__notePerStrum = cast new haxe.ds.Vector(membersLength); // [for(_ in 0...members.length) null];
304+
305+
for (i in 0...membersLength) {
294306
__pressed[i] = members[i].__getPressed(this);
295307
__justPressed[i] = members[i].__getJustPressed(this);
296308
__justReleased[i] = members[i].__getJustReleased(this);
@@ -304,18 +316,20 @@ class StrumLine extends FlxTypedGroup<Strum> {
304316
__justPressed = CoolUtil.getDefault(event.justPressed, []);
305317
__justReleased = CoolUtil.getDefault(event.justReleased, []);
306318

307-
__notePerStrum = cast new haxe.ds.Vector(members.length); // [for(_ in 0...members.length) null];
308-
309319
if (__pressed.contains(true)) {
310320
if (__justPressed.contains(true)) {
311321
notes.forEachAlive(__inputProcessJustPressed);
312322

313-
if (!ghostTapping) for (k => pr in __justPressed) if (pr && __notePerStrum[k] == null)
314-
PlayState.instance.noteMiss(this, null, k, ID); // FUCK YOU
323+
for (k => pr in __justPressed)
324+
{
325+
var note = __notePerStrum[k];
315326

316-
for (e in __notePerStrum)
317-
if (e != null)
318-
PlayState.instance.goodNoteHit(this, e);
327+
if (note != null) {
328+
PlayState.instance.goodNoteHit(this, note);
329+
__notePerStrum[k] = null;
330+
} else if (pr && !ghostTapping)
331+
PlayState.instance.noteMiss(this, null, k, ID);
332+
}
319333
}
320334

321335
for (c in characters)

0 commit comments

Comments
 (0)