From c6af3690fb131ba31f442eb7f87cde3dcef50d96 Mon Sep 17 00:00:00 2001 From: TheZoroForce240 <86524550+TheZoroForce240@users.noreply.github.com> Date: Wed, 28 Aug 2024 19:49:10 +0100 Subject: [PATCH] note spacing option + reworked positioning --- source/funkin/backend/chart/ChartData.hx | 1 + .../funkin/editors/charter/ChartDataScreen.hx | 4 +-- .../charter/CharterPreviewStrumLine.hx | 12 ++++----- .../editors/charter/CharterStrumlineScreen.hx | 25 +++++++++++++------ source/funkin/game/PlayState.hx | 8 ++++-- source/funkin/game/StrumLine.hx | 6 ++++- 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/source/funkin/backend/chart/ChartData.hx b/source/funkin/backend/chart/ChartData.hx index 4fee89c1..a50b8e92 100644 --- a/source/funkin/backend/chart/ChartData.hx +++ b/source/funkin/backend/chart/ChartData.hx @@ -40,6 +40,7 @@ typedef ChartStrumLine = { var ?visible:Null; var ?strumPos:Array; var ?strumScale:Float; + var ?strumSpacing:Float; var ?scrollSpeed:Float; var ?vocalsSuffix:String; var ?keyCount:Int; // default=4 diff --git a/source/funkin/editors/charter/ChartDataScreen.hx b/source/funkin/editors/charter/ChartDataScreen.hx index 2acbedf1..bfa0b866 100644 --- a/source/funkin/editors/charter/ChartDataScreen.hx +++ b/source/funkin/editors/charter/ChartDataScreen.hx @@ -69,7 +69,7 @@ class ChartDataScreen extends UISubstateWindow { strumLineCam.bgColor = 0; strumLineCam.alpha = 0; FlxG.cameras.add(strumLineCam, false); - previewStrumLine = new CharterPreviewStrumLine(96, 50, 1, 4, 0); + previewStrumLine = new CharterPreviewStrumLine(96, 50, 1, 1, 4, 0); previewStrumLine.camera = strumLineCam; add(previewStrumLine); } @@ -92,7 +92,7 @@ class ChartDataScreen extends UISubstateWindow { scrollSpeed = scrollSpeedStepper.value; strumLineCam.alpha = CoolUtil.fpsLerp(strumLineCam.alpha, scrollSpeed == 0.0 ? 0.0 : 1.0, 0.2); - previewStrumLine.updatePos(96, 50, 1, 4, scrollSpeed); + previewStrumLine.updatePos(96, 50, 1, 1, 4, scrollSpeed); super.update(elapsed); } diff --git a/source/funkin/editors/charter/CharterPreviewStrumLine.hx b/source/funkin/editors/charter/CharterPreviewStrumLine.hx index cdca2104..afcc4d43 100644 --- a/source/funkin/editors/charter/CharterPreviewStrumLine.hx +++ b/source/funkin/editors/charter/CharterPreviewStrumLine.hx @@ -4,14 +4,14 @@ import funkin.game.Note; class CharterPreviewStrumLine extends FlxTypedGroup { - public function new(x:Float, y:Float, scale:Float, keyCount:Int, scrollSpeed:Float){ + public function new(x:Float, y:Float, scale:Float, spacing:Float, keyCount:Int, scrollSpeed:Float){ super(); - updatePos(x, y, scale, keyCount, scrollSpeed); + updatePos(x, y, scale, spacing, keyCount, scrollSpeed); } private var note:FlxSprite; - public function generateStrums(x:Float, y:Float, scale:Float, keyCount:Int, scrollSpeed:Float){ + public function generateStrums(x:Float, y:Float, scale:Float, spacing:Float, keyCount:Int, scrollSpeed:Float){ for (member in members){ member.destroy(); } @@ -44,14 +44,14 @@ class CharterPreviewStrumLine extends FlxTypedGroup var noteTime:Float = FlxG.height; var scroll:Float = 1.0; - public function updatePos(x:Float, y:Float, scale:Float, keyCount:Int, scrollSpeed:Float){ + public function updatePos(x:Float, y:Float, scale:Float, spacing:Float, keyCount:Int, scrollSpeed:Float){ if (members.length-1 != keyCount) //strumline + note - generateStrums(x, y, scale, keyCount, scrollSpeed); + generateStrums(x, y, scale, spacing, keyCount, scrollSpeed); for (i in 0...keyCount){ var strum = members[i]; - strum.x = CoolUtil.fpsLerp(strum.x, x + ((Note.swagWidth * scale * (4 / keyCount)) * i), 0.2); + strum.x = CoolUtil.fpsLerp(strum.x, x + (Note.swagWidth * scale * spacing * i), 0.2); strum.y = CoolUtil.fpsLerp(strum.y, y, 0.2); strum.scale.x = strum.scale.y = CoolUtil.fpsLerp(strum.scale.x, 0.7 * scale, 0.2); strum.updateHitbox(); diff --git a/source/funkin/editors/charter/CharterStrumlineScreen.hx b/source/funkin/editors/charter/CharterStrumlineScreen.hx index 7f6a6c5a..47524fec 100644 --- a/source/funkin/editors/charter/CharterStrumlineScreen.hx +++ b/source/funkin/editors/charter/CharterStrumlineScreen.hx @@ -1,5 +1,6 @@ package funkin.editors.charter; +import funkin.game.StrumLine; import flixel.math.FlxPoint; import funkin.backend.chart.ChartData.ChartStrumLine; import funkin.game.Character; @@ -23,6 +24,7 @@ class CharterStrumlineScreen extends UISubstateWindow { public var scrollSpeedStepper:UINumericStepper; public var usesChartscrollSpeed:UICheckbox; public var keyCountStepper:UINumericStepper; + public var hudSpacingStepper:UINumericStepper; public var characterIcons:Array = []; @@ -55,7 +57,7 @@ class CharterStrumlineScreen extends UISubstateWindow { }; winTitle = creatingStrumLine ? 'Creating strumline #$strumLineID' : 'Editing strumline #$strumLineID properties'; - winWidth = 690; winHeight = 400; + winWidth = 720; winHeight = 400; FlxG.sound.music.pause(); Charter.instance.vocals.pause(); @@ -113,17 +115,21 @@ class CharterStrumlineScreen extends UISubstateWindow { add(stagePositionDropdown); addLabelOn(stagePositionDropdown, "Stage Position"); - hudScaleStepper = new UINumericStepper(typeDropdown.x, typeDropdown.y + 64, strumLine.strumScale == null ? 1 : strumLine.strumScale, 0.001, 2, null, null, 74); + hudScaleStepper = new UINumericStepper(typeDropdown.x, typeDropdown.y + 64, strumLine.strumScale == null ? 1 : strumLine.strumScale, 0.001, 2, null, null, 84); add(hudScaleStepper); addLabelOn(hudScaleStepper, "Scale"); + hudSpacingStepper = new UINumericStepper(hudScaleStepper.x + 80 - 32 + 26, hudScaleStepper.y, strumLine.strumSpacing != null ? strumLine.strumSpacing : 1, 0.001, 10, null, null, 84); + add(hudSpacingStepper); + addLabelOn(hudSpacingStepper, "Spacing"); + var strOffset:Float = strumLine.strumLinePos == null ? (strumLine.type == 1 ? 0.75 : 0.25) : strumLine.strumLinePos; var startingPos:FlxPoint = strumLine.strumPos == null ? FlxPoint.get(strOffset, 50) : FlxPoint.get(strOffset, strumLine.strumPos[1]); - hudXStepper = new UINumericStepper(hudScaleStepper.x + 80 - 32 + 26, hudScaleStepper.y, startingPos.x, 0.01, 2, 0, 2, 84); + hudXStepper = new UINumericStepper(hudSpacingStepper.x + 80, hudScaleStepper.y, startingPos.x, 0.01, 2, 0, 2, 84); add(hudXStepper); addLabelOn(hudXStepper, "Hud Position (X [Ratio 0-1],Y)"); @@ -165,7 +171,7 @@ class CharterStrumlineScreen extends UISubstateWindow { add(vocalsSuffixDropDown); addLabelOn(vocalsSuffixDropDown, "Vocal Suffix"); - keyCountStepper = new UINumericStepper(vocalsSuffixDropDown.x + 200 + 26, vocalsSuffixDropDown.y, strumLine.keyCount != null ? strumLine.keyCount : 4, 1, 0, 1, 1000, 84); + keyCountStepper = new UINumericStepper(stagePositionDropdown.x, vocalsSuffixDropDown.y, strumLine.keyCount != null ? strumLine.keyCount : 4, 1, 0, 1, 1000, 84); add(keyCountStepper); addLabelOn(keyCountStepper, "Key Count"); @@ -175,14 +181,14 @@ class CharterStrumlineScreen extends UISubstateWindow { strumLineCam.bgColor = 0; strumLineCam.alpha = 0; FlxG.cameras.add(strumLineCam, false); - previewStrumLine = new CharterPreviewStrumLine(0, 0, 0, 4, 0); + previewStrumLine = new CharterPreviewStrumLine(0, 0, 0, 1, 4, 0); previewStrumLine.camera = strumLineCam; add(previewStrumLine); FlxTween.tween(strumLineCam, {alpha: 1}, 0.25, {ease: FlxEase.cubeOut}); } function saveStrumline() { - for (stepper in [hudXStepper, hudYStepper, hudScaleStepper, keyCountStepper]) + for (stepper in [hudXStepper, hudYStepper, hudScaleStepper, keyCountStepper, hudSpacingStepper]) @:privateAccess stepper.__onChange(stepper.label.text); var newStrumLine:ChartStrumLine = { @@ -197,6 +203,7 @@ class CharterStrumlineScreen extends UISubstateWindow { strumPos: [0, hudYStepper.value], strumLinePos: hudXStepper.value, strumScale: hudScaleStepper.value, + strumSpacing: hudSpacingStepper.value, vocalsSuffix: vocalsSuffixDropDown.options[vocalsSuffixDropDown.index] != "NONE" ? vocalsSuffixDropDown.options[vocalsSuffixDropDown.index] : "", keyCount: Std.int(keyCountStepper.value) }; @@ -210,11 +217,13 @@ class CharterStrumlineScreen extends UISubstateWindow { scrollSpeed = scrollSpeedStepper.value; previewStrumLine.visible = visibleCheckbox.checked; - var xOffset:Float = (FlxG.width * hudXStepper.value) - (Note.swagWidth * hudScaleStepper.value * 2); - previewStrumLine.updatePos(xOffset, hudYStepper.value, hudScaleStepper.value, Std.int(keyCountStepper.value), scrollSpeed); + + var xOffset:Float = StrumLine.calculateStartingXPos(hudXStepper.value, hudScaleStepper.value, hudSpacingStepper.value, Std.int(keyCountStepper.value)); + previewStrumLine.updatePos(xOffset, hudYStepper.value, hudScaleStepper.value, hudSpacingStepper.value, Std.int(keyCountStepper.value), scrollSpeed); super.update(elapsed); } + override public function destroy() { super.destroy(); FlxTween.cancelTweensOf(strumLineCam); diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 14fbed61..c356dea3 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -654,9 +654,13 @@ class PlayState extends MusicBeatState } var strOffset:Float = strumLine.strumLinePos == null ? (strumLine.type == 1 ? 0.75 : 0.25) : strumLine.strumLinePos; + var strumScale:Float = (strumLine.strumScale == null ? 1 : strumLine.strumScale); + var strumSpacing:Float = (strumLine.strumSpacing == null ? 1 : strumLine.strumSpacing); + var keyCount:Int = (strumLine.keyCount == null ? 4 : strumLine.keyCount); + var startingPos:FlxPoint = strumLine.strumPos == null ? - FlxPoint.get((FlxG.width * strOffset) - ((Note.swagWidth * (strumLine.strumScale == null ? 1 : strumLine.strumScale)) * 2), this.strumLine.y) : - FlxPoint.get(strumLine.strumPos[0] == 0 ? ((FlxG.width * strOffset) - ((Note.swagWidth * (strumLine.strumScale == null ? 1 : strumLine.strumScale)) * 2)) : strumLine.strumPos[0], strumLine.strumPos[1]); + FlxPoint.get(StrumLine.calculateStartingXPos(strOffset, strumScale, strumSpacing, keyCount), this.strumLine.y) : + FlxPoint.get(strumLine.strumPos[0] == 0 ? StrumLine.calculateStartingXPos(strOffset, strumScale, strumSpacing, keyCount) : strumLine.strumPos[0], strumLine.strumPos[1]); var strLine = new StrumLine(chars, startingPos, strumLine.strumScale == null ? 1 : strumLine.strumScale, diff --git a/source/funkin/game/StrumLine.hx b/source/funkin/game/StrumLine.hx index 4d2694de..9c322b78 100644 --- a/source/funkin/game/StrumLine.hx +++ b/source/funkin/game/StrumLine.hx @@ -307,7 +307,7 @@ class StrumLine extends FlxTypedGroup { public function createStrum(i:Int, ?animPrefix:String) { if (animPrefix == null) animPrefix = strumAnimPrefix[i % strumAnimPrefix.length]; - var babyArrow:Strum = new Strum(startingPos.x + ((Note.swagWidth * strumScale * (4 / (data.keyCount != null ? data.keyCount : 4))) * i), startingPos.y); + var babyArrow:Strum = new Strum(startingPos.x + (Note.swagWidth * strumScale * (data.strumSpacing != null ? data.strumSpacing : 1) * i), startingPos.y); babyArrow.ID = i; babyArrow.strumLine = this; @@ -367,6 +367,10 @@ class StrumLine extends FlxTypedGroup { } } + public static inline function calculateStartingXPos(hudXRatio:Float, scale:Float, spacing:Float, keyCount:Int) { + return (FlxG.width * hudXRatio) - ((Note.swagWidth * scale * ((keyCount/2)-0.5) * spacing) + Note.swagWidth * 0.5 * scale); + } + /** * SETTERS & GETTERS */