100 lines
3.0 KiB
Haxe
100 lines
3.0 KiB
Haxe
package funkin.ui.debug.playtest;
|
|
|
|
import flixel.text.FlxText;
|
|
import flixel.util.FlxColor;
|
|
import flixel.tweens.FlxTween;
|
|
import funkin.util.file.FNFCUtil;
|
|
import funkin.play.song.Song;
|
|
import funkin.graphics.FunkinSprite;
|
|
import funkin.graphics.FunkinCamera;
|
|
import funkin.ui.debug.playtest.ChartPlaytestMenuButton;
|
|
import funkin.ui.debug.playtest.ChartPlaytestMenuButton.ChartPlaytestMenuButtonListToggle;
|
|
#if NO_FEATURE_TOUCH_CONTROLS
|
|
import funkin.input.Cursor;
|
|
#end
|
|
|
|
/**
|
|
* When playtesting from an FNFC file, we display a debug UI to choose a difficulty first.
|
|
*/
|
|
class ChartPlaytestMenu extends MusicBeatState
|
|
{
|
|
var filePath:String;
|
|
|
|
var songName:FlxText;
|
|
var variationButton:ChartPlaytestMenuButtonListToggle;
|
|
var difficultyButton:ChartPlaytestMenuButtonListToggle;
|
|
var playtestButton:ChartPlaytestMenuButton;
|
|
|
|
var currentVariation:String;
|
|
var currentDifficulty:String;
|
|
|
|
var playtestCam:FunkinCamera;
|
|
|
|
public function new(filePath:String)
|
|
{
|
|
final targetSong:Song = FNFCUtil.loadSongFromFNFCPath(filePath);
|
|
|
|
super();
|
|
|
|
FlxG.state.persistentDraw = true;
|
|
FlxG.state.persistentUpdate = false;
|
|
|
|
playtestCam = new FunkinCamera('playtestCam');
|
|
playtestCam.bgColor = 0x0;
|
|
// playtestCam.alpha = 0;
|
|
FlxG.cameras.add(playtestCam, false);
|
|
|
|
var blackBG:FunkinSprite = new FunkinSprite(0, 0);
|
|
blackBG.makeSolidColor(FlxG.width * 3, FlxG.height * 3, FlxColor.BLACK);
|
|
blackBG.scrollFactor.set();
|
|
blackBG.alpha = 0.4;
|
|
blackBG.cameras = [playtestCam];
|
|
add(blackBG);
|
|
|
|
this.filePath = filePath;
|
|
|
|
songName = new FlxText(0, FlxG.height * 0.1, 0, 'Loaded Song: ${targetSong.songName}',
|
|
30).setFormat(Paths.font('vcr.ttf'), 50, FlxColor.WHITE, FlxTextAlign.CENTER);
|
|
songName.screenCenter(X);
|
|
songName.cameras = [playtestCam];
|
|
add(songName);
|
|
|
|
variationButton = new ChartPlaytestMenuButtonListToggle(0, FlxG.height * 0.55, "Variation", targetSong.variations, function(value:String) {
|
|
currentVariation = value;
|
|
variationButton.screenCenter(X);
|
|
});
|
|
variationButton.screenCenter(X);
|
|
variationButton.cameras = [playtestCam];
|
|
add(variationButton);
|
|
|
|
difficultyButton = new ChartPlaytestMenuButtonListToggle(0, FlxG.height * 0.45, "Difficulty",
|
|
targetSong.listDifficulties(null, targetSong.variations, true, true), function(value:String) {
|
|
currentDifficulty = value;
|
|
difficultyButton.screenCenter(X);
|
|
});
|
|
difficultyButton.screenCenter(X);
|
|
difficultyButton.cameras = [playtestCam];
|
|
add(difficultyButton);
|
|
|
|
playtestButton = new ChartPlaytestMenuButton(0, FlxG.height * 0.8, "Playtest Song", function() {
|
|
try
|
|
{
|
|
FNFCUtil.playSongFromFNFCPath(filePath, currentDifficulty, currentVariation);
|
|
}
|
|
catch (e)
|
|
{
|
|
lime.app.Application.current.window.alert('$e', 'Could Not Playtest Chart');
|
|
}
|
|
});
|
|
playtestButton.screenCenter(X);
|
|
playtestButton.cameras = [playtestCam];
|
|
add(playtestButton);
|
|
|
|
FlxTween.tween(playtestCam, {alpha: 1}, 0.5);
|
|
|
|
#if NO_FEATURE_TOUCH_CONTROLS
|
|
Cursor.show();
|
|
#end
|
|
}
|
|
}
|