fixed tutorial and additional stuff
This commit is contained in:
@@ -1,10 +1,17 @@
|
||||
package funkin.chart;
|
||||
|
||||
import funkin.chart.ChartData;
|
||||
import flixel.util.FlxColor;
|
||||
import haxe.io.Path;
|
||||
import funkin.system.Song.SwagSong;
|
||||
import haxe.Json;
|
||||
import openfl.utils.Assets;
|
||||
|
||||
#if sys
|
||||
import sys.io.File;
|
||||
import sys.FileSystem;
|
||||
#end
|
||||
|
||||
using StringTools;
|
||||
|
||||
class Chart {
|
||||
public static function loadChartMeta(songName:String, difficulty:String = "normal") {
|
||||
@@ -90,7 +97,7 @@ class Chart {
|
||||
}
|
||||
|
||||
if (Reflect.hasField(data, "codenameChart") && Reflect.field(data, "codenameChart") == true) {
|
||||
return cast data;
|
||||
base = data;
|
||||
} else {
|
||||
// base fnf chart parsing
|
||||
var data:SwagSong = data;
|
||||
@@ -168,7 +175,7 @@ class Chart {
|
||||
time: daStrumTime,
|
||||
id: daNoteData % 4,
|
||||
type: daNoteType,
|
||||
sustainLength: note[2]
|
||||
sLen: note[2]
|
||||
});
|
||||
}
|
||||
|
||||
@@ -198,89 +205,61 @@ class Chart {
|
||||
return chart.noteTypes.length;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typedef ChartData = {
|
||||
public var strumLines:Array<ChartStrumLine>;
|
||||
public var events:Array<ChartEvent>;
|
||||
public var meta:ChartMetaData;
|
||||
public var codenameChart:Bool;
|
||||
public var stage:String;
|
||||
public var scrollSpeed:Float;
|
||||
public var fromMods:Bool;
|
||||
public var noteTypes:Array<String>;
|
||||
}
|
||||
|
||||
typedef ChartMetaData = {
|
||||
public var name:String;
|
||||
public var bpm:Float;
|
||||
public var ?displayName:String;
|
||||
public var ?beatsPerMesure:Float;
|
||||
public var ?stepsPerBeat:Float;
|
||||
public var ?needsVoices:Bool;
|
||||
public var ?icon:String;
|
||||
public var ?color:Dynamic;
|
||||
public var ?difficulties:Array<String>;
|
||||
public var ?coopAllowed:Bool;
|
||||
public var ?opponentModeAllowed:Bool;
|
||||
|
||||
// NOT TO BE EXPORTED
|
||||
public var ?parsedColor:FlxColor;
|
||||
}
|
||||
|
||||
typedef ChartStrumLine = {
|
||||
var characters:Array<String>;
|
||||
var opponent:Bool;
|
||||
var notes:Array<ChartNote>;
|
||||
var position:String;
|
||||
var ?strumLinePos:Float; // 0.25 = default opponent pos, 0.75 = default boyfriend pos
|
||||
var ?visible:Null<Bool>;
|
||||
}
|
||||
|
||||
typedef ChartNote = {
|
||||
var time:Float; // time at which the note will be hit (ms)
|
||||
var id:Int; // strum id of the note
|
||||
var type:Int; // type (int) of the note
|
||||
var sustainLength:Float; // sustain length of the note (ms)
|
||||
}
|
||||
|
||||
typedef ChartEvent = {
|
||||
var time:Float;
|
||||
var type:ChartEventType;
|
||||
var params:Array<Dynamic>;
|
||||
}
|
||||
|
||||
@:enum
|
||||
abstract ChartEventType(Int) from Int to Int {
|
||||
/**
|
||||
* CUSTOM EVENT
|
||||
* Params:
|
||||
* - Function Name (String)
|
||||
* - Function Parameters...
|
||||
*/
|
||||
var CUSTOM = -1;
|
||||
/**
|
||||
* NO EVENT, MADE FOR UNKNOWN EVENTS / EVENTS THAT CANNOT BE PARSED
|
||||
*/
|
||||
var NONE = 0;
|
||||
/**
|
||||
* CAMERA MOVEMENT EVENT
|
||||
* Params:
|
||||
* - Target Strumline ID (Int)
|
||||
*/
|
||||
var CAM_MOVEMENT = 1;
|
||||
|
||||
/**
|
||||
* BPM CHANGE EVENT
|
||||
* Params:
|
||||
* - Target BPM (Float)
|
||||
* Saves the chart to the specific song folder path.
|
||||
* @param songFolderPath Path to the song folder (ex: `mods/your mod/songs/song/`)
|
||||
* @param chart Chart to save
|
||||
* @param difficulty Name of the difficulty
|
||||
* @param saveSettings
|
||||
* @return Filtered chart used for saving.
|
||||
*/
|
||||
var BPM_CHANGE = 2;
|
||||
/**
|
||||
* ALT ANIM TOGGLE
|
||||
* Params:
|
||||
* - Strum Line which is going to be toggled (Int)
|
||||
* - Whenever its going to be toggled or not (Bool)
|
||||
*/
|
||||
var ALT_ANIM_TOGGLE = 3;
|
||||
public static function save(songFolderPath:String, chart:ChartData, difficulty:String = "normal", ?saveSettings:ChartSaveSettings):ChartData {
|
||||
if (saveSettings == null) saveSettings = {};
|
||||
|
||||
var filteredChart = filterChartForSaving(chart, saveSettings.saveMetaInChart);
|
||||
var meta = filteredChart.meta;
|
||||
|
||||
// idk how null reacts to it so better be sure
|
||||
|
||||
#if sys
|
||||
if (!FileSystem.exists('${songFolderPath}\\charts\\'))
|
||||
FileSystem.createDirectory('${songFolderPath}\\charts\\');
|
||||
|
||||
var chartPath = '${songFolderPath}\\charts\\${difficulty.trim()}.json';
|
||||
var metaPath = '${songFolderPath}\\meta.json';
|
||||
|
||||
File.saveContent(chartPath, Json.stringify(filteredChart, null, saveSettings.prettyPrint == true ? "\t" : null));
|
||||
|
||||
if (saveSettings.overrideExistingMeta == true || !FileSystem.exists(metaPath))
|
||||
File.saveContent(metaPath, Json.stringify(meta, null, saveSettings.prettyPrint == true ? "\t" : null));
|
||||
#end
|
||||
return filteredChart;
|
||||
}
|
||||
|
||||
public static function filterChartForSaving(chart:ChartData, ?saveMetaInChart:Null<Bool>):ChartData {
|
||||
var data = Reflect.copy(chart); // make a copy of the chart to leave the OG intact
|
||||
if (saveMetaInChart != true) {
|
||||
data.meta = null;
|
||||
} else {
|
||||
data.meta = Reflect.copy(chart.meta); // also make a copy of the metadata to leave the OG intact.
|
||||
if (data.meta != null) data.meta.parsedColor = null;
|
||||
}
|
||||
|
||||
data.fromMods = null;
|
||||
|
||||
var sortedData:Dynamic = {};
|
||||
for(f in Reflect.fields(data)) {
|
||||
var v = Reflect.field(data, f);
|
||||
if (v != null)
|
||||
Reflect.setField(sortedData, f, v);
|
||||
}
|
||||
return sortedData;
|
||||
}
|
||||
}
|
||||
|
||||
typedef ChartSaveSettings = {
|
||||
var ?overrideExistingMeta:Bool;
|
||||
var ?saveMetaInChart:Bool;
|
||||
var ?prettyPrint:Bool;
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package funkin.chart;
|
||||
|
||||
import flixel.util.FlxColor;
|
||||
|
||||
typedef ChartData = {
|
||||
public var strumLines:Array<ChartStrumLine>;
|
||||
public var events:Array<ChartEvent>;
|
||||
public var meta:ChartMetaData;
|
||||
public var codenameChart:Bool;
|
||||
public var stage:String;
|
||||
public var scrollSpeed:Float;
|
||||
public var noteTypes:Array<String>;
|
||||
|
||||
public var ?fromMods:Bool;
|
||||
}
|
||||
|
||||
typedef ChartMetaData = {
|
||||
public var name:String;
|
||||
public var bpm:Float;
|
||||
public var ?displayName:String;
|
||||
public var ?beatsPerMesure:Float;
|
||||
public var ?stepsPerBeat:Float;
|
||||
public var ?needsVoices:Bool;
|
||||
public var ?icon:String;
|
||||
public var ?color:Dynamic;
|
||||
public var ?difficulties:Array<String>;
|
||||
public var ?coopAllowed:Bool;
|
||||
public var ?opponentModeAllowed:Bool;
|
||||
|
||||
// NOT TO BE EXPORTED
|
||||
public var ?parsedColor:FlxColor;
|
||||
}
|
||||
|
||||
typedef ChartStrumLine = {
|
||||
var characters:Array<String>;
|
||||
var opponent:Bool;
|
||||
var notes:Array<ChartNote>;
|
||||
var position:String;
|
||||
var ?strumLinePos:Float; // 0.25 = default opponent pos, 0.75 = default boyfriend pos
|
||||
var ?visible:Null<Bool>;
|
||||
}
|
||||
|
||||
typedef ChartNote = {
|
||||
var time:Float; // time at which the note will be hit (ms)
|
||||
var id:Int; // strum id of the note
|
||||
var type:Int; // type (int) of the note
|
||||
var sLen:Float; // sustain length of the note (ms)
|
||||
}
|
||||
|
||||
typedef ChartEvent = {
|
||||
var time:Float;
|
||||
var type:ChartEventType;
|
||||
var params:Array<Dynamic>;
|
||||
}
|
||||
|
||||
@:enum
|
||||
abstract ChartEventType(Int) from Int to Int {
|
||||
/**
|
||||
* CUSTOM EVENT
|
||||
* Params:
|
||||
* - Function Name (String)
|
||||
* - Function Parameters...
|
||||
*/
|
||||
var CUSTOM = -1;
|
||||
/**
|
||||
* NO EVENT, MADE FOR UNKNOWN EVENTS / EVENTS THAT CANNOT BE PARSED
|
||||
*/
|
||||
var NONE = 0;
|
||||
/**
|
||||
* CAMERA MOVEMENT EVENT
|
||||
* Params:
|
||||
* - Target Strumline ID (Int)
|
||||
*/
|
||||
var CAM_MOVEMENT = 1;
|
||||
|
||||
/**
|
||||
* BPM CHANGE EVENT
|
||||
* Params:
|
||||
* - Target BPM (Float)
|
||||
*/
|
||||
var BPM_CHANGE = 2;
|
||||
/**
|
||||
* ALT ANIM TOGGLE
|
||||
* Params:
|
||||
* - Strum Line which is going to be toggled (Int)
|
||||
* - Whenever its going to be toggled or not (Bool)
|
||||
*/
|
||||
var ALT_ANIM_TOGGLE = 3;
|
||||
}
|
||||
Reference in New Issue
Block a user