Ok it works
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 152 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 69 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 296 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 12 KiB |
@@ -1,5 +1,8 @@
|
|||||||
package funkin.editors.charter;
|
package funkin.editors.charter;
|
||||||
|
|
||||||
|
import haxe.Json;
|
||||||
|
import funkin.backend.assets.ModsFolder;
|
||||||
|
import funkin.editors.charter.SongCreationScreen.SongCreationData;
|
||||||
import funkin.options.type.NewOption;
|
import funkin.options.type.NewOption;
|
||||||
import funkin.backend.system.framerate.Framerate;
|
import funkin.backend.system.framerate.Framerate;
|
||||||
import flixel.util.FlxColor;
|
import flixel.util.FlxColor;
|
||||||
@@ -8,6 +11,8 @@ import funkin.editors.EditorTreeMenu;
|
|||||||
import funkin.options.*;
|
import funkin.options.*;
|
||||||
import funkin.options.type.*;
|
import funkin.options.type.*;
|
||||||
|
|
||||||
|
using StringTools;
|
||||||
|
|
||||||
class CharterSelection extends EditorTreeMenu {
|
class CharterSelection extends EditorTreeMenu {
|
||||||
public var freeplayList:FreeplaySonglist;
|
public var freeplayList:FreeplaySonglist;
|
||||||
public override function create() {
|
public override function create() {
|
||||||
@@ -26,15 +31,13 @@ class CharterSelection extends EditorTreeMenu {
|
|||||||
FlxG.switchState(new Charter(s.name, d));
|
FlxG.switchState(new Charter(s.name, d));
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
list.push(new NewOption("New Difficulty", "New Difficulty", function() {
|
list.push(new NewOption("New Difficulty", "New Difficulty", function() {}));
|
||||||
|
|
||||||
}));
|
|
||||||
optionsTree.add(new OptionsScreen(s.name, "Select a difficulty to continue.", list));
|
optionsTree.add(new OptionsScreen(s.name, "Select a difficulty to continue.", list));
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
list.insert(0, new NewOption("New Chart", "New Chart", function() {
|
list.insert(0, new NewOption("New Chart", "New Chart", function() {
|
||||||
FlxG.state.openSubState(new SongCreationScreen());
|
FlxG.state.openSubState(new SongCreationScreen(saveSong));
|
||||||
}));
|
}));
|
||||||
|
|
||||||
main = new OptionsScreen("Chart Editor", "Select a song to modify the charts from.", list);
|
main = new OptionsScreen("Chart Editor", "Select a song to modify the charts from.", list);
|
||||||
@@ -73,4 +76,34 @@ class CharterSelection extends EditorTreeMenu {
|
|||||||
bg.colorTransform.blueMultiplier = FlxMath.lerp(1, color.blueFloat, 0.25);
|
bg.colorTransform.blueMultiplier = FlxMath.lerp(1, color.blueFloat, 0.25);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function saveSong(creation:SongCreationData) {
|
||||||
|
// Paths
|
||||||
|
var songsDir:String = ModsFolder.currentModFolder != null ? '${ModsFolder.modsPath}${ModsFolder.currentModFolder}/songs/' : './assets/songs/';
|
||||||
|
var songFolder:String = '$songsDir${creation.meta.name.replace("-", " ")}';
|
||||||
|
|
||||||
|
#if sys
|
||||||
|
// Make Directories
|
||||||
|
sys.FileSystem.createDirectory(songFolder);
|
||||||
|
sys.FileSystem.createDirectory('$songFolder/song');
|
||||||
|
sys.FileSystem.createDirectory('$songFolder/charts');
|
||||||
|
|
||||||
|
// Save Files
|
||||||
|
sys.io.File.saveContent('$songFolder/meta.json', Json.stringify(creation.meta, "\t"));
|
||||||
|
if (creation.instBytes != null) sys.io.File.saveBytes('$songFolder/song/Inst.${Paths.SOUND_EXT}', creation.instBytes);
|
||||||
|
if (creation.voicesBytes != null) sys.io.File.saveBytes('$songFolder/song/Voices.${Paths.SOUND_EXT}', creation.voicesBytes);
|
||||||
|
#end
|
||||||
|
|
||||||
|
// Add to List
|
||||||
|
main.members.insert(1, new IconOption(creation.meta.name, "Press ACCEPT to choose a difficulty to edit.", creation.meta.icon, function() {
|
||||||
|
var list:Array<OptionType> = [
|
||||||
|
for(d in creation.meta.difficulties)
|
||||||
|
if (d != "") new TextOption(d, "Press ACCEPT to edit the chart for the selected difficulty", function() {
|
||||||
|
FlxG.switchState(new Charter(creation.meta.name, d));
|
||||||
|
})
|
||||||
|
];
|
||||||
|
list.push(new NewOption("New Difficulty", "New Difficulty", function() {}));
|
||||||
|
optionsTree.add(new OptionsScreen(creation.meta.name, "Select a difficulty to continue.", list));
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ typedef SongCreationData = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class SongCreationScreen extends UISubstateWindow {
|
class SongCreationScreen extends UISubstateWindow {
|
||||||
private var onSave:SongCreationData -> Void = null;
|
private var onSave:Null<SongCreationData> -> Void = null;
|
||||||
|
|
||||||
public var songNameTextBox:UITextBox;
|
public var songNameTextBox:UITextBox;
|
||||||
public var bpmStepper:UINumericStepper;
|
public var bpmStepper:UINumericStepper;
|
||||||
@@ -158,7 +158,7 @@ class SongCreationScreen extends UISubstateWindow {
|
|||||||
|
|
||||||
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, "Save & Close", function() {
|
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, "Save & Close", function() {
|
||||||
if (curPage == pages.length-1) {
|
if (curPage == pages.length-1) {
|
||||||
if (onSave != null) onSave(null);
|
saveSongInfo();
|
||||||
close();
|
close();
|
||||||
} else {
|
} else {
|
||||||
curPage++;
|
curPage++;
|
||||||
@@ -249,4 +249,30 @@ class SongCreationScreen extends UISubstateWindow {
|
|||||||
iconSprite.setPosition(iconTextBox.x + 150 + 8, (iconTextBox.y + 16) - (iconSprite.height/2));
|
iconSprite.setPosition(iconTextBox.x + 150 + 8, (iconTextBox.y + 16) - (iconSprite.height/2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function saveSongInfo() {
|
||||||
|
for (stepper in [bpmStepper, beatsPerMesureStepper, stepsPerBeatStepper])
|
||||||
|
@:privateAccess stepper.__onChange(stepper.label.text);
|
||||||
|
|
||||||
|
var meta:ChartMetaData = {
|
||||||
|
name: songNameTextBox.label.text,
|
||||||
|
bpm: bpmStepper.value,
|
||||||
|
beatsPerMesure: Std.int(beatsPerMesureStepper.value),
|
||||||
|
stepsPerBeat: Std.int(stepsPerBeatStepper.value),
|
||||||
|
needsVoices: needsVoicesCheckbox.checked,
|
||||||
|
displayName: displayNameTextBox.label.text,
|
||||||
|
icon: iconTextBox.label.text,
|
||||||
|
color: colorWheel.curColorString,
|
||||||
|
parsedColor: colorWheel.curColor,
|
||||||
|
opponentModeAllowed: opponentModeCheckbox.checked,
|
||||||
|
coopAllowed: coopAllowedCheckbox.checked,
|
||||||
|
difficulties: [for (diff in difficulitesTextBox.label.text.split(",")) diff.trim()],
|
||||||
|
};
|
||||||
|
|
||||||
|
if (onSave != null) onSave({
|
||||||
|
meta: meta,
|
||||||
|
instBytes: instExplorer.file,
|
||||||
|
voicesBytes: voicesExplorer.file
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user