Tobee_Night_Funkin_PSYCH/source/Song.hx

110 lines
2.4 KiB
Haxe

package;
import Section.SwagSection;
import haxe.Json;
import haxe.format.JsonParser;
import lime.utils.Assets;
#if sys
import sys.io.File;
import sys.FileSystem;
#end
using StringTools;
typedef SwagSong =
{
var song:String;
var notes:Array<SwagSection>;
var bpm:Float;
var needsVoices:Bool;
var speed:Float;
var player1:String;
var player2:String;
var player3:String;
var stage:String;
var arrowSkin:String;
var splashSkin:String;
var validScore:Bool;
}
class Song
{
public var song:String;
public var notes:Array<SwagSection>;
public var bpm:Float;
public var needsVoices:Bool = true;
public var arrowSkin:String;
public var splashSkin:String;
public var speed:Float = 1;
public var stage:String;
public var player1:String = 'bf';
public var player2:String = 'dad';
public var player3:String = 'gf';
public function new(song, notes, bpm)
{
this.song = song;
this.notes = notes;
this.bpm = bpm;
}
public static function loadFromJson(jsonInput:String, ?folder:String):SwagSong
{
var rawJson = null;
var formattedFolder:String = Paths.formatToSongPath(folder);
var formattedSong:String = Paths.formatToSongPath(jsonInput);
#if MODS_ALLOWED
var moddyFile:String = Paths.modsJson(formattedFolder + '/' + formattedSong);
if(FileSystem.exists(moddyFile)) {
rawJson = File.getContent(moddyFile).trim();
}
#end
if(rawJson == null) {
#if sys
rawJson = File.getContent(Paths.json(formattedFolder + '/' + formattedSong)).trim();
#else
rawJson = Assets.getText(Paths.json(formattedFolder + '/' + formattedSong)).trim();
#end
}
while (!rawJson.endsWith("}"))
{
rawJson = rawJson.substr(0, rawJson.length - 1);
// LOL GOING THROUGH THE BULLSHIT TO CLEAN IDK WHATS STRANGE
}
// FIX THE CASTING ON WINDOWS/NATIVE
// Windows???
// trace(songData);
// trace('LOADED FROM JSON: ' + songData.notes);
/*
for (i in 0...songData.notes.length)
{
trace('LOADED FROM JSON: ' + songData.notes[i].sectionNotes);
// songData.notes[i].sectionNotes = songData.notes[i].sectionNotes
}
daNotes = songData.notes;
daSong = songData.song;
daBpm = songData.bpm; */
var songJson:SwagSong = parseJSONshit(rawJson);
if(jsonInput != 'events') StageData.loadDirectory(songJson);
return songJson;
}
public static function parseJSONshit(rawJson:String):SwagSong
{
var swagShit:SwagSong = cast Json.parse(rawJson).song;
swagShit.validScore = true;
return swagShit;
}
}