Skip to content

Commit 294af30

Browse files
author
Lenin
committed
Full changes, reworks, optimizeds and fixes
1 parent c144d34 commit 294af30

48 files changed

Lines changed: 2384 additions & 4058 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

source/Main.hx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,22 @@ class Main extends Sprite
293293
LimeSystem.allowScreenTimeout = ClientPrefs.data.screensaver;
294294
#end
295295

296+
#if android
297+
try
298+
{
299+
// Route system BACK through input handling instead of allowing the activity to close.
300+
funkin.mobile.backend.PsychJNI.manualBackButton();
301+
}
302+
catch (e:Dynamic)
303+
{
304+
trace('[Main] Failed to enable manual Android BACK button: ' + Std.string(e));
305+
}
306+
#end
307+
308+
#if android
309+
Application.current.window.onClose.add(onAndroidWindowClose);
310+
#end
311+
296312
#if (cpp && windows)
297313
// Add window close handler for fade out effect
298314
Application.current.window.onClose.add(onWindowClose);
@@ -370,6 +386,11 @@ class Main extends Sprite
370386
startupOrientationFixAttempts++;
371387
funkin.mobile.backend.PsychJNI.setOrientation(game.width, game.height, false, 'LandscapeLeft LandscapeRight');
372388
}
389+
390+
function onAndroidWindowClose():Void
391+
{
392+
Application.current.window.onClose.cancel();
393+
}
373394
#end
374395

375396
function initializeMaterialVolumeTray():Void

