@@ -54,15 +54,16 @@ bool Encore::RhythmEngine::GuitarEngine::ActivateOverdrive(
5454void Encore::RhythmEngine::GuitarEngine::UpdateOnFrame (double CurrentTime) {
5555 CheckMissedNotes (0 , TheSongTime.GetElapsedTime ());
5656 stats->OverdriveFill += chart->overdrive .CheckOverdrive (CurrentTime);
57- if (stats->OverdriveFill > 1.0 ) stats->OverdriveFill = 1.0 ;
57+ if (stats->OverdriveFill > 1.0 )
58+ stats->OverdriveFill = 1.0 ;
5859 // there is ONLY lane 0 for guitar
5960}
6061void Encore::RhythmEngine::GuitarEngine::SetStatsInputState (
6162 InputChannel channel, Action action
6263) {
6364 stats->InputTime = TheSongTime.GetElapsedTime (); // todo: REPLACE WITH ACTUAL SONG
6465 // TIME
65- // (IN SECONDS)
66+ // (IN SECONDS)
6667 if (action == Action::PRESS) {
6768 switch (channel) {
6869 case InputChannel::LANE_1:
@@ -128,36 +129,38 @@ int Encore::RhythmEngine::GuitarEngine::RunHitStateCheck(
128129 if (StrumInput) {
129130 // miss should be managed by current frame
130131 // overhit is managed here
132+ if (Timers[" SAH" ].CanBeUsedUp (stats->InputTime )) {
133+ Timers[" SAH" ].ResetTimer ();
134+ return CheckNextInput;
135+ }
131136 if (EarlyStrike (CurrentNote.StartSeconds , stats->InputTime , stats->InputOffset )) {
137+
132138 chart->overdrive .UpdateEventViaNote (false , CurrentNote.StartTicks );
133139 return OverhitNote;
134140 }
135141 // if frets match, continue and try to hit
136142 if (InHitwindow (CurrentNote.StartSeconds , stats->InputTime , stats->InputOffset )) {
137143 if (!MaskMatch (CurrentNote.Lane , stats->HeldFretsArrayToMask ())) {
138- stats->FretAfterStrum = true ;
139- stats->FretAfterStrumTime = stats->InputTime ;
144+ Timers[" FAS" ].ActivateTimer (stats->InputTime );
140145 return CheckNextInput;
141146 }
142147 }
143148 }
144149 // if FAS is active, or if there was a strum
145150 // really couldve just put it up there LMFAO
146- bool strum = HittableAsStrum (
147- CurrentNote.NoteType ,
148- stats->FretAfterStrum ,
149- stats->InputTime ,
150- stats->FretAfterStrumTime
151- )
152- || StrumInput;
151+ bool strum = Timers[" FAS" ].CanBeUsedUp (stats->InputTime ) || StrumInput;
153152
154153 if (MaskMatch (CurrentNote.Lane , stats->HeldFretsArrayToMask ())
155154 && InHitwindow (CurrentNote.StartSeconds , stats->InputTime , stats->InputOffset )
156155 && (HittableAsHopo (CurrentNote.NoteType , stats->Combo )
157156 || HittableAsTap (CurrentNote.NoteType ) || strum)) {
158157 stats->HitNote (std::popcount (CurrentNote.Lane ));
159158 chart->overdrive .UpdateEventViaNote (true , CurrentNote.StartTicks );
160- stats->FretAfterStrum = false ;
159+ if (CurrentNote.NoteType == 1 && !StrumInput && !Timers[" FAS" ].CanBeUsedUp (stats->InputTime )) {
160+ Timers[" SAH" ].ActivateTimer (stats->InputTime );
161+ }
162+ Timers[" FAS" ].ResetTimer ();
163+
161164 chart->at (0 ).erase (curNoteItr);
162165 return HitState::HitNote;
163166 }
0 commit comments