4040import ru .nsu .ccfit .zuev .osu .scoring .StatisticV2 ;
4141import ru .nsu .ccfit .zuev .skins .OsuSkin ;
4242
43+ import java .util .ArrayList ;
4344import java .util .BitSet ;
4445
4546public class GameplaySlider extends GameObject {
@@ -66,7 +67,7 @@ public class GameplaySlider extends GameObject {
6667 private final boolean isSliderBallFlip ;
6768 private boolean shouldSnakeOut ;
6869
69- private GameplayHitSampleInfo [][] nestedHitSamples ;
70+ private final ArrayList < ArrayList < GameplayHitSampleInfo >> nestedHitSamples = new ArrayList <>( 10 ) ;
7071 private final GameplaySequenceHitSampleInfo sliderSlideSample ;
7172 private final GameplaySequenceHitSampleInfo sliderWhistleSample ;
7273
@@ -606,14 +607,19 @@ private void removeFromScene() {
606607 listener .removeObject (this );
607608 stopSlidingSamples ();
608609
609- for (int i = 0 ; i < nestedHitSamples .length ; ++i ) {
610- for (int j = 0 ; j < nestedHitSamples [i ].length ; ++j ) {
611- nestedHitSamples [i ][j ].reset ();
612- GameplayHitSampleInfo .pool .free (nestedHitSamples [i ][j ]);
610+ for (int i = 0 , iSize = nestedHitSamples .size (); i < iSize ; ++i ) {
611+ var hitSamples = nestedHitSamples .get (i );
612+
613+ for (int j = hitSamples .size () - 1 ; j >= 0 ; --j ) {
614+ var sample = hitSamples .get (j );
615+
616+ sample .reset ();
617+ GameplayHitSampleInfo .pool .free (sample );
618+
619+ hitSamples .remove (j );
613620 }
614621 }
615622
616- nestedHitSamples = null ;
617623 path = null ;
618624 scene = null ;
619625 }
@@ -1301,21 +1307,30 @@ private void applyBodyFadeAdjustments(float fadeInDuration) {
13011307
13021308 private void reloadHitSounds () {
13031309 var nestedObjects = beatmapSlider .getNestedHitObjects ();
1304- nestedHitSamples = new GameplayHitSampleInfo [ nestedObjects .size ()][] ;
1310+ nestedHitSamples . ensureCapacity ( nestedObjects .size ()) ;
13051311
1306- for (int i = 0 ; i < nestedHitSamples . length ; ++i ) {
1312+ for (int i = 0 , size = nestedObjects . size () ; i < size ; ++i ) {
13071313 var nestedObjectSamples = nestedObjects .get (i ).getSamples ();
1308- nestedHitSamples [i ] = new GameplayHitSampleInfo [nestedObjectSamples .size ()];
1314+ int nestedObjectSampleCount = nestedObjectSamples .size ();
1315+
1316+ var nestedHitSample = i < nestedHitSamples .size () ? nestedHitSamples .get (i ) : null ;
1317+
1318+ if (nestedHitSample != null ) {
1319+ nestedHitSample .ensureCapacity (nestedObjectSampleCount );
1320+ } else {
1321+ nestedHitSample = new ArrayList <>(Math .max (5 , nestedObjectSampleCount ));
1322+ nestedHitSamples .add (nestedHitSample );
1323+ }
13091324
1310- for (int j = 0 ; j < nestedHitSamples [ i ]. length ; ++j ) {
1325+ for (int j = 0 ; j < nestedObjectSampleCount ; ++j ) {
13111326 var gameplaySample = GameplayHitSampleInfo .pool .obtain ();
13121327 gameplaySample .init (nestedObjectSamples .get (j ));
13131328
13141329 if (GameHelper .isSamplesMatchPlaybackRate ()) {
13151330 gameplaySample .setFrequency (GameHelper .getSpeedMultiplier ());
13161331 }
13171332
1318- nestedHitSamples [ i ][ j ] = gameplaySample ;
1333+ nestedHitSample . add ( gameplaySample ) ;
13191334 }
13201335 }
13211336
@@ -1355,7 +1370,7 @@ private void reloadHitSounds() {
13551370 }
13561371
13571372 private void playCurrentNestedObjectHitSound () {
1358- listener .playHitSamples (nestedHitSamples [ currentNestedObjectIndex ] );
1373+ listener .playHitSamples (nestedHitSamples . get ( currentNestedObjectIndex ) );
13591374 }
13601375
13611376 @ Override
0 commit comments