@@ -35,6 +35,7 @@ public struct SongData
3535 }
3636
3737 private SongData _curSong ;
38+ //Assume queue structure for notes in each lane.
3839 private readonly Note [ ] [ ] _laneNotes = new Note [ ] [ ]
3940 {
4041 Array . Empty < Note > ( ) ,
@@ -52,44 +53,35 @@ public override void _Ready()
5253 Player = GetNode < HealthBar > ( "PlayerHP" ) ;
5354 Enemy = GetNode < HealthBar > ( "EnemyHP" ) ;
5455
55- //TODO: Hook up signals
5656 CM . Connect ( nameof ( NoteManager . NotePressed ) , new Callable ( this , nameof ( OnNotePressed ) ) ) ;
5757 CM . Connect ( nameof ( NoteManager . NoteReleased ) , new Callable ( this , nameof ( OnNoteReleased ) ) ) ;
5858 }
5959
6060 public override void _Process ( double delta )
6161 {
6262 TimeKeeper . CurrentTime += delta ;
63- //Check beats downwards
63+ //Check beats for each lane for passive misses
6464 double curBeat = TimeKeeper . CurrentTime / ( 60 / ( double ) _curSong . Bpm ) ;
6565 for ( int i = 0 ; i < _laneNotes . Length ; i ++ )
6666 {
67- if ( _laneNotes [ i ] . Length > 0 )
67+ if ( _laneNotes [ i ] . Length <= 0 ) continue ;
68+ double beatDif = ( curBeat - _laneNotes [ i ] . First ( ) . Beat ) ;
69+ if ( beatDif > 1 )
6870 {
69- if ( curBeat > _laneNotes [ i ] [ 0 ] . Beat + 1 )
70- {
71- GD . Print ( $ "Beat: { _laneNotes [ i ] [ 0 ] . Beat } Miss") ;
72- GD . Print ( TimeKeeper . CurrentTime ) ;
73- //Cycle note queue
74- _laneNotes [ i ] . First ( ) . Beat += CM . _beatsPerLoop ;
75- _laneNotes [ i ] = _laneNotes [ i ] . Skip ( 1 ) . Concat ( _laneNotes [ i ] . Take ( 1 ) ) . ToArray ( ) ; //TODO: No stackoverflow code
76- Player . TakeDamage ( 10 ) ;
77- CM . HandleNote ( ( NoteArrow . ArrowType ) i ) ;
78- }
71+ handleTiming ( ( NoteArrow . ArrowType ) i , Math . Abs ( beatDif ) ) ;
7972 }
8073 }
8174 }
8275
76+ //Creeate dummy song data and notes
8377 private void AddExampleNote ( )
8478 {
85- //Create Dummy Song Data
8679 _curSong = new SongData
8780 {
8881 Bpm = 120 ,
8982 SongLength = 100 ,
9083 NumLoops = 5 ,
9184 } ;
92- //Add note
9385 for ( int i = 0 ; i < 4 ; i ++ )
9486 {
9587 Note exampleNote = new Note ( NoteArrow . ArrowType . Up , i + 3 ) ;
@@ -110,29 +102,17 @@ private void AddNoteToLane(Note note)
110102
111103 private void OnNotePressed ( NoteArrow . ArrowType type )
112104 {
113- //GD.Print("Note pressed: " + type + " at " + _currentTime + " seconds.");
114105 CheckNoteTiming ( type ) ;
115106 }
116107
117108 private void OnNoteReleased ( NoteArrow . ArrowType arrowType )
118109 {
119- //GD.Print("Note released: " + arrowType + " at " + _currentTime + " seconds.");
120110 }
121111
122- private void CheckNoteTiming ( NoteArrow . ArrowType type )
112+ private void handleTiming ( NoteArrow . ArrowType type , double beatDif )
123113 {
124- //Assume queue structure for notes
125- //Know current time, calculate beat timing
126- double curBeat = TimeKeeper . CurrentTime / ( 60 / ( double ) _curSong . Bpm ) ;
127- if ( _laneNotes [ ( int ) type ] . Length == 0 )
128- return ;
129- double beatDif = Math . Abs ( curBeat - _laneNotes [ ( int ) type ] . First ( ) . Beat ) ;
130- if ( beatDif > 1 )
131- return ;
132- GD . Print ( "Note Hit. Dif: " + beatDif ) ;
133- CM . HandleNote ( type ) ;
134114 //Cycle note queue
135- _laneNotes [ ( int ) type ] . First ( ) . Beat += CM . _beatsPerLoop ;
115+ _laneNotes [ ( int ) type ] . First ( ) . Beat += CM . BeatsPerLoop ;
136116 _laneNotes [ ( int ) type ] = _laneNotes [ ( int ) type ] //Credit: Stackoverflow https://stackoverflow.com/questions/49494535/moving-the-first-array-element-to-end-in-c-sharp
137117 . Skip ( 1 )
138118 . Concat ( _laneNotes [ ( int ) type ] . Take ( 1 ) )
@@ -159,4 +139,17 @@ private void CheckNoteTiming(NoteArrow.ArrowType type)
159139 Player . TakeDamage ( 10 ) ;
160140 }
161141 }
142+
143+ private void CheckNoteTiming ( NoteArrow . ArrowType type )
144+ {
145+ double curBeat = TimeKeeper . CurrentTime / ( 60 / ( double ) _curSong . Bpm ) ;
146+ if ( _laneNotes [ ( int ) type ] . Length == 0 )
147+ return ;
148+ double beatDif = Math . Abs ( curBeat - _laneNotes [ ( int ) type ] . First ( ) . Beat ) ;
149+ if ( beatDif > 1 )
150+ return ;
151+ GD . Print ( "Note Hit. Dif: " + beatDif ) ;
152+ CM . HandleNote ( type ) ;
153+ handleTiming ( type , beatDif ) ;
154+ }
162155}
0 commit comments