@@ -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