From b48d09ef52e3b66ffe528a977e352a61734b13ab Mon Sep 17 00:00:00 2001 From: Yoshman29 <81191621+YoshiCrafter29@users.noreply.github.com> Date: Fri, 10 Mar 2023 23:40:26 +0100 Subject: [PATCH] editor selection screen --- assets/images/editors/icons.png | Bin 0 -> 69275 bytes buildnumber.txt | 2 +- source/funkin/cutscenes/DialogueCutscene.hx | 2 - source/funkin/cutscenes/MP4Handler.hx | 2 - source/funkin/cutscenes/VideoCutscene.hx | 3 - .../funkin/cutscenes/dialogue/DialogueBox.hx | 1 - .../cutscenes/dialogue/DialogueCharacter.hx | 1 - source/funkin/desktop/DesktopMain.hx | 5 - source/funkin/desktop/DesktopScreen.hx | 2 - source/funkin/desktop/DesktopUtils.hx | 1 - .../funkin/desktop/editors/CharacterEditor.hx | 5 - .../funkin/desktop/editors/EditorPlayState.hx | 2 - source/funkin/desktop/editors/HelloWorld.hx | 1 - source/funkin/desktop/editors/MessageBox.hx | 1 - source/funkin/desktop/sprites/Button.hx | 2 - source/funkin/desktop/sprites/Checkbox.hx | 2 - source/funkin/desktop/sprites/InputBox.hx | 2 - source/funkin/desktop/sprites/MenuBar.hx | 3 - .../funkin/desktop/sprites/NumericStepper.hx | 1 - source/funkin/desktop/sprites/SpliceSprite.hx | 2 - source/funkin/desktop/sprites/TabView.hx | 3 - source/funkin/desktop/windows/ContextMenu.hx | 4 - source/funkin/desktop/windows/Window.hx | 7 - .../desktop/windows/WindowCaptionButton.hx | 1 - .../funkin/desktop/windows/WindowContent.hx | 4 - .../desktop/windows/WindowDragHitbox.hx | 3 - source/funkin/desktop/windows/WindowGroup.hx | 5 - source/funkin/editors/CharacterEditor.hx | 1 - source/funkin/editors/EditorPicker.hx | 168 ++++++++++++++++++ .../editors/charter/CharterSelection.hx | 23 +++ source/funkin/game/Character.hx | 3 - source/funkin/game/GameOverSubstate.hx | 2 - source/funkin/game/HealthIcon.hx | 1 - source/funkin/game/Highscore.hx | 1 - source/funkin/game/HudCamera.hx | 2 - source/funkin/game/Note.hx | 4 - source/funkin/game/NoteGroup.hx | 2 - source/funkin/game/PlayState.hx | 6 - source/funkin/game/SplashGroup.hx | 2 - source/funkin/game/SplashHandler.hx | 1 - source/funkin/game/Stage.hx | 4 - source/funkin/game/Strum.hx | 3 - source/funkin/game/StrumLine.hx | 3 - source/funkin/import.hx | 12 ++ source/funkin/menus/BetaWarningState.hx | 2 - source/funkin/menus/FreeplayState.hx | 9 +- source/funkin/menus/GitarooPause.hx | 2 - source/funkin/menus/MainMenuState.hx | 14 +- source/funkin/menus/ModSwitchMenu.hx | 6 - source/funkin/menus/PauseSubState.hx | 6 - source/funkin/menus/StoryMenuState.hx | 4 - source/funkin/menus/TitleState.hx | 4 - .../funkin/menus/credits/CreditsCodename.hx | 3 - source/funkin/menus/credits/CreditsMain.hx | 1 - source/funkin/mods/ModsFolder.hx | 2 - source/funkin/options/LatencyState.hx | 3 - source/funkin/options/Options.hx | 1 - source/funkin/options/OptionsMenu.hx | 5 - source/funkin/options/OptionsScreen.hx | 3 - source/funkin/options/PlayerSettings.hx | 2 - .../funkin/options/categories/MiscOptions.hx | 1 - .../options/keybinds/ChangeKeybindSubState.hx | 8 - .../funkin/options/keybinds/KeybindSetting.hx | 8 - .../options/keybinds/KeybindsOptions.hx | 8 - source/funkin/options/type/Checkbox.hx | 1 - source/funkin/options/type/TextOption.hx | 1 - source/funkin/scripting/EventManager.hx | 1 - source/funkin/scripting/GlobalScript.hx | 1 - source/funkin/scripting/Script.hx | 1 - .../funkin/scripting/events/CountdownEvent.hx | 1 - source/funkin/system/AudioSwitchFix.hx | 1 - source/funkin/system/Conductor.hx | 2 - source/funkin/system/Controls.hx | 1 - source/funkin/system/FlxAnimate.hx | 4 - source/funkin/system/FunkinRatioScaleMode.hx | 1 - source/funkin/system/FunkinSprite.hx | 13 +- source/funkin/system/Main.hx | 1 - source/funkin/system/MusicBeatGroup.hx | 2 - source/funkin/system/MusicBeatState.hx | 2 - source/funkin/system/MusicBeatSubstate.hx | 2 - source/funkin/system/Paths.hx | 1 - .../funkin/system/framerate/AssetTreeInfo.hx | 2 - .../funkin/system/framerate/ConductorInfo.hx | 1 - source/funkin/system/framerate/Framerate.hx | 2 - .../system/framerate/FramerateCategory.hx | 1 - .../system/framerate/FramerateCounter.hx | 1 - .../funkin/system/framerate/MemoryCounter.hx | 1 - source/funkin/system/framerate/SystemInfo.hx | 2 - source/funkin/ui/Alphabet.hx | 3 - .../funkin/updating/UpdateAvailableScreen.hx | 5 - source/funkin/updating/UpdateScreen.hx | 2 - source/funkin/utils/CoolUtil.hx | 5 - source/funkin/utils/FlxInterpolateColor.hx | 1 - source/funkin/utils/XMLUtil.hx | 2 - 94 files changed, 213 insertions(+), 248 deletions(-) create mode 100644 assets/images/editors/icons.png create mode 100644 source/funkin/editors/EditorPicker.hx create mode 100644 source/funkin/editors/charter/CharterSelection.hx diff --git a/assets/images/editors/icons.png b/assets/images/editors/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffed20bb8d3ca102ed98f29a026ad2e9b4bccc8 GIT binary patch literal 69275 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

