diff --git a/source/PauseSubState.hx b/source/PauseSubState.hx index fa7dbf3..29f0ffa 100644 --- a/source/PauseSubState.hx +++ b/source/PauseSubState.hx @@ -21,6 +21,9 @@ class PauseSubState extends MusicBeatSubstate var curSelected:Int = 0; var pauseMusic:FlxSound; + var perSongOffset:FlxText; + + var offsetChanged:Bool = false; public function new(x:Float, y:Float) { @@ -63,6 +66,10 @@ class PauseSubState extends MusicBeatSubstate grpMenuShit = new FlxTypedGroup(); add(grpMenuShit); + perSongOffset = new FlxText(5, FlxG.height - 18, 0, "Additive Offset (Left, Right): " + PlayState.songOffset + " - Description - " + 'Adds value to global offset, per song.', 12); + perSongOffset.scrollFactor.set(); + perSongOffset.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); + add(perSongOffset); for (i in 0...menuItems.length) { @@ -86,15 +93,71 @@ class PauseSubState extends MusicBeatSubstate var upP = controls.UP_P; var downP = controls.DOWN_P; + var leftP = controls.LEFT_P; + var rightP = controls.RIGHT_P; var accepted = controls.ACCEPT; + var oldOffset:Float = 0; + var songPath = 'assets/data/' + PlayState.SONG.song.toLowerCase() + '/'; if (upP) { changeSelection(-1); - } - if (downP) + + }else if (downP) { changeSelection(1); + }else if (leftP) + { + oldOffset = PlayState.songOffset; + PlayState.songOffset -= 1; + sys.FileSystem.rename(songPath + oldOffset + '.offset', songPath + PlayState.songOffset + '.offset'); + perSongOffset.text = "Additive Offset (Left, Right): " + PlayState.songOffset + " - Description - " + 'Adds value to global offset, per song.'; + + // Prevent loop from happening every single time the offset changes + if(!offsetChanged) + { + grpMenuShit.clear(); + + menuItems = ['Restart Song', 'Exit to menu']; + + for (i in 0...menuItems.length) + { + var songText:Alphabet = new Alphabet(0, (70 * i) + 30, menuItems[i], true, false); + songText.isMenuItem = true; + songText.targetY = i; + grpMenuShit.add(songText); + } + + changeSelection(); + + cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]]; + offsetChanged = true; + } + }else if (rightP) + { + oldOffset = PlayState.songOffset; + PlayState.songOffset += 1; + sys.FileSystem.rename(songPath + oldOffset + '.offset', songPath + PlayState.songOffset + '.offset'); + perSongOffset.text = "Additive Offset (Left, Right): " + PlayState.songOffset + " - Description - " + 'Adds value to global offset, per song.'; + if(!offsetChanged) + { + grpMenuShit.clear(); + + menuItems = ['Restart Song', 'Exit to menu']; + + for (i in 0...menuItems.length) + { + var songText:Alphabet = new Alphabet(0, (70 * i) + 30, menuItems[i], true, false); + songText.isMenuItem = true; + songText.targetY = i; + grpMenuShit.add(songText); + } + + changeSelection(); + + cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]]; + offsetChanged = true; + } } if (accepted) diff --git a/source/PlayState.hx b/source/PlayState.hx index baf899b..4409319 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -39,6 +39,7 @@ import lime.utils.Assets; import openfl.display.BlendMode; import openfl.display.StageQuality; import openfl.filters.ShaderFilter; +import Sys; #if windows import Discord.DiscordClient; @@ -180,6 +181,8 @@ class PlayState extends MusicBeatState // Will decide if she's even allowed to headbang at all depending on the song private var allowedToHeadbang:Bool = false; + // Per song additive offset + public static var songOffset:Float = 0; override public function create() { @@ -1226,6 +1229,24 @@ class PlayState extends MusicBeatState var playerCounter:Int = 0; + // Per song offset check + var songPath = 'assets/data/' + PlayState.SONG.song.toLowerCase() + '/'; + for(file in sys.FileSystem.readDirectory(songPath)) + { + var path = haxe.io.Path.join([songPath, file]); + if(!sys.FileSystem.isDirectory(path)) + { + if(path.endsWith('.offset')) + { + trace('Found offset file: ' + path); + songOffset = Std.parseFloat(file.substring(0, file.indexOf('.off'))); + break; + }else { + trace('Offset file not found. Creating one @: ' + songPath); + sys.io.File.saveContent(songPath + songOffset + '.offset', ''); + } + } + } var daBeats:Int = 0; // Not exactly representative of 'daBeats' lol, just how much it has looped for (section in noteData) { @@ -1233,7 +1254,7 @@ class PlayState extends MusicBeatState for (songNotes in section.sectionNotes) { - var daStrumTime:Float = songNotes[0] + FlxG.save.data.offset; + var daStrumTime:Float = songNotes[0] + FlxG.save.data.offset + songOffset; if (daStrumTime < 0) daStrumTime = 0; var daNoteData:Int = Std.int(songNotes[1] % 4); @@ -3249,4 +3270,4 @@ class PlayState extends MusicBeatState } var curLight:Int = 0; -} +} \ No newline at end of file