mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2024-12-22 21:26:49 +00:00
add preference option for framerate capping
This commit is contained in:
parent
bfb19cc67e
commit
721cecd271
|
@ -67,14 +67,9 @@ class Main extends Sprite
|
||||||
function init(?event:Event):Void
|
function init(?event:Event):Void
|
||||||
{
|
{
|
||||||
#if web
|
#if web
|
||||||
untyped js.Syntax.code("
|
// set this variable (which is a function) from the lime version at lime/_internal/backend/html5/HTML5Application.hx
|
||||||
window.requestAnimationFrame = function(callback, element) {
|
// The framerate cap will more thoroughly initialize via Preferences in InitState.hx
|
||||||
var currTime = new Date().getTime();
|
funkin.Preferences.lockedFramerateFunction = untyped js.Syntax.code("window.requestAnimationFrame");
|
||||||
var timeToCall = 0;
|
|
||||||
var id = window.setTimeout(function() { callback(currTime + timeToCall); },
|
|
||||||
timeToCall);
|
|
||||||
return id;
|
|
||||||
}");
|
|
||||||
#end
|
#end
|
||||||
|
|
||||||
if (hasEventListener(Event.ADDED_TO_STAGE))
|
if (hasEventListener(Event.ADDED_TO_STAGE))
|
||||||
|
|
|
@ -128,6 +128,48 @@ class Preferences
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static var unlockedFramerate(get, set):Bool;
|
||||||
|
|
||||||
|
static function get_unlockedFramerate():Bool
|
||||||
|
{
|
||||||
|
return Save?.instance?.options?.unlockedFramerate;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function set_unlockedFramerate(value:Bool):Bool
|
||||||
|
{
|
||||||
|
if (value != Save.instance.options.unlockedFramerate)
|
||||||
|
{
|
||||||
|
#if web
|
||||||
|
toggleFramerateCap(value);
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
|
||||||
|
var save:Save = Save.instance;
|
||||||
|
save.options.unlockedFramerate = value;
|
||||||
|
save.flush();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if web
|
||||||
|
// We create a haxe version of this just for readability.
|
||||||
|
// We use these to override `window.requestAnimationFrame` in Javascript to uncap the framerate / "animation" request rate
|
||||||
|
// Javascript is crazy since u can just do stuff like that lol
|
||||||
|
|
||||||
|
public static function unlockedFramerateFunction(callback, element)
|
||||||
|
{
|
||||||
|
var currTime = Date.now().getTime();
|
||||||
|
var timeToCall = 0;
|
||||||
|
var id = js.Browser.window.setTimeout(function() {
|
||||||
|
callback(currTime + timeToCall);
|
||||||
|
}, timeToCall);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lime already implements their own little framerate cap, so we can just use that
|
||||||
|
// This also gets set in the init function in Main.hx, since we need to definitely override it
|
||||||
|
public static var lockedFramerateFunction = untyped js.Syntax.code("window.requestAnimationFrame");
|
||||||
|
#end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the user's preferences from the save data and apply them.
|
* Loads the user's preferences from the save data and apply them.
|
||||||
*/
|
*/
|
||||||
|
@ -137,6 +179,17 @@ class Preferences
|
||||||
FlxG.autoPause = Preferences.autoPause;
|
FlxG.autoPause = Preferences.autoPause;
|
||||||
// Apply the debugDisplay setting (enables the FPS and RAM display).
|
// Apply the debugDisplay setting (enables the FPS and RAM display).
|
||||||
toggleDebugDisplay(Preferences.debugDisplay);
|
toggleDebugDisplay(Preferences.debugDisplay);
|
||||||
|
#if web
|
||||||
|
toggleFramerateCap(Preferences.unlockedFramerate);
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
|
||||||
|
static function toggleFramerateCap(unlocked:Bool):Void
|
||||||
|
{
|
||||||
|
#if web
|
||||||
|
var framerateFunction = unlocked ? unlockedFramerateFunction : lockedFramerateFunction;
|
||||||
|
untyped js.Syntax.code("window.requestAnimationFrame = framerateFunction;");
|
||||||
|
#end
|
||||||
}
|
}
|
||||||
|
|
||||||
static function toggleDebugDisplay(show:Bool):Void
|
static function toggleDebugDisplay(show:Bool):Void
|
||||||
|
|
|
@ -97,6 +97,7 @@ class Save
|
||||||
autoPause: true,
|
autoPause: true,
|
||||||
inputOffset: 0,
|
inputOffset: 0,
|
||||||
audioVisualOffset: 0,
|
audioVisualOffset: 0,
|
||||||
|
unlockedFramerate: false,
|
||||||
|
|
||||||
controls:
|
controls:
|
||||||
{
|
{
|
||||||
|
@ -1171,6 +1172,12 @@ typedef SaveDataOptions =
|
||||||
*/
|
*/
|
||||||
var audioVisualOffset:Int;
|
var audioVisualOffset:Int;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If we want the framerate to be unlocked on HTML5.
|
||||||
|
* @default `false
|
||||||
|
*/
|
||||||
|
var unlockedFramerate:Bool;
|
||||||
|
|
||||||
var controls:
|
var controls:
|
||||||
{
|
{
|
||||||
var p1:
|
var p1:
|
||||||
|
|
|
@ -72,6 +72,12 @@ class PreferencesMenu extends Page
|
||||||
createPrefItemCheckbox('Auto Pause', 'Automatically pause the game when it loses focus', function(value:Bool):Void {
|
createPrefItemCheckbox('Auto Pause', 'Automatically pause the game when it loses focus', function(value:Bool):Void {
|
||||||
Preferences.autoPause = value;
|
Preferences.autoPause = value;
|
||||||
}, Preferences.autoPause);
|
}, Preferences.autoPause);
|
||||||
|
|
||||||
|
#if web
|
||||||
|
createPrefItemCheckbox('Unlocked Framerate', 'Enable to unlock the framerate', function(value:Bool):Void {
|
||||||
|
Preferences.unlockedFramerate = value;
|
||||||
|
}, Preferences.unlockedFramerate);
|
||||||
|
#end
|
||||||
}
|
}
|
||||||
|
|
||||||
override function update(elapsed:Float):Void
|
override function update(elapsed:Float):Void
|
||||||
|
|
Loading…
Reference in a new issue