better events and funkinSave categorization
This commit is contained in:
@@ -8,7 +8,7 @@ import flixel.math.FlxRect;
|
||||
import flixel.system.FlxAssets.FlxGraphicAsset;
|
||||
import flixel.util.typeLimit.OneOfTwo;
|
||||
import flxanimate.animate.FlxAnim.FlxSymbolAnimation;
|
||||
import funkin.backend.scripting.events.PlayAnimContext;
|
||||
import funkin.backend.scripting.events.sprite.PlayAnimContext;
|
||||
import funkin.backend.system.interfaces.IBeatReceiver;
|
||||
import funkin.backend.system.interfaces.IOffsetCompatible;
|
||||
import funkin.backend.utils.XMLUtil.AnimData;
|
||||
|
||||
@@ -19,38 +19,38 @@ class Script extends FlxBasic implements IFlxDestroyable {
|
||||
public static function getDefaultVariables(?script:Script):Map<String, Dynamic> {
|
||||
return [
|
||||
// Haxe related stuff
|
||||
"Std" => Std,
|
||||
"Math" => Math,
|
||||
"Reflect" => Reflect,
|
||||
"StringTools" => StringTools,
|
||||
"Json" => haxe.Json,
|
||||
"Std" => Std,
|
||||
"Math" => Math,
|
||||
"Reflect" => Reflect,
|
||||
"StringTools" => StringTools,
|
||||
"Json" => haxe.Json,
|
||||
|
||||
// OpenFL & Lime related stuff
|
||||
"Assets" => openfl.utils.Assets,
|
||||
"Application" => lime.app.Application,
|
||||
"Application" => lime.app.Application,
|
||||
"Main" => funkin.backend.system.Main,
|
||||
"window" => lime.app.Application.current.window,
|
||||
|
||||
// Flixel related stuff
|
||||
"FlxG" => flixel.FlxG,
|
||||
"FlxSprite" => flixel.FlxSprite,
|
||||
"FlxBasic" => flixel.FlxBasic,
|
||||
"FlxCamera" => flixel.FlxCamera,
|
||||
"state" => flixel.FlxG.state,
|
||||
"FlxEase" => flixel.tweens.FlxEase,
|
||||
"FlxTween" => flixel.tweens.FlxTween,
|
||||
"FlxSound" => flixel.sound.FlxSound,
|
||||
"FlxAssets" => flixel.system.FlxAssets,
|
||||
"FlxMath" => flixel.math.FlxMath,
|
||||
"FlxGroup" => flixel.group.FlxGroup,
|
||||
"FlxTypedGroup" => flixel.group.FlxGroup.FlxTypedGroup,
|
||||
"state" => flixel.FlxG.state,
|
||||
"FlxG" => flixel.FlxG,
|
||||
"FlxSprite" => flixel.FlxSprite,
|
||||
"FlxBasic" => flixel.FlxBasic,
|
||||
"FlxCamera" => flixel.FlxCamera,
|
||||
"FlxEase" => flixel.tweens.FlxEase,
|
||||
"FlxTween" => flixel.tweens.FlxTween,
|
||||
"FlxSound" => flixel.sound.FlxSound,
|
||||
"FlxAssets" => flixel.system.FlxAssets,
|
||||
"FlxMath" => flixel.math.FlxMath,
|
||||
"FlxGroup" => flixel.group.FlxGroup,
|
||||
"FlxTypedGroup" => flixel.group.FlxGroup.FlxTypedGroup,
|
||||
"FlxSpriteGroup" => flixel.group.FlxSpriteGroup,
|
||||
"FlxTypeText" => flixel.addons.text.FlxTypeText,
|
||||
"FlxText" => flixel.text.FlxText,
|
||||
"FlxTimer" => flixel.util.FlxTimer,
|
||||
"FlxPoint" => CoolUtil.getMacroAbstractClass("flixel.math.FlxPoint"),
|
||||
"FlxAxes" => CoolUtil.getMacroAbstractClass("flixel.util.FlxAxes"),
|
||||
"FlxColor" => CoolUtil.getMacroAbstractClass("flixel.util.FlxColor"),
|
||||
"FlxTypeText" => flixel.addons.text.FlxTypeText,
|
||||
"FlxText" => flixel.text.FlxText,
|
||||
"FlxTimer" => flixel.util.FlxTimer,
|
||||
"FlxPoint" => CoolUtil.getMacroAbstractClass("flixel.math.FlxPoint"),
|
||||
"FlxAxes" => CoolUtil.getMacroAbstractClass("flixel.util.FlxAxes"),
|
||||
"FlxColor" => CoolUtil.getMacroAbstractClass("flixel.util.FlxColor"),
|
||||
|
||||
// Engine related stuff
|
||||
"engine" => {
|
||||
@@ -59,38 +59,38 @@ class Script extends FlxBasic implements IFlxDestroyable {
|
||||
build: 2675, // 2675 being the last build num before it was removed
|
||||
name: "Codename Engine"
|
||||
},
|
||||
"ModState" => funkin.backend.scripting.ModState,
|
||||
"ModSubState" => funkin.backend.scripting.ModSubState,
|
||||
"PlayState" => funkin.game.PlayState,
|
||||
"GameOverSubstate" => funkin.game.GameOverSubstate,
|
||||
"ModState" => funkin.backend.scripting.ModState,
|
||||
"ModSubState" => funkin.backend.scripting.ModSubState,
|
||||
"PlayState" => funkin.game.PlayState,
|
||||
"GameOverSubstate" => funkin.game.GameOverSubstate,
|
||||
"HealthIcon" => funkin.game.HealthIcon,
|
||||
"HudCamera" => funkin.game.HudCamera,
|
||||
"Note" => funkin.game.Note,
|
||||
"Strum" => funkin.game.Strum,
|
||||
"StrumLine" => funkin.game.StrumLine,
|
||||
"Character" => funkin.game.Character,
|
||||
"Boyfriend" => funkin.game.Character, // for compatibility
|
||||
"PauseSubstate" => funkin.menus.PauseSubState,
|
||||
"FreeplayState" => funkin.menus.FreeplayState,
|
||||
"MainMenuState" => funkin.menus.MainMenuState,
|
||||
"PauseSubState" => funkin.menus.PauseSubState,
|
||||
"HudCamera" => funkin.game.HudCamera,
|
||||
"Note" => funkin.game.Note,
|
||||
"Strum" => funkin.game.Strum,
|
||||
"StrumLine" => funkin.game.StrumLine,
|
||||
"Character" => funkin.game.Character,
|
||||
"Boyfriend" => funkin.game.Character, // for compatibility
|
||||
"PauseSubstate" => funkin.menus.PauseSubState,
|
||||
"FreeplayState" => funkin.menus.FreeplayState,
|
||||
"MainMenuState" => funkin.menus.MainMenuState,
|
||||
"PauseSubState" => funkin.menus.PauseSubState,
|
||||
"StoryMenuState" => funkin.menus.StoryMenuState,
|
||||
"TitleState" => funkin.menus.TitleState,
|
||||
"Options" => funkin.options.Options,
|
||||
"Paths" => funkin.backend.assets.Paths,
|
||||
"Conductor" => funkin.backend.system.Conductor,
|
||||
"FunkinShader" => funkin.backend.shaders.FunkinShader,
|
||||
"CustomShader" => funkin.backend.shaders.CustomShader,
|
||||
"Options" => funkin.options.Options,
|
||||
"Paths" => funkin.backend.assets.Paths,
|
||||
"Conductor" => funkin.backend.system.Conductor,
|
||||
"FunkinShader" => funkin.backend.shaders.FunkinShader,
|
||||
"CustomShader" => funkin.backend.shaders.CustomShader,
|
||||
"FunkinText" => funkin.backend.FunkinText,
|
||||
"FlxAnimate" => funkin.backend.FlxAnimate,
|
||||
"FunkinSprite" => funkin.backend.FunkinSprite,
|
||||
"Alphabet" => funkin.menus.ui.Alphabet,
|
||||
"Alphabet" => funkin.menus.ui.Alphabet,
|
||||
|
||||
"CoolUtil" => funkin.backend.utils.CoolUtil,
|
||||
"IniUtil" => funkin.backend.utils.IniUtil,
|
||||
"XMLUtil" => funkin.backend.utils.XMLUtil,
|
||||
#if sys "ZipUtil" => funkin.backend.utils.ZipUtil, #end
|
||||
"MarkdownUtil" => funkin.backend.utils.MarkdownUtil,
|
||||
"CoolUtil" => funkin.backend.utils.CoolUtil,
|
||||
"IniUtil" => funkin.backend.utils.IniUtil,
|
||||
"XMLUtil" => funkin.backend.utils.XMLUtil,
|
||||
#if sys "ZipUtil" => funkin.backend.utils.ZipUtil, #end
|
||||
"MarkdownUtil" => funkin.backend.utils.MarkdownUtil,
|
||||
"EngineUtil" => funkin.backend.utils.EngineUtil,
|
||||
"MemoryUtil" => funkin.backend.utils.MemoryUtil,
|
||||
"BitmapUtil" => funkin.backend.utils.BitmapUtil,
|
||||
@@ -98,14 +98,47 @@ class Script extends FlxBasic implements IFlxDestroyable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Used internally to keep backwards compatability with old scripts.
|
||||
* Used internally to keep backwards compatibility with old scripts.
|
||||
* This gets set on `hscript.Interp.importRedirects`,
|
||||
* if you wanna modify it, please edit `hscript.Interp.importRedirects` directly.
|
||||
**/
|
||||
public static function getDefaultImportRedirects():Map<String, String> {
|
||||
return [
|
||||
"Meow" => "funkin.backend.utils.CoolUtil",
|
||||
var redirects:Map<String, String> = [
|
||||
"funkin.savedata.FunkinSave" => "funkin.backend.utils.FunkinSave"
|
||||
];
|
||||
|
||||
final events = "funkin.backend.scripting.events.";
|
||||
redirects[events + "CharacterNodeEvent"] = events + "character.CharacterNodeEvent";
|
||||
redirects[events + "CharacterXMLEvent"] = events + "character.CharacterXMLEvent";
|
||||
redirects[events + "DanceEvent"] = events + "character.DanceEvent";
|
||||
redirects[events + "DirectionAnimEvent"] = events + "character.DirectionAnimEvent";
|
||||
redirects[events + "DiscordPresenceUpdateEvent"] = events + "discord.DiscordPresenceUpdateEvent";
|
||||
redirects[events + "GameOverCreationEvent"] = events + "gameover.GameOverCreationEvent";
|
||||
redirects[events + "CamMoveEvent"] = events + "gameplay.CamMoveEvent";
|
||||
redirects[events + "CountdownEvent"] = events + "gameplay.CountdownEvent";
|
||||
redirects[events + "EventGameEvent"] = events + "gameplay.EventGameEvent";
|
||||
redirects[events + "GameOverEvent"] = events + "gameplay.GameOverEvent";
|
||||
redirects[events + "RatingUpdateEvent"] = events + "gameplay.RatingUpdateEvent";
|
||||
redirects[events + "HealthIconChangeEvent"] = events + "healthicon.HealthIconChangeEvent";
|
||||
redirects[events + "FreeplayAlphaUpdateEvent"] = events + "menu.freeplay.FreeplayAlphaUpdateEvent";
|
||||
redirects[events + "FreeplaySongSelectEvent"] = events + "menu.freeplay.FreeplaySongSelectEvent";
|
||||
redirects[events + "MenuChangeEvent"] = events + "menu.MenuChangeEvent";
|
||||
redirects[events + "PauseCreationEvent"] = events + "menu.pause.PauseCreationEvent";
|
||||
redirects[events + "WeekSelectEvent"] = events + "menu.storymenu.WeekSelectEvent";
|
||||
redirects[events + "InputSystemEvent"] = events + "note.InputSystemEvent";
|
||||
redirects[events + "NoteCreationEvent"] = events + "note.NoteCreationEvent";
|
||||
redirects[events + "NoteHitEvent"] = events + "note.NoteHitEvent";
|
||||
redirects[events + "NoteMissEvent"] = events + "note.NoteMissEvent";
|
||||
redirects[events + "NoteUpdateEvent"] = events + "note.NoteUpdateEvent";
|
||||
redirects[events + "SimpleNoteEvent"] = events + "note.SimpleNoteEvent";
|
||||
redirects[events + "StrumCreationEvent"] = events + "note.StrumCreationEvent";
|
||||
redirects[events + "SplashShowEvent"] = events + "splash.SplashShowEvent";
|
||||
redirects[events + "PlayAnimContext"] = events + "sprite.PlayAnimContext";
|
||||
redirects[events + "PlayAnimEvent"] = events + "sprite.PlayAnimEvent";
|
||||
redirects[events + "StageNodeEvent"] = events + "stage.StageNodeEvent";
|
||||
redirects[events + "StageXMLEvent"] = events + "stage.StageXMLEvent";
|
||||
|
||||
return redirects;
|
||||
}
|
||||
|
||||
public static function getDefaultPreprocessors():Map<String, Dynamic> {
|
||||
|
||||
@@ -5,9 +5,4 @@ final class AmountEvent extends CancellableEvent {
|
||||
* Amount
|
||||
*/
|
||||
public var amount:Null<Int>;
|
||||
|
||||
/**
|
||||
* Shows whether or not psych users complained about this class
|
||||
*/
|
||||
public var psychUsersComplained:Bool = true;
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
package funkin.backend.scripting.events;
|
||||
|
||||
final class DrawEvent extends CancellableEvent {
|
||||
// temp empty for now - Nex
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
## NOTE
|
||||
Keep in mind that a certain criteria was used to place events in their corresponding folders which is simply what the events themselves are mostly related to.
|
||||
|
||||
For example:
|
||||
|
||||
- `GameOverEvent` inside of the `gameplay` folder instead of the `gameover` folder since it gets called in the `PlayState` class (that owns the `gameplay` folder) instead of the `GameOverSubstate` class itself;
|
||||
- `NoteHitEvent` gets indeed called by the `PlayState` class but it's also used in the `StrumLine` (For those who didn't really know, Strumlines are the Input Notes) class and since the event's name itself starts with the word `Note` it was more accurate to place it in the `note` folder instead of the `gameplay` folder that `PlayState` owns.
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.character;
|
||||
|
||||
import funkin.game.Character;
|
||||
import haxe.xml.Access;
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.character;
|
||||
|
||||
import funkin.game.Character;
|
||||
import haxe.xml.Access;
|
||||
@@ -7,7 +7,7 @@ final class CharacterXMLEvent extends CancellableEvent {
|
||||
/**
|
||||
* The character instance
|
||||
*/
|
||||
public var character:Character;
|
||||
public var character:Character;
|
||||
|
||||
/**
|
||||
* The xml
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.character;
|
||||
|
||||
final class DanceEvent extends CancellableEvent {
|
||||
public var danced:Bool;
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.character;
|
||||
|
||||
import funkin.backend.scripting.events.sprite.PlayAnimContext;
|
||||
|
||||
final class DirectionAnimEvent extends CancellableEvent {
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.discord;
|
||||
|
||||
final class DiscordPresenceUpdateEvent extends CancellableEvent {
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.gameover;
|
||||
|
||||
/**
|
||||
* CANCEL this event to prevent default behaviour!
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.gameplay;
|
||||
|
||||
import flixel.math.FlxPoint;
|
||||
import funkin.game.StrumLine;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.gameplay;
|
||||
|
||||
import flixel.sound.FlxSound;
|
||||
import flixel.tweens.FlxTween;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.gameplay;
|
||||
|
||||
import funkin.backend.chart.ChartData;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.gameplay;
|
||||
|
||||
import funkin.game.Character;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.gameplay;
|
||||
|
||||
final class RatingUpdateEvent extends CancellableEvent {
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.healthicon;
|
||||
|
||||
final class HealthIconChangeEvent extends CancellableEvent {
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.menu;
|
||||
|
||||
final class MenuChangeEvent extends CancellableEvent {
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.menu.freeplay;
|
||||
|
||||
final class FreeplayAlphaUpdateEvent extends CancellableEvent {
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.menu.freeplay;
|
||||
|
||||
final class FreeplaySongSelectEvent extends CancellableEvent {
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.menu.pause;
|
||||
|
||||
/**
|
||||
* CANCEL this event to prevent default behaviour!
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.menu.storymenu;
|
||||
|
||||
import funkin.menus.StoryMenuState.WeekData;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.note;
|
||||
|
||||
import funkin.game.StrumLine;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.note;
|
||||
|
||||
import funkin.game.Note;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.note;
|
||||
|
||||
import funkin.game.Character;
|
||||
import funkin.game.Note;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.note;
|
||||
|
||||
import funkin.game.Character;
|
||||
import funkin.game.Note;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.note;
|
||||
|
||||
import funkin.game.Note;
|
||||
import funkin.game.Strum;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.note;
|
||||
|
||||
import funkin.game.Note;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.note;
|
||||
|
||||
import funkin.game.Strum;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events.soundTray;
|
||||
package funkin.backend.scripting.events.soundtray;
|
||||
|
||||
final class SoundTrayShowEvent extends CancellableEvent
|
||||
{
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events.soundTray;
|
||||
package funkin.backend.scripting.events.soundtray;
|
||||
|
||||
final class SoundTrayTextEvent extends CancellableEvent
|
||||
{
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.splash;
|
||||
|
||||
import funkin.game.SplashGroup;
|
||||
import funkin.game.Strum;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.sprite;
|
||||
|
||||
/**
|
||||
Contains all contexts possible for `PlayAnimEvent`.
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.sprite;
|
||||
|
||||
final class PlayAnimEvent extends CancellableEvent {
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.stage;
|
||||
|
||||
import funkin.game.Stage;
|
||||
import haxe.xml.Access;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package funkin.backend.scripting.events;
|
||||
package funkin.backend.scripting.events.stage;
|
||||
|
||||
import funkin.game.Stage;
|
||||
import haxe.xml.Access;
|
||||
@@ -142,7 +142,7 @@ class Main extends Sprite
|
||||
Assets.registerLibrary('default', lib);
|
||||
|
||||
funkin.options.PlayerSettings.init();
|
||||
funkin.savedata.FunkinSave.init();
|
||||
funkin.backend.utils.FunkinSave.init();
|
||||
Options.load();
|
||||
|
||||
FlxG.fixedTimestep = false;
|
||||
|
||||
@@ -83,7 +83,7 @@ class GitHub {
|
||||
* @param onError Error Callback
|
||||
* @return Members List
|
||||
*/
|
||||
public static function getOrganizationMembers(org:String, ?onError:Exception->Void):Array<GitHubContributor> {
|
||||
public static function getOrganizationMembers(org:String, ?onError:Exception->Void):Array<GitHubContributor> {
|
||||
#if GITHUB_API
|
||||
try {
|
||||
var data = Json.parse(HttpUtil.requestText('https://api.github.com/orgs/$org/members'));
|
||||
@@ -106,7 +106,7 @@ class GitHub {
|
||||
* @param onError Error Callback
|
||||
* @return User/Organization
|
||||
*/
|
||||
public static function getUser(user:String, ?onError:Exception->Void):GitHubUser {
|
||||
public static function getUser(user:String, ?onError:Exception->Void):GitHubUser {
|
||||
#if GITHUB_API
|
||||
try {
|
||||
var url = 'https://api.github.com/users/$user';
|
||||
|
||||
@@ -5,7 +5,7 @@ import flixel.sound.FlxSound;
|
||||
import flixel.util.typeLimit.OneOfTwo;
|
||||
import funkin.backend.scripting.*; // lazy
|
||||
import funkin.backend.scripting.events.CancellableEvent;
|
||||
import funkin.backend.scripting.events.DiscordPresenceUpdateEvent;
|
||||
import funkin.backend.scripting.events.discord.*;
|
||||
import funkin.backend.system.macros.Utils;
|
||||
import haxe.Json;
|
||||
import openfl.display.BitmapData;
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
package funkin.backend.utils;
|
||||
|
||||
import flixel.util.FlxSave;
|
||||
import lime.app.Application;
|
||||
import openfl.Lib;
|
||||
|
||||
/**
|
||||
* Class used for saves WITHOUT going through the struggle of type checks
|
||||
* Just add your save variables the way you would do in the Options.hx file.
|
||||
* The macro will automatically generate the `flush` and `load` functions.
|
||||
*/
|
||||
@:build(funkin.backend.system.macros.FunkinSaveMacro.build("save", "flush", "load"))
|
||||
class FunkinSave {
|
||||
public static var highscores:Map<HighscoreEntry, SongScore> = [];
|
||||
|
||||
|
||||
/**
|
||||
* ONLY OPEN IF YOU WANT TO EDIT FUNCTIONS RELATED TO SAVING, LOADING OR HIGHSCORES.
|
||||
*/
|
||||
#if REGION
|
||||
@:dox(hide) @:doNotSave
|
||||
private static var __eventAdded = false;
|
||||
@:doNotSave
|
||||
public static var save:FlxSave;
|
||||
|
||||
public static function init() {
|
||||
//trace(Application.current.meta.get('save-path'));
|
||||
//trace(Application.current.meta.get('save-name'));
|
||||
save = new FlxSave();
|
||||
save.bind('save-default', #if sys 'YoshiCrafter29/CodenameEngine' #else 'CodenameEngine' #end);
|
||||
load();
|
||||
|
||||
if (!__eventAdded) {
|
||||
Lib.application.onExit.add(function(i:Int) {
|
||||
trace("Saving savedata...");
|
||||
flush();
|
||||
});
|
||||
__eventAdded = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the high-score for a song.
|
||||
* @param name Song name
|
||||
* @param diff Song difficulty
|
||||
* @param changes Changes made to that song in freeplay.
|
||||
*/
|
||||
public static inline function getSongHighscore(name:String, diff:String, ?changes:Array<HighscoreChange>) {
|
||||
if (changes == null) changes = [];
|
||||
return safeGetHighscore(HSongEntry(name.toLowerCase(), diff.toLowerCase(), changes));
|
||||
}
|
||||
|
||||
public static inline function setSongHighscore(name:String, diff:String, highscore:SongScore, ?changes:Array<HighscoreChange>) {
|
||||
if (changes == null) changes = [];
|
||||
if (safeRegisterHighscore(HSongEntry(name.toLowerCase(), diff.toLowerCase(), changes), highscore)) {
|
||||
flush();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static inline function getWeekHighscore(name:String, diff:String)
|
||||
return safeGetHighscore(HWeekEntry(name.toLowerCase(), diff.toLowerCase()));
|
||||
|
||||
public static inline function setWeekHighscore(name:String, diff:String, highscore:SongScore) {
|
||||
if (safeRegisterHighscore(HWeekEntry(name.toLowerCase(), diff.toLowerCase()), highscore)) {
|
||||
flush();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static function safeGetHighscore(entry:HighscoreEntry):SongScore {
|
||||
if (!highscores.exists(entry)) {
|
||||
return {
|
||||
score: 0,
|
||||
accuracy: 0,
|
||||
misses: 0,
|
||||
hits: [],
|
||||
date: null
|
||||
};
|
||||
}
|
||||
return highscores.get(entry);
|
||||
}
|
||||
|
||||
private static function safeRegisterHighscore(entry:HighscoreEntry, highscore:SongScore) {
|
||||
var oldHigh = safeGetHighscore(entry);
|
||||
if (oldHigh.date == null || oldHigh.score < highscore.score) {
|
||||
highscores.set(entry, highscore);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#end
|
||||
}
|
||||
|
||||
enum HighscoreEntry {
|
||||
HWeekEntry(weekName:String, difficulty:String);
|
||||
HSongEntry(songName:String, difficulty:String, changes:Array<HighscoreChange>);
|
||||
}
|
||||
|
||||
enum HighscoreChange {
|
||||
CCoopMode;
|
||||
COpponentMode;
|
||||
}
|
||||
|
||||
typedef SongScore = {
|
||||
var score:Int;
|
||||
var accuracy:Float;
|
||||
var misses:Int;
|
||||
var hits:Map<String, Int>;
|
||||
var date:String;
|
||||
}
|
||||
Reference in New Issue
Block a user