From 2ad46ea580e088981084274b674652aaa8d15438 Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Thu, 14 Oct 2021 01:36:59 +0000 Subject: [PATCH] Add hold note generation when recording. Co-authored-by: sigonasr2 --- LLSIG/src/main/java/LLSIG/LLSIG.java | 36 ++++++++++++++++++++-------- LLSIG/src/main/java/LLSIG/Lane.java | 3 ++- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/LLSIG/src/main/java/LLSIG/LLSIG.java b/LLSIG/src/main/java/LLSIG/LLSIG.java index 6978f4a..175913b 100644 --- a/LLSIG/src/main/java/LLSIG/LLSIG.java +++ b/LLSIG/src/main/java/LLSIG/LLSIG.java @@ -79,6 +79,8 @@ public class LLSIG implements KeyListener{ public static double LAST_LATE = 0; public static double LAST_MISS = 0; public static int COMBO = 0; + + public final static int NOTE_RECORD_BEAT_SNAP_MULTIPLE = 4; //How many beat divisions max we can snap to. public final static long TIMEPERTICK = 16666667l; public static double DRAWTIME=0; @@ -337,9 +339,10 @@ public class LLSIG implements KeyListener{ if (PLAYING&&EDITMODE) { Note n = new Note(NoteType.NORMAL,musicPlayer.getPlayPosition()); n.active=false; - System.out.println(Math.round(((musicPlayer.getPlayPosition()-offset)/beatDelay)*4)/(double)4); - n.setBeatSnap(Math.round(((musicPlayer.getPlayPosition()-offset)/beatDelay)*4)/(double)4); + //System.out.println(Math.round(((musicPlayer.getPlayPosition()-offset)/beatDelay)*NOTE_RECORD_BEAT_SNAP_MULTIPLE)/(double)NOTE_RECORD_BEAT_SNAP_MULTIPLE); + n.setBeatSnap(Math.round(((musicPlayer.getPlayPosition()-offset)/beatDelay)*NOTE_RECORD_BEAT_SNAP_MULTIPLE)/(double)NOTE_RECORD_BEAT_SNAP_MULTIPLE); LLSIG.game.lanes.get(lane).addNote(n); + LLSIG.game.lanes.get(lane).lastNoteAdded=n; } if (PLAYING&&!EDITMODE&&!EDITOR) { Lane l = lanes.get(lane); @@ -391,14 +394,27 @@ public class LLSIG implements KeyListener{ case KeyEvent.VK_SEMICOLON:{lane=8;}break; } if (lane!=-1) { - keyState[lane]=false; - Lane l = lanes.get(lane); - if (l.noteExists()) { - Note n = l.getNote(); - double diff2 = n.getEndFrame()-LLSIG.game.musicPlayer.getPlayPosition(); - if (n.getNoteType()==NoteType.HOLD&&n.active2&&!n.active&&diff2<=BAD_TIMING_WINDOW) { - judgeNote(l, diff2); - n.active2=false; + if (PLAYING&&EDITMODE) { + double noteBeat = Math.round(((musicPlayer.getPlayPosition()-offset)/beatDelay)*NOTE_RECORD_BEAT_SNAP_MULTIPLE)/(double)NOTE_RECORD_BEAT_SNAP_MULTIPLE; + Note lastNote = LLSIG.game.lanes.get(lane).lastNoteAdded; + if (lastNote!=null) { + if (noteBeat-lastNote.getBeatSnap()>=1) { + lastNote.setBeatSnapEnd(noteBeat); + lastNote.active2=false; + LLSIG.game.lanes.get(lane).lastNoteAdded=null; + } + } + } + if (PLAYING&&!EDITMODE&&!EDITOR) { + keyState[lane]=false; + Lane l = lanes.get(lane); + if (l.noteExists()) { + Note n = l.getNote(); + double diff2 = n.getEndFrame()-LLSIG.game.musicPlayer.getPlayPosition(); + if (n.getNoteType()==NoteType.HOLD&&n.active2&&!n.active&&diff2<=BAD_TIMING_WINDOW) { + judgeNote(l, diff2); + n.active2=false; + } } } } diff --git a/LLSIG/src/main/java/LLSIG/Lane.java b/LLSIG/src/main/java/LLSIG/Lane.java index 7d019fc..ce711d0 100644 --- a/LLSIG/src/main/java/LLSIG/Lane.java +++ b/LLSIG/src/main/java/LLSIG/Lane.java @@ -6,6 +6,7 @@ public class Lane{ int currentNoteIndex = 0; TimingRating lastRating = TimingRating.MISS; double lastNote = -1; + Note lastNoteAdded; public Lane(List noteChart) { super(); this.noteChart = noteChart; @@ -34,7 +35,7 @@ public class Lane{ for (int i=0;i