source/funkin/Preferences.hx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,17 @@ class Preferences {
283283
public static var defaultKeys:Map<String, Array<FlxKey>> = null;
284284
public static var defaultButtons:Map<String, Array<FlxGamepadInputID>> = null;
285285
public static var defaultMobileBinds:Map<String, Array<MobileInputID>> = null;
286+
static var controlsSaveCache:FlxSave = null;
287+
288+
static function getControlsSave():FlxSave
289+
{
290+
if (controlsSaveCache == null)
291+
{
292+
controlsSaveCache = new FlxSave();
293+
controlsSaveCache.bind('controls_v3', CoolUtil.getSavePath());
294+
}
295+
return controlsSaveCache;
296+
}
286297

287298
public static function resetKeys(controller:Null<Bool> = null) //Null = both, False = Keyboard, True = Controller
288299
{
@@ -342,8 +353,7 @@ class Preferences {
342353
data.judgementCounter = judgementCounter;
343354

344355
//Placing this in a separate save so that it can be manually deleted without removing your Score and stuff
345-
var save:FlxSave = new FlxSave();
346-
save.bind('controls_v3', CoolUtil.getSavePath());
356+
var save = getControlsSave();
347357
save.data.keyboard = keyBinds;
348358
save.data.gamepad = gamepadBinds;
349359
save.data.mobile = mobileBinds;

source/funkin/cloud/GoogleCloudSyncNotifier.hx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ class GoogleCloudSyncNotifier
1515
static var suppressNotifications:Bool = false;
1616
static var lastAttemptAt:Float = -10;
1717
static inline final COOLDOWN:Float = 0.8;
18+
static var lastLocalOverlayAt:Float = -9999;
19+
static inline final LOCAL_OVERLAY_COOLDOWN:Float = 4.0;
1820
static var mainThreadQueue:Array<Void->Void> = [];
1921
#if (target.threaded && sys)
2022
static var mainThreadQueueMutex:Mutex = new Mutex();
@@ -95,7 +97,7 @@ class GoogleCloudSyncNotifier
9597
{
9698
if (!AUTO_UPLOAD_ENABLED)
9799
{
98-
GlobalCloudSyncOverlay.showSavingLocal();
100+
showSavingLocalThrottled();
99101
return;
100102
}
101103

@@ -104,7 +106,7 @@ class GoogleCloudSyncNotifier
104106

105107
if (!googleLinked)
106108
{
107-
GlobalCloudSyncOverlay.showSavingLocal();
109+
showSavingLocalThrottled();
108110
return;
109111
}
110112

@@ -138,6 +140,16 @@ class GoogleCloudSyncNotifier
138140
});
139141
}
140142

143+
static function showSavingLocalThrottled():Void
144+
{
145+
var now = haxe.Timer.stamp();
146+
if (now - lastLocalOverlayAt < LOCAL_OVERLAY_COOLDOWN)
147+
return;
148+
149+
lastLocalOverlayAt = now;
150+
GlobalCloudSyncOverlay.showSavingLocal();
151+
}
152+
141153
static function runOnMainThread(callback:Void->Void):Void
142154
{
143155
if (callback == null)

source/funkin/input/Controls.hx

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -120,53 +120,32 @@ class Controls
120120
var result:Bool = (FlxG.keys.anyJustPressed(getKeyboardBind(key)) == true);
121121
if(result) controllerMode = false;
122122

123-
#if android
124-
var androidResult:Bool = (key == 'back' && FlxG.android.justPressed.BACK);
125-
#else
126-
var androidResult:Bool = false;
127-
#end
128-
129123
return result
130124
|| _myGamepadJustPressed(gamepadBinds[key]) == true
131125
|| mobileCJustPressed(mobileBinds[key]) == true
132-
|| touchPadJustPressed(mobileBinds[key]) == true
133-
|| androidResult;
126+
|| touchPadJustPressed(mobileBinds[key]) == true;
134127
}
135128

136129
public function pressed(key:String)
137130
{
138131
var result:Bool = (FlxG.keys.anyPressed(getKeyboardBind(key)) == true);
139132
if(result) controllerMode = false;
140133

141-
#if android
142-
var androidResult:Bool = (key == 'back' && FlxG.android.pressed.BACK);
143-
#else
144-
var androidResult:Bool = false;
145-
#end
146-
147134
return result
148135
|| _myGamepadPressed(gamepadBinds[key]) == true
149136
|| mobileCPressed(mobileBinds[key]) == true
150-
|| touchPadPressed(mobileBinds[key]) == true
151-
|| androidResult;
137+
|| touchPadPressed(mobileBinds[key]) == true;
152138
}
153139

154140
public function justReleased(key:String)
155141
{
156142
var result:Bool = (FlxG.keys.anyJustReleased(getKeyboardBind(key)) == true);
157143
if(result) controllerMode = false;
158144

159-
#if android
160-
var androidResult:Bool = (key == 'back' && FlxG.android.justReleased.BACK);
161-
#else
162-
var androidResult:Bool = false;
163-
#end
164-
165145
return result
166146
|| _myGamepadJustReleased(gamepadBinds[key]) == true
167147
|| mobileCJustReleased(mobileBinds[key]) == true
168-
|| touchPadJustReleased(mobileBinds[key]) == true
169-
|| androidResult;
148+
|| touchPadJustReleased(mobileBinds[key]) == true;
170149
}
171150

172151
public var controllerMode:Bool = false;

source/funkin/mobile/backend/TouchScroll.hx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ import flixel.math.FlxPoint;
1313
class TouchScroll
1414
{
1515
// Swipe detection thresholds
16-
public static inline var TAP_DISTANCE_THRESHOLD:Float = 15.0; // Pixels - if movement < this, it's a tap
17-
public static inline var TAP_TIME_THRESHOLD:Float = 0.3; // Seconds - max duration for a tap
16+
public static inline var TAP_DISTANCE_THRESHOLD:Float = 32.0; // Pixels - if movement < this, it's a tap
17+
public static inline var TAP_TIME_THRESHOLD:Float = 0.45; // Seconds - max duration for a tap
1818
public static inline var SWIPE_VELOCITY_THRESHOLD:Float = 50.0; // Pixels/second - minimum for swipe
19-
public static inline var AXIS_LOCK_RATIO:Float = 1.2; // Primary axis must exceed secondary axis by this ratio
19+
public static inline var AXIS_LOCK_RATIO:Float = 1.08; // Primary axis must exceed secondary axis by this ratio
2020
public static inline var MAX_VELOCITY:Float = 4200.0; // Clamp velocity to avoid huge spikes
2121
public static inline var VELOCITY_SMOOTHING:Float = 0.35; // Blend factor for stable velocity
2222
public static inline var MIN_DELTA:Float = 0.05; // Ignore tiny jitter deltas

source/funkin/modding/CustomState.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class CustomState extends MusicBeatState
9797
var plusVer:FlxText = new FlxText(12, FlxG.height - 24, 0, "Plus Engine v" + MainMenuState.plusEngineVersion, 12);
9898
plusVer.scrollFactor.set();
9999
plusVer.alpha = 0.8;
100-
plusVer.setFormat(Paths.font('NotoSans-Medium.ttf'), 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
100+
plusVer.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
101101
add(plusVer);
102102

103103
MusicBeatState.callOnGlobalScript('onStateCreate', [stateName]);

source/funkin/modding/ModsMenuState.hx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,13 @@ class ModsMenuState extends MusicBeatState
171171
var myX = bgList.x + bgList.width + 20;
172172
noModsTxt = new FlxText(myX, 0, FlxG.width - myX - 20, Language.getPhrase('no_mods_installed', "NO MODS INSTALLED\nPRESS {1} TO EXIT OR INSTALL A MOD", [daButton]), 48);
173173
if(FlxG.random.bool(0.1)) noModsTxt.text += '\nBITCH.'; //meanie
174-
noModsTxt.setFormat(Paths.font('NotoSans-Medium.ttf'), 32, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
174+
noModsTxt.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
175175
noModsTxt.borderSize = 2;
176176
add(noModsTxt);
177177
noModsTxt.screenCenter(Y);
178178

179179
var txt = new FlxText(bgList.x + 15, bgList.y + 15, bgList.width - 30, Language.getPhrase('no_mods_found', "No Mods found."), 16);
180-
txt.setFormat(Paths.font('NotoSans-Medium.ttf'), 16, FlxColor.WHITE);
180+
txt.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE);
181181
add(txt);
182182

183183
FlxG.autoPause = false;
@@ -204,12 +204,12 @@ class ModsMenuState extends MusicBeatState
204204
add(bgDescription);
205205

206206
modDesc = new FlxText(bgDescription.x + 15, bgDescription.y + 15, bgDescription.width - 30, "", 24);
207-
modDesc.setFormat(Paths.font('NotoSans-Medium.ttf'), 24, FlxColor.WHITE, LEFT);
207+
modDesc.setFormat(Paths.font("vcr.ttf"), 24, FlxColor.WHITE, LEFT);
208208
add(modDesc);
209209

210210
var myHeight = 100;
211211
modRestartText = new FlxText(bgDescription.x + 15, bgDescription.y + bgDescription.height - myHeight - 25, bgDescription.width - 30, Language.getPhrase('mod_restart', '* Moving or Toggling On/Off this Mod will restart the game.'), 16);
212-
modRestartText.setFormat(Paths.font('NotoSans-Medium.ttf'), 16, FlxColor.WHITE, RIGHT);
212+
modRestartText.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, RIGHT);
213213
add(modRestartText);
214214

215215
bgButtons = FlxSpriteUtil.drawRoundRectComplex(new FlxSprite(bgDescription.x, bgDescription.y + bgDescription.height - myHeight).makeGraphic(840, myHeight, FlxColor.TRANSPARENT), 0, 0, 840, myHeight, 0, 0, 15, 15, FlxColor.WHITE);
@@ -309,7 +309,7 @@ class ModsMenuState extends MusicBeatState
309309
add(bottomBG);
310310

311311
var bottomText = new FlxText(bottomBG.x, bottomBG.y + 4, FlxG.width, Language.getPhrase('mods_leave', "Press {1} To Leave", [daButton]), 16);
312-
bottomText.setFormat(Paths.font('NotoSans-Medium.ttf'), 16, FlxColor.WHITE, CENTER);
312+
bottomText.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, CENTER);
313313
bottomText.scrollFactor.set();
314314
add(bottomText);
315315

@@ -975,7 +975,7 @@ class ModItem extends FlxSpriteGroup
975975
add(icon);
976976

977977
text = new FlxText(95, 38, 230, "", 16);
978-
text.setFormat(Paths.font('NotoSans-Medium.ttf'), 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
978+
text.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
979979
text.borderSize = 2;
980980
text.y -= Std.int(text.height / 2);
981981
add(text);

source/funkin/modding/scripting/HScript.hx

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,76 @@ class HScript extends Iris
828828
Iris.error(Printer.errorToString(e, false), this.interp.posInfos());
829829
}
830830
});
831+
832+
// === Codename-style: Expose classes with full-qualified names for explicit imports ===
833+
// This allows scripts to use imports like: "import flixel.FlxG;" instead of just using global FlxG
834+
835+
// flixel.* namespaced classes
836+
set('flixel.FlxG', CustomFlxG);
837+
set('flixel.FlxSprite', flixel.FlxSprite);
838+
set('flixel.FlxCamera', flixel.FlxCamera);
839+
set('flixel.FlxObject', flixel.FlxObject);
840+
set('flixel.FlxState', flixel.FlxState);
841+
set('flixel.FlxSubState', flixel.FlxSubState);
842+
set('flixel.FlxBasic', flixel.FlxBasic);
843+
set('flixel.FlxGame', flixel.FlxGame);
844+
845+
// flixel.math.* namespace
846+
set('flixel.math.FlxMath', CustomFlxMath);
847+
set('flixel.math.FlxPoint', CustomFlxPoint);
848+
849+
// flixel.text.* namespace
850+
set('flixel.text.FlxText', flixel.text.FlxText);
851+
set('flixel.text.FlxText.FlxTextAlign', CustomFlxTextAlign);
852+
set('flixel.text.FlxTextAlign', CustomFlxTextAlign);
853+
set('flixel.text.FlxTextBorderStyle', CustomFlxTextBorderStyle);
854+
855+
// flixel.group.* namespace
856+
set('flixel.group.FlxGroup', flixel.group.FlxGroup);
857+
858+
// flixel.util.* namespace
859+
set('flixel.util.FlxColor', CustomFlxColor);
860+
set('flixel.util.FlxAxes', CustomFlxAxes);
861+
set('flixel.util.FlxPoint', CustomFlxPoint);
862+
set('flixel.util.FlxTimer', flixel.util.FlxTimer);
863+
set('flixel.util.FlxTween', flixel.tweens.FlxTween);
864+
set('flixel.util.FlxEase', flixel.tweens.FlxEase);
865+
set('flixel.util.FlxSave', flixel.util.FlxSave);
866+
set('flixel.util.FlxSpriteUtil', flixel.util.FlxSpriteUtil);
867+
set('flixel.util.FlxStringUtil', flixel.util.FlxStringUtil);
868+
set('flixel.util.FlxArrayUtil', flixel.util.FlxArrayUtil);
869+
870+
// flixel.tweens.* namespace
871+
set('flixel.tweens.FlxTween', flixel.tweens.FlxTween);
872+
set('flixel.tweens.FlxEase', flixel.tweens.FlxEase);
873+
874+
// flixel.effects.* namespace
875+
set('flixel.effects.FlxFlicker', flixel.effects.FlxFlicker);
876+
877+
// flixel.input.* namespace
878+
set('flixel.input.FlxInput', flixel.input.FlxInput);
879+
set('flixel.input.FlxKey', flixel.input.keyboard.FlxKey.fromStringMap);
880+
set('flixel.input.keyboard.FlxKey', flixel.input.keyboard.FlxKey.fromStringMap);
881+
set('flixel.input.gamepad.FlxGamepadInputID', CustomFlxGamepadInputID);
882+
883+
// flixel.system.* namespace
884+
set('flixel.system.scaleModes.RatioScaleMode', flixel.system.scaleModes.RatioScaleMode);
885+
886+
// flixel.addons.* namespace
887+
set('flixel.addons.transition.FlxTransitionableState', flixel.addons.transition.FlxTransitionableState);
888+
889+
// openfl.display.* - Critical for bitmap/shape manipulation (Camera.hx needs these)
890+
set('openfl.display.BitmapData', openfl.display.BitmapData);
891+
set('openfl.display.Shape', openfl.display.Shape);
892+
893+
// Haxe std library + globals
894+
set('haxe.Json', haxe.Json);
895+
set('haxe.ds.IntMap', haxe.ds.IntMap);
896+
set('haxe.ds.StringMap', haxe.ds.StringMap);
897+
set('haxe.ds.ObjectMap', haxe.ds.ObjectMap);
898+
899+
// Global functions/classes accessible without full path
900+
set('StringTools', StringTools);
831901
}
832902

833903
#if LUA_ALLOWED

source/funkin/modding/scripting/psychlua/DebugLuaText.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class DebugLuaText extends FlxText
66
public function new() {
77
super(10, 10, FlxG.width - 20, '', 16);
88

9-
setFormat(Paths.font('NotoSans-Medium.ttf'), 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
9+
setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
1010
scrollFactor.set();
1111
borderSize = 1;
1212
}

source/funkin/modding/scripting/psychlua/TextFunctions.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class TextFunctions
1010

1111
LuaUtils.destroyObject(tag);
1212
var leText:FlxText = new FlxText(x, y, width, text, 16);
13-
leText.setFormat(Paths.font('NotoSans-Medium.ttf'), 16, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
13+
leText.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
1414
if(PlayState.instance != null) leText.cameras = [PlayState.instance.camHUD];
1515
leText.scrollFactor.set();
1616
leText.borderSize = 2;

0 commit comments

Comments
 (0)