x#tq$6G%{~_gJ_;_4Spw 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 { diff --git a/source/funkin/desktop/sprites/NumericStepper.hx b/source/funkin/desktop/sprites/NumericStepper.hx index c79ceefc..26c3f5cf 100644 --- a/source/funkin/desktop/sprites/NumericStepper.hx +++ b/source/funkin/desktop/sprites/NumericStepper.hx @@ -1,6 +1,5 @@ package funkin.desktop.sprites; -import flixel.math.FlxMath; // TODO: FIX MEMORY GOING BRRRRRRRRRRRRRRRRRRRRR class NumericStepper extends InputBox { diff --git a/source/funkin/desktop/sprites/SpliceSprite.hx b/source/funkin/desktop/sprites/SpliceSprite.hx index 549af3ab..02aec5b6 100644 --- a/source/funkin/desktop/sprites/SpliceSprite.hx +++ b/source/funkin/desktop/sprites/SpliceSprite.hx @@ -3,8 +3,6 @@ package funkin.desktop.sprites; import openfl.display.BitmapData; import openfl.geom.Rectangle; import openfl.geom.Point; -import flixel.FlxObject; -import flixel.FlxSprite; import flixel.system.FlxAssets.FlxGraphicAsset; class SpliceSprite extends FlxObject { diff --git a/source/funkin/desktop/sprites/TabView.hx b/source/funkin/desktop/sprites/TabView.hx index f02e57e1..e9c53e81 100644 --- a/source/funkin/desktop/sprites/TabView.hx +++ b/source/funkin/desktop/sprites/TabView.hx @@ -1,9 +1,6 @@ package funkin.desktop.sprites; -import flixel.FlxObject; import flixel.math.FlxRect; -import flixel.FlxSprite; -import flixel.FlxBasic; import funkin.desktop.windows.WindowGroup; class TabView extends WindowGroup { diff --git a/source/funkin/desktop/windows/ContextMenu.hx b/source/funkin/desktop/windows/ContextMenu.hx index b4fa85e3..b2edfa38 100644 --- a/source/funkin/desktop/windows/ContextMenu.hx +++ b/source/funkin/desktop/windows/ContextMenu.hx @@ -1,11 +1,7 @@ package funkin.desktop.windows; -import flixel.FlxCamera; import flixel.util.FlxDestroyUtil; -import flixel.FlxSprite; import funkin.desktop.sprites.*; -import flixel.FlxObject; -import flixel.FlxG; class ContextMenu extends WindowGroup { public var bg:SpliceSprite; diff --git a/source/funkin/desktop/windows/Window.hx b/source/funkin/desktop/windows/Window.hx index fa22c47a..701c4982 100644 --- a/source/funkin/desktop/windows/Window.hx +++ b/source/funkin/desktop/windows/Window.hx @@ -2,18 +2,11 @@ package funkin.desktop.windows; import flixel.math.FlxRect; import flixel.addons.ui.FlxUIText; -import flixel.group.FlxGroup.FlxTypedGroup; -import flixel.FlxBasic; import openfl.geom.Point; import flixel.group.FlxSpriteGroup; import openfl.geom.Rectangle; import flixel.addons.ui.FlxUI9SliceSprite; -import flixel.FlxSprite; -import flixel.FlxCamera; -import flixel.FlxG; import flixel.tweens.FlxTween; -import flixel.tweens.FlxEase; -import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; import funkin.desktop.sprites.*; import funkin.desktop.editors.MessageBox.MessageBoxIcon; import funkin.desktop.editors.MessageBox; diff --git a/source/funkin/desktop/windows/WindowCaptionButton.hx b/source/funkin/desktop/windows/WindowCaptionButton.hx index 52bdbeab..1fc402b0 100644 --- a/source/funkin/desktop/windows/WindowCaptionButton.hx +++ b/source/funkin/desktop/windows/WindowCaptionButton.hx @@ -1,6 +1,5 @@ package funkin.desktop.windows; -import flixel.FlxSprite; class WindowCaptionButton extends FlxSprite { public var icon:FlxSprite; diff --git a/source/funkin/desktop/windows/WindowContent.hx b/source/funkin/desktop/windows/WindowContent.hx index 2a1aea5f..cdef1392 100644 --- a/source/funkin/desktop/windows/WindowContent.hx +++ b/source/funkin/desktop/windows/WindowContent.hx @@ -1,9 +1,5 @@ package funkin.desktop.windows; -import flixel.FlxBasic; -import flixel.FlxSprite; -import flixel.group.FlxGroup.FlxTypedGroup; -import flixel.FlxCamera; class WindowContent extends WindowGroup { public var winX(default, set):Float = 0; diff --git a/source/funkin/desktop/windows/WindowDragHitbox.hx b/source/funkin/desktop/windows/WindowDragHitbox.hx index b90e08af..b8e78b4d 100644 --- a/source/funkin/desktop/windows/WindowDragHitbox.hx +++ b/source/funkin/desktop/windows/WindowDragHitbox.hx @@ -1,8 +1,5 @@ package funkin.desktop.windows; -import flixel.FlxG; -import flixel.FlxObject; -import flixel.math.FlxMath; import flixel.math.FlxPoint; class WindowDragHitbox extends FlxObject { diff --git a/source/funkin/desktop/windows/WindowGroup.hx b/source/funkin/desktop/windows/WindowGroup.hx index 210e05af..0db424f7 100644 --- a/source/funkin/desktop/windows/WindowGroup.hx +++ b/source/funkin/desktop/windows/WindowGroup.hx @@ -1,11 +1,6 @@ package funkin.desktop.windows; -import flixel.math.FlxMath; import flixel.math.FlxPoint; -import flixel.FlxObject; -import flixel.group.FlxGroup.FlxTypedGroup; -import flixel.FlxBasic; -import flixel.FlxCamera; class WindowGroup extends FlxTypedGroup { public var x:Float = 0; diff --git a/source/funkin/editors/CharacterEditor.hx b/source/funkin/editors/CharacterEditor.hx index faa5d8d2..b2c13605 100644 --- a/source/funkin/editors/CharacterEditor.hx +++ b/source/funkin/editors/CharacterEditor.hx @@ -1,7 +1,6 @@ package funkin.editors; import funkin.desktop.DesktopMain; -import flixel.FlxG; import flixel.FlxState; import funkin.game.*; diff --git a/source/funkin/editors/EditorPicker.hx b/source/funkin/editors/EditorPicker.hx new file mode 100644 index 00000000..8c1a08b5 --- /dev/null +++ b/source/funkin/editors/EditorPicker.hx @@ -0,0 +1,168 @@ +package funkin.editors; + +import flixel.math.FlxPoint; + + +class EditorPicker extends MusicBeatSubstate { + public var bg:FlxSprite; + + public var options:Array = [ + { + name: "Chart Editor", + iconID: 0, + state: null + }, + { + name: "Character Editor", + iconID: 1, + state: null + }, + { + name: "Stage Editor", + iconID: 2, + state: null + }, + { + name: "Unknown Editor", + iconID: 3, + state: null + }, + { + name: "Unknown Editor", + iconID: 3, + state: null + }, + { + name: "Unknown Editor", + iconID: 3, + state: null + } + ]; + + public var sprites:Array = []; + + public var curSelected:Int = 0; + + + public var oldMousePos:FlxPoint = FlxPoint.get(); + public var curMousePos:FlxPoint = FlxPoint.get(); + + public var optionHeight:Float = 0; + + public override function create() { + super.create(); + + camera = new FlxCamera(); + camera.bgColor = 0; + FlxG.cameras.add(camera); + + bg = new FlxSprite().makeGraphic(1, 1, 0xFF000000); + bg.scale.set(FlxG.width, FlxG.height); + bg.updateHitbox(); + bg.alpha = 0; + add(bg); + + optionHeight = FlxG.height / options.length; + for(k=>o in options) { + var spr = new EditorPickerOption(o.name, o.iconID, optionHeight); + spr.y = k * optionHeight; + add(spr); + sprites.push(spr); + } + sprites[0].selected = true; + + FlxG.mouse.getScreenPosition(camera, oldMousePos); + } + + public override function update(elapsed:Float) { + super.update(elapsed); + + bg.alpha = CoolUtil.fpsLerp(bg.alpha, 0.5, 0.25); + changeSelection(-FlxG.mouse.wheel + (controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0)); + + FlxG.mouse.getScreenPosition(camera, curMousePos); + if (curMousePos.x != oldMousePos.x || curMousePos.y != oldMousePos.y) { + oldMousePos.set(curMousePos.x, curMousePos.y); + curSelected = -1; + changeSelection(Std.int(curMousePos.y / optionHeight)+1); + } + } + + public function changeSelection(change:Int) { + if (change == 0) return; + + curSelected = FlxMath.wrap(curSelected + change, 0, sprites.length-1); + + for(o in sprites) + o.selected = false; + sprites[curSelected].selected = true; + } +} + +typedef Editor = { + var name:String; + var iconID:Int; + var state:Class; +} + +class EditorPickerOption extends FlxTypedSpriteGroup { + public var iconSpr:FlxSprite; + public var label:Alphabet; + + public var selectionBG:FlxSprite; + + public var selected:Bool = false; + + public var selectionLerp:Float = 0; + + public var iconRotationCycle:Float = 0; + public function new(name:String, iconID:Int, height:Float) { + super(); + + + FlxG.mouse.visible = true; + iconSpr = new FlxSprite(); + iconSpr.loadGraphic(Paths.image('editors/icons'), true, 128, 128); + iconSpr.animation.add("icon", [iconID], 24, true); + iconSpr.animation.play("icon"); + iconSpr.antialiasing = true; + if (height < 150) { + iconSpr.scale.set(height / 150, height / 150); + iconSpr.updateHitbox(); + } + iconSpr.x = 25 + ((height - iconSpr.width) / 2); + iconSpr.y = (height - iconSpr.height) / 2; + + label = new Alphabet(25 + iconSpr.width + 25, 0, name, true); + label.y = (height - label.height) / 2; + + selectionBG = new FlxSprite().makeGraphic(1, 1, -1); + selectionBG.scale.set(FlxG.width, height); + selectionBG.updateHitbox(); + selectionBG.alpha = 0; + + add(selectionBG); + add(iconSpr); + add(label); + } + + public override function update(elapsed:Float) { + super.update(elapsed); + iconRotationCycle += elapsed; + + selectionLerp = CoolUtil.fpsLerp(selectionLerp, selected ? 1 : 0, 0.25); + + selectionBG.alpha = (iconSpr.alpha = FlxEase.cubeOut(selectionLerp)) * 0.5; + selectionBG.x = FlxMath.lerp(-FlxG.width, 0, selectionLerp); + + label.x = FlxMath.lerp(10, 25 + iconSpr.width + 25, selectionLerp); + iconSpr.x = label.x - 25 - iconSpr.width; + iconSpr.angle = Math.sin(iconRotationCycle * 0.5) * 5; + + scrollFactor.set(selectionLerp, 0); + } + + public override function destroy() { + super.destroy(); + } +} \ No newline at end of file diff --git a/source/funkin/editors/charter/CharterSelection.hx b/source/funkin/editors/charter/CharterSelection.hx new file mode 100644 index 00000000..398d040e --- /dev/null +++ b/source/funkin/editors/charter/CharterSelection.hx @@ -0,0 +1,23 @@ +package funkin.editors.charter; + +import funkin.menus.FreeplayState.FreeplaySonglist; + +class CharterSelection extends MusicBeatState { + public var songNames:FlxTypedSpriteGroup; + public var freeplaySonglist:FreeplaySonglist; + + public override function create() { + super.create(); + + songNames = new FlxTypedSpriteGroup(); + + freeplaySonglist = FreeplaySonglist.get(); + + for(k=>s in freeplaySonglist.songs) { + var alphabet = new Alphabet(0, k * 60, s.displayName, true); + songNames.add(alphabet); + } + + add(songNames); + } +} \ No newline at end of file diff --git a/source/funkin/game/Character.hx b/source/funkin/game/Character.hx index dd351ebc..be8435a4 100644 --- a/source/funkin/game/Character.hx +++ b/source/funkin/game/Character.hx @@ -7,9 +7,6 @@ import funkin.interfaces.IBeatReceiver; import funkin.interfaces.IOffsetCompatible; import funkin.utils.XMLUtil; -import flixel.FlxG; -import flixel.FlxSprite; -import flixel.FlxCamera; import flixel.animation.FlxBaseAnimation; import flixel.graphics.frames.FlxAtlasFrames; import flixel.math.FlxRect; diff --git a/source/funkin/game/GameOverSubstate.hx b/source/funkin/game/GameOverSubstate.hx index 86879e68..7abb8d9d 100644 --- a/source/funkin/game/GameOverSubstate.hx +++ b/source/funkin/game/GameOverSubstate.hx @@ -2,8 +2,6 @@ package funkin.game; import flixel.addons.transition.FlxTransitionableState; import flixel.system.FlxSound; -import flixel.FlxG; -import flixel.FlxObject; import flixel.FlxSubState; import flixel.math.FlxPoint; import flixel.util.FlxColor; diff --git a/source/funkin/game/HealthIcon.hx b/source/funkin/game/HealthIcon.hx index 1b3b3b32..9fd88170 100644 --- a/source/funkin/game/HealthIcon.hx +++ b/source/funkin/game/HealthIcon.hx @@ -1,6 +1,5 @@ package funkin.game; -import flixel.FlxSprite; class HealthIcon extends FlxSprite { diff --git a/source/funkin/game/Highscore.hx b/source/funkin/game/Highscore.hx index 7dd401e6..b8707798 100644 --- a/source/funkin/game/Highscore.hx +++ b/source/funkin/game/Highscore.hx @@ -1,6 +1,5 @@ package funkin.game; -import flixel.FlxG; class Highscore { diff --git a/source/funkin/game/HudCamera.hx b/source/funkin/game/HudCamera.hx index 9fb4dcc3..7487ae39 100644 --- a/source/funkin/game/HudCamera.hx +++ b/source/funkin/game/HudCamera.hx @@ -1,6 +1,5 @@ package funkin.game; -import flixel.FlxCamera; import lime.app.Application; import flixel.graphics.tile.FlxGraphicsShader; @@ -16,7 +15,6 @@ import flixel.graphics.FlxGraphic; import flixel.graphics.frames.FlxFrame; import flixel.graphics.tile.FlxDrawBaseItem; import flixel.graphics.tile.FlxDrawTrianglesItem; -import flixel.math.FlxMath; import flixel.math.FlxMatrix; import flixel.math.FlxPoint; import flixel.math.FlxRect; diff --git a/source/funkin/game/Note.hx b/source/funkin/game/Note.hx index d086e7e4..525842c6 100644 --- a/source/funkin/game/Note.hx +++ b/source/funkin/game/Note.hx @@ -2,11 +2,7 @@ package funkin.game; import funkin.chart.Chart; import funkin.chart.ChartData; -import flixel.FlxG; -import flixel.FlxCamera; -import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; -import flixel.math.FlxMath; import flixel.util.FlxColor; import flixel.math.FlxRect; import flixel.math.FlxPoint; diff --git a/source/funkin/game/NoteGroup.hx b/source/funkin/game/NoteGroup.hx index de27f91e..36183101 100644 --- a/source/funkin/game/NoteGroup.hx +++ b/source/funkin/game/NoteGroup.hx @@ -1,9 +1,7 @@ package funkin.game; import flixel.util.FlxSort; -import flixel.FlxCamera; import funkin.system.Conductor; -import flixel.group.FlxGroup.FlxTypedGroup; class NoteGroup extends FlxTypedGroup { var __loopSprite:Note; diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index fcbbfc48..853ca431 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -11,17 +11,11 @@ import funkin.options.Options; import funkin.scripting.Script; import flixel.util.FlxDestroyUtil; import funkin.scripting.ScriptPack; -import flixel.FlxCamera; -import flixel.FlxG; -import flixel.FlxObject; -import flixel.FlxSprite; import flixel.FlxSubState; import flixel.addons.transition.FlxTransitionableState; -import flixel.math.FlxMath; import flixel.math.FlxPoint; import flixel.system.FlxSound; import flixel.text.FlxText; -import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; import flixel.ui.FlxBar; import flixel.util.FlxColor; diff --git a/source/funkin/game/SplashGroup.hx b/source/funkin/game/SplashGroup.hx index 851c85af..4c750683 100644 --- a/source/funkin/game/SplashGroup.hx +++ b/source/funkin/game/SplashGroup.hx @@ -1,8 +1,6 @@ package funkin.game; -import flixel.FlxG; import haxe.xml.Access; -import flixel.group.FlxGroup.FlxTypedGroup; class SplashGroup extends FlxTypedGroup { /** diff --git a/source/funkin/game/SplashHandler.hx b/source/funkin/game/SplashHandler.hx index 72bdba8f..d6f8fa34 100644 --- a/source/funkin/game/SplashHandler.hx +++ b/source/funkin/game/SplashHandler.hx @@ -1,6 +1,5 @@ package funkin.game; -import flixel.group.FlxGroup.FlxTypedGroup; class SplashHandler extends FlxTypedGroup { /** diff --git a/source/funkin/game/Stage.hx b/source/funkin/game/Stage.hx index 8371da84..63f8d07a 100644 --- a/source/funkin/game/Stage.hx +++ b/source/funkin/game/Stage.hx @@ -1,12 +1,8 @@ package funkin.game; import funkin.options.Options; -import flixel.FlxG; import flixel.FlxState; -import flixel.FlxSprite; import haxe.xml.Access; -import flixel.FlxBasic; -import flixel.math.FlxMath; import funkin.interfaces.IBeatReceiver; import funkin.scripting.Script; import haxe.io.Path; diff --git a/source/funkin/game/Strum.hx b/source/funkin/game/Strum.hx index ff9413e1..0c95b755 100644 --- a/source/funkin/game/Strum.hx +++ b/source/funkin/game/Strum.hx @@ -1,8 +1,5 @@ package funkin.game; -import flixel.FlxSprite; -import flixel.FlxCamera; -import flixel.math.FlxMath; import flixel.math.FlxPoint; import funkin.options.Options; import funkin.system.Conductor; diff --git a/source/funkin/game/StrumLine.hx b/source/funkin/game/StrumLine.hx index 7245e831..86a6e40f 100644 --- a/source/funkin/game/StrumLine.hx +++ b/source/funkin/game/StrumLine.hx @@ -6,10 +6,7 @@ import funkin.chart.Chart; import funkin.chart.ChartData; import funkin.system.Controls; import funkin.scripting.events.StrumCreationEvent; -import flixel.group.FlxGroup.FlxTypedGroup; -import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; -import flixel.FlxG; class StrumLine extends FlxTypedGroup { /** diff --git a/source/funkin/import.hx b/source/funkin/import.hx index 50b782b7..093733b3 100644 --- a/source/funkin/import.hx +++ b/source/funkin/import.hx @@ -11,6 +11,18 @@ import funkin.scripting.EventManager; import openfl.utils.Assets; +import flixel.FlxSprite; +import flixel.FlxG; +import flixel.FlxBasic; +import flixel.FlxCamera; +import flixel.FlxObject; +import flixel.math.FlxMath; +import flixel.tweens.FlxEase; + +import funkin.ui.Alphabet; +import flixel.group.FlxGroup.FlxTypedGroup; +import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; + using StringTools; using funkin.utils.CoolUtil; #end diff --git a/source/funkin/menus/BetaWarningState.hx b/source/funkin/menus/BetaWarningState.hx index ea2d7b13..0366c738 100644 --- a/source/funkin/menus/BetaWarningState.hx +++ b/source/funkin/menus/BetaWarningState.hx @@ -2,9 +2,7 @@ package funkin.menus; import flixel.addons.transition.FlxTransitionableState; import flixel.util.FlxColor; -import flixel.FlxG; import flixel.text.FlxText; -import funkin.ui.Alphabet; import funkin.ui.FunkinText; class BetaWarningState extends MusicBeatState { diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx index 507dfe38..76a8d3d2 100644 --- a/source/funkin/menus/FreeplayState.hx +++ b/source/funkin/menus/FreeplayState.hx @@ -4,17 +4,12 @@ import funkin.chart.Chart; import funkin.chart.ChartData; import haxe.io.Path; import flash.text.TextField; -import flixel.FlxG; -import flixel.FlxSprite; import flixel.FlxState; import flixel.addons.display.FlxGridOverlay; -import flixel.group.FlxGroup.FlxTypedGroup; -import flixel.math.FlxMath; import flixel.text.FlxText; import flixel.util.FlxColor; import lime.utils.Assets; import funkin.system.Song; -import funkin.ui.Alphabet; import funkin.game.HealthIcon; import funkin.game.Highscore; import haxe.Json; @@ -390,9 +385,7 @@ class FreeplayState extends MusicBeatState class FreeplaySonglist { public var songs:Array = []; - public function new() { - - } + public function new() {} public function getSongsFromSource(source:funkin.system.AssetsLibraryList.AssetSource) { var path:String = Paths.txt('freeplaySonglist'); diff --git a/source/funkin/menus/GitarooPause.hx b/source/funkin/menus/GitarooPause.hx index 0b32c879..ac65da6a 100644 --- a/source/funkin/menus/GitarooPause.hx +++ b/source/funkin/menus/GitarooPause.hx @@ -1,7 +1,5 @@ package funkin.menus; -import flixel.FlxG; -import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; class GitarooPause extends MusicBeatState diff --git a/source/funkin/menus/MainMenuState.hx b/source/funkin/menus/MainMenuState.hx index 814d4480..b05ebf62 100644 --- a/source/funkin/menus/MainMenuState.hx +++ b/source/funkin/menus/MainMenuState.hx @@ -3,19 +3,13 @@ package funkin.menus; import haxe.Json; import funkin.ui.FunkinText; import funkin.options.Options; -import flixel.FlxG; import funkin.menus.credits.CreditsMain; -import flixel.FlxObject; -import flixel.FlxSprite; import flixel.FlxState; import flixel.addons.transition.FlxTransitionableState; import flixel.effects.FlxFlicker; import flixel.graphics.frames.FlxAtlasFrames; -import flixel.group.FlxGroup.FlxTypedGroup; import flixel.text.FlxText; -import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; -import flixel.math.FlxMath; import flixel.util.FlxColor; import lime.app.Application; import funkin.scripting.events.*; @@ -105,7 +99,12 @@ class MainMenuState extends MusicBeatState if (!selectedSomethin) { if (canAccessDebugMenus) { - + if (FlxG.keys.justPressed.SEVEN) { + persistentUpdate = false; + persistentDraw = true; + openSubState(new funkin.editors.EditorPicker()); + } + /* if (FlxG.keys.justPressed.SEVEN) FlxG.switchState(new funkin.desktop.DesktopMain()); if (FlxG.keys.justPressed.EIGHT) { @@ -113,6 +112,7 @@ class MainMenuState extends MusicBeatState sys.io.File.saveContent("chart.json", Json.stringify(funkin.chart.Chart.parse("dadbattle", "hard"))); #end } + */ } if (controls.UP_P) diff --git a/source/funkin/menus/ModSwitchMenu.hx b/source/funkin/menus/ModSwitchMenu.hx index 106fc36b..87e5ad5b 100644 --- a/source/funkin/menus/ModSwitchMenu.hx +++ b/source/funkin/menus/ModSwitchMenu.hx @@ -1,16 +1,10 @@ package funkin.menus; #if MOD_SUPPORT -import flixel.math.FlxMath; -import flixel.group.FlxGroup.FlxTypedGroup; -import funkin.ui.Alphabet; import haxe.io.Path; import funkin.mods.ModsFolder; import sys.FileSystem; -import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; -import flixel.FlxSprite; -import flixel.FlxG; class ModSwitchMenu extends MusicBeatSubstate { var mods:Array = []; diff --git a/source/funkin/menus/PauseSubState.hx b/source/funkin/menus/PauseSubState.hx index 0de9f822..99d4ffac 100644 --- a/source/funkin/menus/PauseSubState.hx +++ b/source/funkin/menus/PauseSubState.hx @@ -1,22 +1,16 @@ package funkin.menus; import funkin.options.OptionsMenu; -import flixel.FlxCamera; import funkin.scripting.events.PauseCreationEvent; import funkin.scripting.events.NameEvent; import funkin.scripting.Script; -import flixel.FlxG; -import flixel.FlxSprite; import flixel.FlxSubState; import flixel.addons.transition.FlxTransitionableState; -import flixel.group.FlxGroup.FlxTypedGroup; import flixel.input.keyboard.FlxKey; import flixel.system.FlxSound; import flixel.text.FlxText; -import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; import flixel.util.FlxColor; -import funkin.ui.Alphabet; import funkin.options.keybinds.KeybindsOptions; import funkin.menus.StoryMenuState; diff --git a/source/funkin/menus/StoryMenuState.hx b/source/funkin/menus/StoryMenuState.hx index 34aed9cb..1efb8a8a 100644 --- a/source/funkin/menus/StoryMenuState.hx +++ b/source/funkin/menus/StoryMenuState.hx @@ -5,15 +5,11 @@ import funkin.scripting.events.*; import flixel.util.FlxTimer; import flixel.math.FlxPoint; import flixel.graphics.frames.FlxFramesCollection; -import flixel.group.FlxGroup.FlxTypedGroup; import funkin.game.Highscore; import flixel.tweens.FlxTween; -import flixel.FlxG; -import flixel.math.FlxMath; import flixel.util.FlxColor; import funkin.ui.FunkinText; import haxe.xml.Access; -import flixel.FlxSprite; import flixel.text.FlxText; class StoryMenuState extends MusicBeatState { diff --git a/source/funkin/menus/TitleState.hx b/source/funkin/menus/TitleState.hx index 641da17a..443544d3 100644 --- a/source/funkin/menus/TitleState.hx +++ b/source/funkin/menus/TitleState.hx @@ -5,8 +5,6 @@ import funkin.system.MusicBeatGroup; import funkin.utils.XMLUtil; import flixel.util.typeLimit.OneOfThree; import flixel.util.typeLimit.OneOfTwo; -import flixel.FlxG; -import flixel.FlxSprite; import flixel.FlxState; import flixel.addons.display.FlxGridOverlay; import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond; @@ -20,13 +18,11 @@ import flixel.math.FlxRect; import flixel.system.FlxSound; import flixel.system.ui.FlxSoundTray; import flixel.text.FlxText; -import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; import flixel.util.FlxColor; import flixel.util.FlxTimer; import funkin.system.Conductor; import openfl.Assets; -import funkin.ui.Alphabet; import haxe.xml.Access; using StringTools; diff --git a/source/funkin/menus/credits/CreditsCodename.hx b/source/funkin/menus/credits/CreditsCodename.hx index 2d3c7210..d1728d56 100644 --- a/source/funkin/menus/credits/CreditsCodename.hx +++ b/source/funkin/menus/credits/CreditsCodename.hx @@ -3,13 +3,10 @@ package funkin.menus.credits; import funkin.ui.FunkinText; import flixel.util.FlxColor; import funkin.shaders.CustomShader; -import flixel.math.FlxMath; import funkin.options.type.TextOption; import funkin.options.OptionsScreen; import flixel.graphics.FlxGraphic; -import flixel.FlxG; import openfl.display.BitmapData; -import flixel.FlxSprite; import flixel.addons.transition.FlxTransitionableState; import funkin.github.GitHub; import funkin.github.GitHubContributor; diff --git a/source/funkin/menus/credits/CreditsMain.hx b/source/funkin/menus/credits/CreditsMain.hx index 30bf2f04..9dad867f 100644 --- a/source/funkin/menus/credits/CreditsMain.hx +++ b/source/funkin/menus/credits/CreditsMain.hx @@ -2,7 +2,6 @@ package funkin.menus.credits; import flixel.addons.transition.FlxTransitionableState; import funkin.options.OptionsScreen; -import flixel.FlxG; import funkin.options.type.*; class CreditsMain extends OptionsScreen { diff --git a/source/funkin/mods/ModsFolder.hx b/source/funkin/mods/ModsFolder.hx index acaecbdf..b554291e 100644 --- a/source/funkin/mods/ModsFolder.hx +++ b/source/funkin/mods/ModsFolder.hx @@ -9,13 +9,11 @@ import openfl.utils.AssetManifest; import openfl.utils.AssetLibrary; import flixel.graphics.FlxGraphic; import flixel.util.FlxSignal.FlxTypedSignal; -import flixel.FlxG; #if MOD_SUPPORT import sys.FileSystem; #end -import flixel.FlxG; import flixel.FlxState; import haxe.io.Path; diff --git a/source/funkin/options/LatencyState.hx b/source/funkin/options/LatencyState.hx index 65e36300..85f3944a 100644 --- a/source/funkin/options/LatencyState.hx +++ b/source/funkin/options/LatencyState.hx @@ -1,9 +1,6 @@ package funkin.options; -import flixel.FlxG; -import flixel.FlxSprite; import flixel.FlxState; -import flixel.group.FlxGroup.FlxTypedGroup; import flixel.text.FlxText; class LatencyState extends FlxState diff --git a/source/funkin/options/Options.hx b/source/funkin/options/Options.hx index 2c52d349..2907dd14 100644 --- a/source/funkin/options/Options.hx +++ b/source/funkin/options/Options.hx @@ -1,6 +1,5 @@ package funkin.options; -import flixel.FlxG; import funkin.system.Controls; import openfl.Lib; import flixel.util.FlxSave; diff --git a/source/funkin/options/OptionsMenu.hx b/source/funkin/options/OptionsMenu.hx index 06b048b8..2f5b7f5c 100644 --- a/source/funkin/options/OptionsMenu.hx +++ b/source/funkin/options/OptionsMenu.hx @@ -3,11 +3,6 @@ package funkin.options; import flixel.util.typeLimit.OneOfTwo; import flixel.FlxState; import flixel.addons.transition.FlxTransitionableState; -import flixel.group.FlxGroup.FlxTypedGroup; -import funkin.ui.Alphabet; -import flixel.math.FlxMath; -import flixel.FlxSprite; -import flixel.FlxG; import flixel.effects.FlxFlicker; import funkin.menus.MainMenuState; diff --git a/source/funkin/options/OptionsScreen.hx b/source/funkin/options/OptionsScreen.hx index 07e3235d..469e309a 100644 --- a/source/funkin/options/OptionsScreen.hx +++ b/source/funkin/options/OptionsScreen.hx @@ -3,12 +3,9 @@ package funkin.options; import flixel.addons.display.FlxBackdrop; import funkin.ui.FunkinText; import flixel.text.FlxText; -import flixel.math.FlxMath; import flixel.math.FlxPoint; import flixel.util.FlxColor; import flixel.addons.transition.FlxTransitionableState; -import flixel.FlxSprite; -import flixel.FlxG; import funkin.options.type.OptionType; /** * Direct replica from Week 7 lol diff --git a/source/funkin/options/PlayerSettings.hx b/source/funkin/options/PlayerSettings.hx index 22e7ef6e..05a004ac 100644 --- a/source/funkin/options/PlayerSettings.hx +++ b/source/funkin/options/PlayerSettings.hx @@ -1,8 +1,6 @@ package funkin.options; import funkin.system.Controls; -import flixel.FlxCamera; -import flixel.FlxG; import flixel.util.FlxSignal; // import ui.DeviceManager; diff --git a/source/funkin/options/categories/MiscOptions.hx b/source/funkin/options/categories/MiscOptions.hx index 0608f94d..a45ad587 100644 --- a/source/funkin/options/categories/MiscOptions.hx +++ b/source/funkin/options/categories/MiscOptions.hx @@ -1,6 +1,5 @@ package funkin.options.categories; -import flixel.FlxG; class MiscOptions extends OptionsScreen { public override function create() { diff --git a/source/funkin/options/keybinds/ChangeKeybindSubState.hx b/source/funkin/options/keybinds/ChangeKeybindSubState.hx index 913cb4d4..934078a5 100644 --- a/source/funkin/options/keybinds/ChangeKeybindSubState.hx +++ b/source/funkin/options/keybinds/ChangeKeybindSubState.hx @@ -1,19 +1,11 @@ package funkin.options.keybinds; -import flixel.FlxCamera; import flixel.effects.FlxFlicker; import funkin.system.Controls; import funkin.options.Options; -import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; import flixel.addons.transition.FlxTransitionableState; -import flixel.group.FlxGroup.FlxTypedGroup; -import funkin.ui.Alphabet; import flixel.util.FlxColor; import flixel.input.keyboard.FlxKey; -import flixel.math.FlxMath; -import flixel.FlxObject; -import flixel.FlxSprite; -import flixel.FlxG; class ChangeKeybindSubState extends MusicBeatSubstate { var callback:FlxKey->Void; diff --git a/source/funkin/options/keybinds/KeybindSetting.hx b/source/funkin/options/keybinds/KeybindSetting.hx index 023dba9d..dedc225b 100644 --- a/source/funkin/options/keybinds/KeybindSetting.hx +++ b/source/funkin/options/keybinds/KeybindSetting.hx @@ -1,19 +1,11 @@ package funkin.options.keybinds; -import flixel.FlxCamera; import flixel.effects.FlxFlicker; import funkin.system.Controls; import funkin.options.Options; -import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; import flixel.addons.transition.FlxTransitionableState; -import flixel.group.FlxGroup.FlxTypedGroup; -import funkin.ui.Alphabet; import flixel.util.FlxColor; import flixel.input.keyboard.FlxKey; -import flixel.math.FlxMath; -import flixel.FlxObject; -import flixel.FlxSprite; -import flixel.FlxG; using StringTools; diff --git a/source/funkin/options/keybinds/KeybindsOptions.hx b/source/funkin/options/keybinds/KeybindsOptions.hx index 0ae57240..281dddb3 100644 --- a/source/funkin/options/keybinds/KeybindsOptions.hx +++ b/source/funkin/options/keybinds/KeybindsOptions.hx @@ -1,18 +1,10 @@ package funkin.options.keybinds; -import flixel.FlxCamera; import funkin.system.Controls; import funkin.options.Options; -import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; import flixel.addons.transition.FlxTransitionableState; -import flixel.group.FlxGroup.FlxTypedGroup; -import funkin.ui.Alphabet; import flixel.util.FlxColor; import flixel.input.keyboard.FlxKey; -import flixel.math.FlxMath; -import flixel.FlxObject; -import flixel.FlxSprite; -import flixel.FlxG; using StringTools; diff --git a/source/funkin/options/type/Checkbox.hx b/source/funkin/options/type/Checkbox.hx index 8edb90bf..2b767429 100644 --- a/source/funkin/options/type/Checkbox.hx +++ b/source/funkin/options/type/Checkbox.hx @@ -1,6 +1,5 @@ package funkin.options.type; -import flixel.FlxSprite; import flixel.math.FlxPoint; @:allow() diff --git a/source/funkin/options/type/TextOption.hx b/source/funkin/options/type/TextOption.hx index c745f93c..c2aa9fd9 100644 --- a/source/funkin/options/type/TextOption.hx +++ b/source/funkin/options/type/TextOption.hx @@ -1,6 +1,5 @@ package funkin.options.type; -import funkin.ui.Alphabet; class TextOption extends OptionType { public var selectCallback:Void->Void; diff --git a/source/funkin/scripting/EventManager.hx b/source/funkin/scripting/EventManager.hx index e10bef8e..4647a2b8 100644 --- a/source/funkin/scripting/EventManager.hx +++ b/source/funkin/scripting/EventManager.hx @@ -1,6 +1,5 @@ package funkin.scripting; -import flixel.FlxG; import flixel.FlxState; import funkin.scripting.events.*; diff --git a/source/funkin/scripting/GlobalScript.hx b/source/funkin/scripting/GlobalScript.hx index 4ec24c08..0d061322 100644 --- a/source/funkin/scripting/GlobalScript.hx +++ b/source/funkin/scripting/GlobalScript.hx @@ -2,7 +2,6 @@ package funkin.scripting; import funkin.scripting.events.CancellableEvent; import funkin.system.Conductor; -import flixel.FlxG; import flixel.FlxState; import funkin.mods.ModsFolder; #if GLOBAL_SCRIPT diff --git a/source/funkin/scripting/Script.hx b/source/funkin/scripting/Script.hx index 7d3e7283..b425e8ce 100644 --- a/source/funkin/scripting/Script.hx +++ b/source/funkin/scripting/Script.hx @@ -2,7 +2,6 @@ package funkin.scripting; import lime.app.Application; import flixel.util.FlxDestroyUtil.IFlxDestroyable; -import flixel.FlxBasic; import haxe.io.Path; /** diff --git a/source/funkin/scripting/events/CountdownEvent.hx b/source/funkin/scripting/events/CountdownEvent.hx index fb0adc61..ed5acd89 100644 --- a/source/funkin/scripting/events/CountdownEvent.hx +++ b/source/funkin/scripting/events/CountdownEvent.hx @@ -1,7 +1,6 @@ package funkin.scripting.events; import flixel.tweens.FlxTween; -import flixel.FlxSprite; import flixel.system.FlxSound; class CountdownEvent extends CancellableEvent { diff --git a/source/funkin/system/AudioSwitchFix.hx b/source/funkin/system/AudioSwitchFix.hx index 7e64a7f7..8c41626f 100644 --- a/source/funkin/system/AudioSwitchFix.hx +++ b/source/funkin/system/AudioSwitchFix.hx @@ -4,7 +4,6 @@ import lime.media.AudioManager; import flixel.system.FlxSound; import flixel.FlxState; import funkin.windows.WindowsAPI; -import flixel.FlxG; /** * if youre stealing this keep this comment at least please lol diff --git a/source/funkin/system/Conductor.hx b/source/funkin/system/Conductor.hx index a7a01b9c..d15591ae 100644 --- a/source/funkin/system/Conductor.hx +++ b/source/funkin/system/Conductor.hx @@ -2,11 +2,9 @@ package funkin.system; import funkin.chart.Chart; import funkin.chart.ChartData; -import flixel.math.FlxMath; import openfl.Lib; import flixel.FlxState; import funkin.interfaces.IBeatReceiver; -import flixel.FlxG; import funkin.system.Song.SwagSong; import flixel.util.FlxSignal.FlxTypedSignal; diff --git a/source/funkin/system/Controls.hx b/source/funkin/system/Controls.hx index ba521410..04caee4c 100644 --- a/source/funkin/system/Controls.hx +++ b/source/funkin/system/Controls.hx @@ -1,7 +1,6 @@ package funkin.system; import funkin.options.Options; -import flixel.FlxG; import flixel.input.FlxInput; import flixel.input.actions.FlxAction; import flixel.input.actions.FlxActionInput; diff --git a/source/funkin/system/FlxAnimate.hx b/source/funkin/system/FlxAnimate.hx index 72521a5a..b126187e 100644 --- a/source/funkin/system/FlxAnimate.hx +++ b/source/funkin/system/FlxAnimate.hx @@ -1,15 +1,11 @@ package funkin.system; -import flixel.math.FlxMath; import openfl.geom.ColorTransform; import flixel.math.FlxMatrix; import flixel.math.FlxAngle; import flixel.math.FlxRect; import flixel.graphics.frames.FlxFrame; import flixel.math.FlxPoint; -import flixel.FlxG; -import flixel.FlxCamera; -import flixel.FlxBasic; class FlxAnimate extends flxanimate.FlxAnimate { override function drawLimb(limb:FlxFrame, _matrix:FlxMatrix, ?colorTransform:ColorTransform) diff --git a/source/funkin/system/FunkinRatioScaleMode.hx b/source/funkin/system/FunkinRatioScaleMode.hx index 2ab9b43f..f5ad21dd 100644 --- a/source/funkin/system/FunkinRatioScaleMode.hx +++ b/source/funkin/system/FunkinRatioScaleMode.hx @@ -1,6 +1,5 @@ package funkin.system; -import flixel.FlxG; import flixel.system.scaleModes.RatioScaleMode; class FunkinRatioScaleMode extends RatioScaleMode { diff --git a/source/funkin/system/FunkinSprite.hx b/source/funkin/system/FunkinSprite.hx index 0f938dfb..90339e0e 100644 --- a/source/funkin/system/FunkinSprite.hx +++ b/source/funkin/system/FunkinSprite.hx @@ -1,16 +1,12 @@ package funkin.system; -import flixel.FlxG; import haxe.io.Path; import funkin.scripting.events.PlayAnimEvent.PlayAnimContext; import funkin.interfaces.IOffsetCompatible; import flixel.math.FlxMatrix; import flixel.math.FlxRect; import flixel.math.FlxPoint; -import flixel.FlxCamera; -import flixel.math.FlxMath; import funkin.interfaces.IBeatReceiver; -import flixel.FlxSprite; import flixel.util.FlxDestroyUtil; @:enum @@ -68,7 +64,6 @@ class FunkinSprite extends FlxSprite implements IBeatReceiver implements IOffset if (Assets.exists('$noExt/Animation.json') && Assets.exists('$noExt/spritemap1.json') && Assets.exists('$noExt/spritemap1.png')) { - Assets.cache.clear(noExt); atlasPath = noExt; animateAtlas = new FlxAnimate(x, y, noExt); } @@ -158,13 +153,7 @@ class FunkinSprite extends FlxSprite implements IBeatReceiver implements IOffset public override function destroy() { super.destroy(); - if (animateAtlas != null) { - for(f in animateAtlas.frames.frames) - FlxG.bitmap.remove(f.parent); - Assets.cache.clear(atlasPath); - animateAtlas = FlxDestroyUtil.destroy(animateAtlas); - } - + animateAtlas = FlxDestroyUtil.destroy(animateAtlas); } #end diff --git a/source/funkin/system/Main.hx b/source/funkin/system/Main.hx index e5250b31..c031b8b3 100644 --- a/source/funkin/system/Main.hx +++ b/source/funkin/system/Main.hx @@ -17,7 +17,6 @@ import flash.Lib; import openfl.display.FPS; import openfl.display.Sprite; import openfl.events.Event; -import flixel.FlxG; import flixel.graphics.FlxGraphic; import flixel.addons.transition.FlxTransitionableState; import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond; diff --git a/source/funkin/system/MusicBeatGroup.hx b/source/funkin/system/MusicBeatGroup.hx index 700fc8d3..af81086a 100644 --- a/source/funkin/system/MusicBeatGroup.hx +++ b/source/funkin/system/MusicBeatGroup.hx @@ -1,8 +1,6 @@ package funkin.system; -import flixel.FlxSprite; import funkin.interfaces.IBeatReceiver; -import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; class MusicBeatGroup extends FlxTypedSpriteGroup implements IBeatReceiver { public function beatHit(curBeat:Int) { diff --git a/source/funkin/system/MusicBeatState.hx b/source/funkin/system/MusicBeatState.hx index b19b13bc..fbc21c22 100644 --- a/source/funkin/system/MusicBeatState.hx +++ b/source/funkin/system/MusicBeatState.hx @@ -7,9 +7,7 @@ import funkin.scripting.events.*; import funkin.scripting.Script; import funkin.interfaces.IBeatReceiver; import funkin.system.Conductor; -import flixel.FlxG; import flixel.addons.ui.FlxUIState; -import flixel.math.FlxMath; import funkin.options.PlayerSettings; class MusicBeatState extends FlxUIState implements IBeatReceiver diff --git a/source/funkin/system/MusicBeatSubstate.hx b/source/funkin/system/MusicBeatSubstate.hx index 13bd00d4..e51ea793 100644 --- a/source/funkin/system/MusicBeatSubstate.hx +++ b/source/funkin/system/MusicBeatSubstate.hx @@ -8,9 +8,7 @@ import funkin.interfaces.IBeatReceiver; import funkin.system.Conductor.BPMChangeEvent; import funkin.system.Conductor; import funkin.options.PlayerSettings; -import flixel.FlxG; import flixel.FlxSubState; -import flixel.math.FlxMath; class MusicBeatSubstate extends FlxSubState implements IBeatReceiver { diff --git a/source/funkin/system/Paths.hx b/source/funkin/system/Paths.hx index 790d5cbf..dd2e1e62 100644 --- a/source/funkin/system/Paths.hx +++ b/source/funkin/system/Paths.hx @@ -3,7 +3,6 @@ package funkin.system; import flixel.graphics.frames.FlxFramesCollection; import haxe.io.Path; import funkin.mods.LimeLibrarySymbol; -import flixel.FlxG; import flixel.graphics.frames.FlxAtlasFrames; import openfl.utils.AssetType; import openfl.utils.Assets as OpenFlAssets; diff --git a/source/funkin/system/framerate/AssetTreeInfo.hx b/source/funkin/system/framerate/AssetTreeInfo.hx index 24aba8f7..fe48e84c 100644 --- a/source/funkin/system/framerate/AssetTreeInfo.hx +++ b/source/funkin/system/framerate/AssetTreeInfo.hx @@ -1,8 +1,6 @@ package funkin.system.framerate; import funkin.mods.ModsAssetLibrary; -import flixel.FlxG; -import flixel.math.FlxMath; class AssetTreeInfo extends FramerateCategory { public function new() { diff --git a/source/funkin/system/framerate/ConductorInfo.hx b/source/funkin/system/framerate/ConductorInfo.hx index 499474d9..009f3224 100644 --- a/source/funkin/system/framerate/ConductorInfo.hx +++ b/source/funkin/system/framerate/ConductorInfo.hx @@ -1,6 +1,5 @@ package funkin.system.framerate; -import flixel.math.FlxMath; class ConductorInfo extends FramerateCategory { public function new() { diff --git a/source/funkin/system/framerate/Framerate.hx b/source/funkin/system/framerate/Framerate.hx index 21f29d67..32d14a28 100644 --- a/source/funkin/system/framerate/Framerate.hx +++ b/source/funkin/system/framerate/Framerate.hx @@ -1,13 +1,11 @@ package funkin.system.framerate; -import flixel.math.FlxMath; import openfl.events.KeyboardEvent; import openfl.display.DisplayObject; import openfl.display.Sprite; import openfl.text.TextField; import openfl.text.TextFormat; import openfl.ui.Keyboard; -import flixel.FlxG; class Framerate extends Sprite { public static var instance:Framerate; diff --git a/source/funkin/system/framerate/FramerateCategory.hx b/source/funkin/system/framerate/FramerateCategory.hx index 7e66fb26..4d33edfe 100644 --- a/source/funkin/system/framerate/FramerateCategory.hx +++ b/source/funkin/system/framerate/FramerateCategory.hx @@ -1,6 +1,5 @@ package funkin.system.framerate; -import flixel.FlxG; import openfl.text.TextFormat; import openfl.display.Sprite; import openfl.text.TextField; diff --git a/source/funkin/system/framerate/FramerateCounter.hx b/source/funkin/system/framerate/FramerateCounter.hx index b6138741..f405a5f1 100644 --- a/source/funkin/system/framerate/FramerateCounter.hx +++ b/source/funkin/system/framerate/FramerateCounter.hx @@ -1,6 +1,5 @@ package funkin.system.framerate; -import flixel.FlxG; import openfl.text.TextFormat; import openfl.display.Sprite; import openfl.text.TextField; diff --git a/source/funkin/system/framerate/MemoryCounter.hx b/source/funkin/system/framerate/MemoryCounter.hx index cbb21d5b..14bb39c2 100644 --- a/source/funkin/system/framerate/MemoryCounter.hx +++ b/source/funkin/system/framerate/MemoryCounter.hx @@ -1,6 +1,5 @@ package funkin.system.framerate; -import flixel.FlxG; import openfl.text.TextFormat; import openfl.display.Sprite; import openfl.text.TextField; diff --git a/source/funkin/system/framerate/SystemInfo.hx b/source/funkin/system/framerate/SystemInfo.hx index 7379382b..8d3dd3a7 100644 --- a/source/funkin/system/framerate/SystemInfo.hx +++ b/source/funkin/system/framerate/SystemInfo.hx @@ -1,7 +1,5 @@ package funkin.system.framerate; -import flixel.FlxG; -import flixel.math.FlxMath; import funkin.utils.MemoryUtil; class SystemInfo extends FramerateCategory { diff --git a/source/funkin/ui/Alphabet.hx b/source/funkin/ui/Alphabet.hx index 14e24589..97f3a48c 100644 --- a/source/funkin/ui/Alphabet.hx +++ b/source/funkin/ui/Alphabet.hx @@ -4,11 +4,8 @@ import openfl.utils.AssetLibrary; import haxe.xml.Access; import funkin.mods.LimeLibrarySymbol; import funkin.mods.ModsAssetLibrary; -import flixel.FlxG; -import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxSpriteGroup; -import flixel.math.FlxMath; import flixel.util.FlxTimer; import flixel.util.FlxColor; diff --git a/source/funkin/updating/UpdateAvailableScreen.hx b/source/funkin/updating/UpdateAvailableScreen.hx index 4968cb59..0b65719d 100644 --- a/source/funkin/updating/UpdateAvailableScreen.hx +++ b/source/funkin/updating/UpdateAvailableScreen.hx @@ -3,16 +3,11 @@ package funkin.updating; import funkin.utils.MarkdownUtil; import funkin.menus.MainMenuState; import flixel.math.FlxPoint; -import flixel.math.FlxMath; -import flixel.FlxSprite; import funkin.updating.UpdateUtil.UpdateCheckCallback; import funkin.ui.FunkinText; import flixel.text.FlxText; -import flixel.tweens.FlxEase; -import funkin.ui.Alphabet; import flixel.addons.transition.FlxTransitionableState; import flixel.tweens.FlxTween; -import flixel.FlxG; class UpdateAvailableScreen extends MusicBeatState { public var bg:FlxSprite; diff --git a/source/funkin/updating/UpdateScreen.hx b/source/funkin/updating/UpdateScreen.hx index b1c07cf2..1b6a3bb6 100644 --- a/source/funkin/updating/UpdateScreen.hx +++ b/source/funkin/updating/UpdateScreen.hx @@ -6,8 +6,6 @@ import funkin.ui.FunkinText; import funkin.menus.TitleState; import flixel.math.FlxRect; import flixel.system.FlxSound; -import flixel.FlxSprite; -import flixel.FlxG; import flixel.ui.FlxBar; import funkin.updating.UpdateUtil.UpdateCheckCallback; diff --git a/source/funkin/utils/CoolUtil.hx b/source/funkin/utils/CoolUtil.hx index 07cf256c..150dd7d3 100644 --- a/source/funkin/utils/CoolUtil.hx +++ b/source/funkin/utils/CoolUtil.hx @@ -15,11 +15,6 @@ import flixel.input.keyboard.FlxKey; import lime.utils.Assets; import flixel.animation.FlxAnimation; import flixel.util.FlxColor; -import flixel.math.FlxMath; -import flixel.FlxG; -import flixel.FlxSprite; -import flixel.FlxObject; -import flixel.FlxCamera; import flixel.util.FlxAxes; import flixel.graphics.frames.FlxFrame; import flixel.graphics.frames.FlxFramesCollection; diff --git a/source/funkin/utils/FlxInterpolateColor.hx b/source/funkin/utils/FlxInterpolateColor.hx index a0373606..2c4c8d32 100644 --- a/source/funkin/utils/FlxInterpolateColor.hx +++ b/source/funkin/utils/FlxInterpolateColor.hx @@ -1,6 +1,5 @@ package funkin.utils; -import flixel.FlxG; import flixel.util.FlxColor; /** diff --git a/source/funkin/utils/XMLUtil.hx b/source/funkin/utils/XMLUtil.hx index 9937a458..b3e3fdd3 100644 --- a/source/funkin/utils/XMLUtil.hx +++ b/source/funkin/utils/XMLUtil.hx @@ -3,11 +3,9 @@ package funkin.utils; import funkin.system.FunkinSprite; import funkin.system.ErrorCode; import funkin.system.FunkinSprite.XMLAnimType; -import flixel.math.FlxMath; import funkin.interfaces.IBeatReceiver; import haxe.xml.Access; import funkin.interfaces.IOffsetCompatible; -import flixel.FlxSprite; using StringTools; /**