mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2025-07-15 07:56:03 +00:00
Tinkered with ghost tapping some, leaving it off for now tho.
This commit is contained in:
parent
4c43f1ab85
commit
faf7a0643c
|
@ -2298,8 +2298,6 @@ class PlayState extends MusicBeatSubState
|
||||||
var notesInRange:Array<NoteSprite> = playerStrumline.getNotesMayHit();
|
var notesInRange:Array<NoteSprite> = playerStrumline.getNotesMayHit();
|
||||||
var holdNotesInRange:Array<SustainTrail> = playerStrumline.getHoldNotesHitOrMissed();
|
var holdNotesInRange:Array<SustainTrail> = playerStrumline.getHoldNotesHitOrMissed();
|
||||||
|
|
||||||
// If there are notes in range, pressing a key will cause a ghost miss.
|
|
||||||
|
|
||||||
var notesByDirection:Array<Array<NoteSprite>> = [[], [], [], []];
|
var notesByDirection:Array<Array<NoteSprite>> = [[], [], [], []];
|
||||||
|
|
||||||
for (note in notesInRange)
|
for (note in notesInRange)
|
||||||
|
@ -2321,17 +2319,27 @@ class PlayState extends MusicBeatSubState
|
||||||
|
|
||||||
// Play the strumline animation.
|
// Play the strumline animation.
|
||||||
playerStrumline.playPress(input.noteDirection);
|
playerStrumline.playPress(input.noteDirection);
|
||||||
|
trace('PENALTY Score: ${songScore}');
|
||||||
}
|
}
|
||||||
else if (Constants.GHOST_TAPPING && (holdNotesInRange.length + notesInRange.length > 0) && notesInDirection.length == 0)
|
else if (Constants.GHOST_TAPPING && (!playerStrumline.mayGhostTap()) && notesInDirection.length == 0)
|
||||||
{
|
{
|
||||||
// Pressed a wrong key with no notes nearby AND with notes in a different direction available.
|
// Pressed a wrong key with notes visible on-screen.
|
||||||
// Perform a ghost miss (anti-spam).
|
// Perform a ghost miss (anti-spam).
|
||||||
ghostNoteMiss(input.noteDirection, notesInRange.length > 0);
|
ghostNoteMiss(input.noteDirection, notesInRange.length > 0);
|
||||||
|
|
||||||
// Play the strumline animation.
|
// Play the strumline animation.
|
||||||
playerStrumline.playPress(input.noteDirection);
|
playerStrumline.playPress(input.noteDirection);
|
||||||
|
trace('PENALTY Score: ${songScore}');
|
||||||
}
|
}
|
||||||
else if (notesInDirection.length > 0)
|
else if (notesInDirection.length == 0)
|
||||||
|
{
|
||||||
|
// Press a key with no penalty.
|
||||||
|
|
||||||
|
// Play the strumline animation.
|
||||||
|
playerStrumline.playPress(input.noteDirection);
|
||||||
|
trace('NO PENALTY Score: ${songScore}');
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
// Choose the first note, deprioritizing low priority notes.
|
// Choose the first note, deprioritizing low priority notes.
|
||||||
var targetNote:Null<NoteSprite> = notesInDirection.find((note) -> !note.lowPriority);
|
var targetNote:Null<NoteSprite> = notesInDirection.find((note) -> !note.lowPriority);
|
||||||
|
@ -2341,17 +2349,13 @@ class PlayState extends MusicBeatSubState
|
||||||
// Judge and hit the note.
|
// Judge and hit the note.
|
||||||
trace('Hit note! ${targetNote.noteData}');
|
trace('Hit note! ${targetNote.noteData}');
|
||||||
goodNoteHit(targetNote, input);
|
goodNoteHit(targetNote, input);
|
||||||
|
trace('Score: ${songScore}');
|
||||||
|
|
||||||
notesInDirection.remove(targetNote);
|
notesInDirection.remove(targetNote);
|
||||||
|
|
||||||
// Play the strumline animation.
|
// Play the strumline animation.
|
||||||
playerStrumline.playConfirm(input.noteDirection);
|
playerStrumline.playConfirm(input.noteDirection);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// Play the strumline animation.
|
|
||||||
playerStrumline.playPress(input.noteDirection);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while (inputReleaseQueue.length > 0)
|
while (inputReleaseQueue.length > 0)
|
||||||
|
|
|
@ -171,6 +171,20 @@ class Strumline extends FlxSpriteGroup
|
||||||
updateNotes();
|
updateNotes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns `true` if no notes are in range of the strumline and the player can spam without penalty.
|
||||||
|
*/
|
||||||
|
public function mayGhostTap():Bool
|
||||||
|
{
|
||||||
|
// TODO: Refine this. Only querying "can be hit" is too tight but "is being rendered" is too loose.
|
||||||
|
// Also, if you just hit a note, there should be a (short) period where this is off so you can't spam.
|
||||||
|
|
||||||
|
// If there are any notes on screen, we can't ghost tap.
|
||||||
|
return notes.members.filter(function(note:NoteSprite) {
|
||||||
|
return note != null && note.alive && !note.hasBeenHit;
|
||||||
|
}).length == 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return notes that are within `Constants.HIT_WINDOW` ms of the strumline.
|
* Return notes that are within `Constants.HIT_WINDOW` ms of the strumline.
|
||||||
* @return An array of `NoteSprite` objects.
|
* @return An array of `NoteSprite` objects.
|
||||||
|
|
Loading…
Reference in a new issue