From 562f1d8fc68eb05079fdb41b10551dfcab431c72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=8D=9A=7ENex?= <87421482+NexIsDumb@users.noreply.github.com> Date: Sat, 31 Aug 2024 03:08:13 +0200 Subject: [PATCH] constants macros: reset(), init() and @:lazy Co-Authored-By: Ne_Eo --- source/funkin/Constants.hx | 7 ++ source/funkin/backend/system/MainState.hx | 6 +- .../backend/system/macros/ConstantsMacro.hx | 65 +++++++++++++++++++ .../backend/system/updating/UpdateUtil.hx | 2 +- .../editors/charter/ChartCreationScreen.hx | 1 - source/funkin/game/Character.hx | 3 +- source/funkin/game/Note.hx | 2 +- source/funkin/game/cutscenes/VideoCutscene.hx | 2 +- source/funkin/menus/MainMenuState.hx | 2 +- 9 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 source/funkin/backend/system/macros/ConstantsMacro.hx diff --git a/source/funkin/Constants.hx b/source/funkin/Constants.hx index 8cf399cc..c3620e7b 100644 --- a/source/funkin/Constants.hx +++ b/source/funkin/Constants.hx @@ -6,10 +6,17 @@ import flixel.util.FlxColor; using StringTools; +@:build(funkin.backend.system.macros.ConstantsMacro.build()) class Constants { + // these arent good since someone could easily change through meta.set() - Nex + // @:lazy public static var WINDOW_TITLE:String = Application.current.meta.get('name'); + // @:lazy public static var BUILD_FILENAME:String = Application.current.meta.get('file'); + // @:lazy public static var VERSION:String = Application.current.meta.get('version'); + public static var COMMIT_NUMBER = GitCommitMacro.commitNumber; public static var COMMIT_HASH = GitCommitMacro.commitHash; public static var COMMIT_MESSAGE = 'Commit $COMMIT_NUMBER ($COMMIT_HASH)'; + @:lazy public static var VERSION_MESSAGE:String = 'Codename Engine v${Application.current.meta.get('version')}'; public static var REPO_NAME = "CodenameEngine"; public static var REPO_OWNER = "FNF-CNE-Devs"; diff --git a/source/funkin/backend/system/MainState.hx b/source/funkin/backend/system/MainState.hx index adc5ae00..7d41aa7a 100644 --- a/source/funkin/backend/system/MainState.hx +++ b/source/funkin/backend/system/MainState.hx @@ -17,9 +17,13 @@ class MainState extends FlxState { public static var betaWarningShown:Bool = false; public override function create() { super.create(); - if (!initiated) + if (!initiated) { Main.loadGameSettings(); + Constants.init(); + } + initiated = true; + Constants.reset(); #if sys CoolUtil.deleteFolder('./.temp/'); // delete temp folder diff --git a/source/funkin/backend/system/macros/ConstantsMacro.hx b/source/funkin/backend/system/macros/ConstantsMacro.hx new file mode 100644 index 00000000..2fc28904 --- /dev/null +++ b/source/funkin/backend/system/macros/ConstantsMacro.hx @@ -0,0 +1,65 @@ +package funkin.backend.system.macros; + +#if macro +import haxe.macro.Context; +import haxe.macro.Expr; +#end + +class ConstantsMacro { + #if macro + static function build() { + var fields = Context.getBuildFields(); + + var resetFields:Array = []; + var lazyFields:Array = []; + for(field in fields) { + switch(field.kind) { + case FVar(t, e): + resetFields.push(macro $i{field.name} = ${e}); + + var hasLazy = false; + for(meta in field.meta) { + if(meta.name == ":lazy") { + hasLazy = true; + break; + } + } + + if(hasLazy) { + lazyFields.push(macro $i{field.name} = ${e}); + field.kind = FVar(t, null); + } + default: + } + } + + fields.push({ + name: "reset", + pos: Context.currentPos(), + access: [APublic, AStatic], + kind: FFun({ + args: [], + ret: null, + expr: macro { + $b{resetFields} + } + }) + }); + + fields.push({ + name: "init", + pos: Context.currentPos(), + access: [APublic, AStatic], + kind: FFun({ + args: [], + ret: null, + expr: macro { + $b{lazyFields} + } + }) + }); + + return fields; + } + #end +} \ No newline at end of file diff --git a/source/funkin/backend/system/updating/UpdateUtil.hx b/source/funkin/backend/system/updating/UpdateUtil.hx index eeee9fc4..9515b990 100644 --- a/source/funkin/backend/system/updating/UpdateUtil.hx +++ b/source/funkin/backend/system/updating/UpdateUtil.hx @@ -22,7 +22,7 @@ class UpdateUtil { } public static function checkForUpdates():UpdateCheckCallback { - var curTag = 'v${Constants.VERSION}'; + var curTag = 'v${Application.current.meta.get('version')}'; trace(curTag); var error = false; diff --git a/source/funkin/editors/charter/ChartCreationScreen.hx b/source/funkin/editors/charter/ChartCreationScreen.hx index 3238c872..25e92a78 100644 --- a/source/funkin/editors/charter/ChartCreationScreen.hx +++ b/source/funkin/editors/charter/ChartCreationScreen.hx @@ -1,6 +1,5 @@ package funkin.editors.charter; -import haxe.macro.Expr.Constant; import flixel.text.FlxText.FlxTextFormat; import flixel.text.FlxText.FlxTextFormatMarkerPair; import funkin.backend.chart.ChartData; diff --git a/source/funkin/game/Character.hx b/source/funkin/game/Character.hx index ff183a7c..94021b4d 100644 --- a/source/funkin/game/Character.hx +++ b/source/funkin/game/Character.hx @@ -429,9 +429,10 @@ class Character extends FunkinSprite implements IBeatReceiver implements IOffset @:noCompletion private function get_danceInterval() return beatInterval; - + // these wont update when you change the constants!!! they just start from the constant for qol if we'll ever edit them in the future - Nex public static var FALLBACK_CHARACTER:String = Constants.DEFAULT_CHARACTER; public static var FALLBACK_DEAD_CHARACTER:String = Constants.DEFAULT_GAMEOVER_CHARACTER; + public static function getXMLFromCharName(character:OneOfTwo):Access { var char:Character = null; if (character is Character) { diff --git a/source/funkin/game/Note.hx b/source/funkin/game/Note.hx index f8acd280..1b29ecbe 100644 --- a/source/funkin/game/Note.hx +++ b/source/funkin/game/Note.hx @@ -86,7 +86,7 @@ class Note extends FlxSprite return PlayState.instance.getNoteType(noteTypeID); } - public static var swagWidth:Float = 160 * 0.7; + public static var swagWidth:Float = 160 * 0.7; // TODO: remove this private static var __customNoteTypeExists:Map = []; diff --git a/source/funkin/game/cutscenes/VideoCutscene.hx b/source/funkin/game/cutscenes/VideoCutscene.hx index 96293177..d328f125 100644 --- a/source/funkin/game/cutscenes/VideoCutscene.hx +++ b/source/funkin/game/cutscenes/VideoCutscene.hx @@ -92,7 +92,7 @@ class VideoCutscene extends Cutscene { // ZIP PATH: EXPORT // TODO: this but better and more ram friendly - localPath = './.temp/video-${curVideo++}.${Constants.VIDEO_EXT}'; + localPath = './.temp/video-${curVideo++}.${Path.extension(path)}'; Main.execAsync(function() { File.saveBytes(localPath, Assets.getBytes(path)); videoReady = true; diff --git a/source/funkin/menus/MainMenuState.hx b/source/funkin/menus/MainMenuState.hx index 15d45ee2..5f88f888 100644 --- a/source/funkin/menus/MainMenuState.hx +++ b/source/funkin/menus/MainMenuState.hx @@ -72,7 +72,7 @@ class MainMenuState extends MusicBeatState FlxG.camera.follow(camFollow, null, 0.06); - versionText = new FunkinText(5, FlxG.height - 2, 0, 'Codename Engine v${Application.current.meta.get('version')}\n${Constants.COMMIT_MESSAGE}\n[${controls.getKeyName(SWITCHMOD)}] Open Mods menu\n'); + versionText = new FunkinText(5, FlxG.height - 2, 0, '${Constants.VERSION_MESSAGE}\n${Constants.COMMIT_MESSAGE}\n[${controls.getKeyName(SWITCHMOD)}] Open Mods menu\n'); versionText.y -= versionText.height; versionText.scrollFactor.set(); add(versionText);