diff --git a/source/funkin/ui/debug/charting/components/ChartEditorMeasureTicks.hx b/source/funkin/ui/debug/charting/components/ChartEditorMeasureTicks.hx index 5f394b9db..681208d27 100644 --- a/source/funkin/ui/debug/charting/components/ChartEditorMeasureTicks.hx +++ b/source/funkin/ui/debug/charting/components/ChartEditorMeasureTicks.hx @@ -176,17 +176,23 @@ class ChartEditorMeasureTicks extends FlxTypedSpriteGroup for (i in 0...ARBITRARY_LIMIT) { + // NOTE: i = 0 when rendering Measure 1 here. var targetMeasure:Int = currentMeasure + i - 1; if (targetMeasure < 0) continue; var measureTimeInMs:Float = Conductor.instance.getMeasureTimeInMs(targetMeasure); - // If we've gone past the end of the song, we're done. - if (measureTimeInMs > chartEditorState.songLengthInMs) break; - var measureTimeInSteps:Float = Conductor.instance.getTimeInSteps(measureTimeInMs); var measureTimeInPixels:Float = measureTimeInSteps * ChartEditorState.GRID_SIZE; + // If we've gone past the end of the song, we're done. + if (measureTimeInPixels > chartEditorState.songLengthInPixels) break; + + // Handle the case where the measure at the end of the song is too short to display a measure number. + final MIN_MEASURE_HEIGHT:Float = 24; // The minimum height of a measure, in pixels, in order for a measure number to display. + var shouldDisplayMeasureNumber:Bool = measureTimeInPixels + MIN_MEASURE_HEIGHT <= chartEditorState.songLengthInPixels; + var shouldDisplayMeasureDivider:Bool = true; + var relativeMeasureTimeInPixels:Float = measureTimeInPixels + this.y; final SCREEN_PADDING:Float = ChartEditorState.GRID_SIZE / 2; @@ -197,22 +203,29 @@ class ChartEditorMeasureTicks extends FlxTypedSpriteGroup break; } - // Else, display a number. + // Else, display a number and divider. - // Reuse an existing number. If we need a new number, create one with makeMeasureNumber(). - final REVIVE:Bool = true; - var measureNumber = measureNumbers.recycle(makeMeasureNumber, false, REVIVE); + if (shouldDisplayMeasureNumber) + { + // Reuse an existing number. If we need a new number, create one with makeMeasureNumber(). + final REVIVE:Bool = true; + var measureNumber = measureNumbers.recycle(makeMeasureNumber, false, REVIVE); - // Measures are base ZERO gah! - final OFFSET = 2; - measureNumber.text = '${targetMeasure + 1}'; - measureNumber.y = relativeMeasureTimeInPixels + OFFSET; - measureNumber.x = this.x; + // Measures are base ZERO gah! + final OFFSET = 2; + measureNumber.text = '${targetMeasure + 1}'; + measureNumber.y = relativeMeasureTimeInPixels + OFFSET; + measureNumber.x = this.x; + } - // Place a measure divider too. - var measureDivider = measureDividers.recycle(makeMeasureDivider, false, REVIVE); - measureDivider.y = relativeMeasureTimeInPixels - (ChartEditorThemeHandler.MEASURE_TICKS_MEASURE_WIDTH / 2); - measureDivider.x = this.x + (measureTicksSprite.width); + if (shouldDisplayMeasureDivider) + { + // Reuse an existing divider. If we need a new divider, create one with makeMeasureDivider(). + final REVIVE:Bool = true; + var measureDivider = measureDividers.recycle(makeMeasureDivider, false, REVIVE); + measureDivider.y = relativeMeasureTimeInPixels - (ChartEditorThemeHandler.MEASURE_TICKS_MEASURE_WIDTH / 2); + measureDivider.x = this.x + (measureTicksSprite.width); + } } }