mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2025-05-22 15:11:11 +00:00
use new numberpreferenceitem
This commit is contained in:
parent
0a7902c4b4
commit
927e37b35b
|
@ -54,7 +54,7 @@ class PreferencesMenu extends Page
|
||||||
#if !web
|
#if !web
|
||||||
createPrefItemNumber('FPS', 'The framerate that the game is running on', function(value:Float) {
|
createPrefItemNumber('FPS', 'The framerate that the game is running on', function(value:Float) {
|
||||||
Preferences.framerate = Std.int(value);
|
Preferences.framerate = Std.int(value);
|
||||||
}, Preferences.framerate, 60, 360, 1, 0);
|
}, null, Preferences.framerate, 60, 360, 1, 0);
|
||||||
#end
|
#end
|
||||||
createPrefItemCheckbox('Naughtyness', 'Toggle displaying raunchy content', function(value:Bool):Void {
|
createPrefItemCheckbox('Naughtyness', 'Toggle displaying raunchy content', function(value:Bool):Void {
|
||||||
Preferences.naughtyness = value;
|
Preferences.naughtyness = value;
|
||||||
|
@ -120,10 +120,10 @@ class PreferencesMenu extends Page
|
||||||
preferenceItems.add(checkbox);
|
preferenceItems.add(checkbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createPrefItemNumber(prefName:String, prefDesc:String, onChange:Float->Void, defaultValue:Float, min:Float, max:Float, step:Float,
|
function createPrefItemNumber(prefName:String, prefDesc:String, onChange:Float->Void, ?valueFormatter:Float->String, defaultValue:Int, min:Int, max:Int,
|
||||||
precision:Int):Void
|
step:Float = 0.1, precision:Int):Void
|
||||||
{
|
{
|
||||||
var item = new NumberPreferenceItem(0, (120 * items.length) + 30, prefName, defaultValue, min, max, step, precision, onChange);
|
var item = new NumberPreferenceItem(0, (120 * items.length) + 30, prefName, defaultValue, min, max, step, precision, onChange, valueFormatter);
|
||||||
items.addItem(prefName, item);
|
items.addItem(prefName, item);
|
||||||
preferenceItems.add(item.lefthandText);
|
preferenceItems.add(item.lefthandText);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,16 +14,35 @@ class NumberPreferenceItem extends TextMenuItem
|
||||||
return PlayerSettings.player1.controls;
|
return PlayerSettings.player1.controls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Widgets
|
||||||
public var lefthandText:AtlasText;
|
public var lefthandText:AtlasText;
|
||||||
|
|
||||||
|
// Constants
|
||||||
|
static final HOLD_DELAY:Float = 0.3; // seconds
|
||||||
|
static final CHANGE_RATE:Float = 0.08; // seconds
|
||||||
|
|
||||||
|
// Constructor-initialized variables
|
||||||
public var currentValue:Float;
|
public var currentValue:Float;
|
||||||
public var min:Float;
|
public var min:Float;
|
||||||
public var max:Float;
|
public var max:Float;
|
||||||
public var step:Float;
|
public var step:Float;
|
||||||
public var precision:Int;
|
public var precision:Int;
|
||||||
public var onChangeCallback:Null<Float->Void>;
|
public var onChangeCallback:Null<Float->Void>;
|
||||||
|
public var valueFormatter:Null<Float->String>;
|
||||||
|
|
||||||
public function new(x:Float, y:Float, name:String, defaultValue:Float, min:Float, max:Float, step:Float, precision:Int, ?callback:Float->Void):Void
|
// Variables
|
||||||
|
var holdDelayTimer:Float = HOLD_DELAY; // seconds
|
||||||
|
var changeRateTimer:Float = 0.0; // seconds
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param min Minimum value (example: 0)
|
||||||
|
* @param max Maximum value (example: 100)
|
||||||
|
* @param step The value to increment/decrement by (example: 10)
|
||||||
|
* @param callback Will get called every time the user changes the setting; use this to apply/save the setting.
|
||||||
|
* @param valueFormatter Will get called every time the game needs to display the float value; use this to change how the displayed string looks
|
||||||
|
*/
|
||||||
|
public function new(x:Float, y:Float, name:String, defaultValue:Float, min:Float, max:Float, step:Float, precision:Int, ?callback:Float->Void,
|
||||||
|
?valueFormatter:Float->String):Void
|
||||||
{
|
{
|
||||||
super(x, y, name, function() {
|
super(x, y, name, function() {
|
||||||
callback(this.currentValue);
|
callback(this.currentValue);
|
||||||
|
@ -38,14 +57,9 @@ class NumberPreferenceItem extends TextMenuItem
|
||||||
this.step = step;
|
this.step = step;
|
||||||
this.precision = precision;
|
this.precision = precision;
|
||||||
this.onChangeCallback = callback;
|
this.onChangeCallback = callback;
|
||||||
|
this.valueFormatter = valueFormatter;
|
||||||
}
|
}
|
||||||
|
|
||||||
static final HOLD_DELAY:Float = 0.5; // seconds
|
|
||||||
static final CHANGE_RATE:Float = 0.02; // seconds
|
|
||||||
|
|
||||||
var holdDelayTimer:Float = HOLD_DELAY; // seconds
|
|
||||||
var changeRateTimer:Float = 0.0; // seconds
|
|
||||||
|
|
||||||
override function update(elapsed:Float):Void
|
override function update(elapsed:Float):Void
|
||||||
{
|
{
|
||||||
super.update(elapsed);
|
super.update(elapsed);
|
||||||
|
@ -82,21 +96,36 @@ class NumberPreferenceItem extends TextMenuItem
|
||||||
changeRateTimer = CHANGE_RATE;
|
changeRateTimer = CHANGE_RATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldDecrease) currentValue -= step;
|
// Actually increasing/decreasing the value
|
||||||
else if (shouldIncrease) currentValue += step;
|
if (shouldDecrease)
|
||||||
currentValue = currentValue.clamp(min, max);
|
|
||||||
if (onChangeCallback != null && (shouldIncrease || shouldDecrease))
|
|
||||||
{
|
{
|
||||||
onChangeCallback(currentValue);
|
var isBelowMin:Bool = currentValue - step < min;
|
||||||
|
currentValue = (currentValue - step).clamp(min, max);
|
||||||
|
if (onChangeCallback != null && !isBelowMin) onChangeCallback(currentValue);
|
||||||
|
}
|
||||||
|
else if (shouldIncrease)
|
||||||
|
{
|
||||||
|
var isAboveMax:Bool = currentValue + step > max;
|
||||||
|
currentValue = (currentValue + step).clamp(min, max);
|
||||||
|
if (onChangeCallback != null && !isAboveMax) onChangeCallback(currentValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lefthandText.text = formatted(currentValue);
|
lefthandText.text = formatted(currentValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Turns the float into a string */
|
||||||
function formatted(value:Float):String
|
function formatted(value:Float):String
|
||||||
{
|
{
|
||||||
return '${toFixed(value)}';
|
var float:Float = toFixed(value);
|
||||||
|
if (valueFormatter != null)
|
||||||
|
{
|
||||||
|
return valueFormatter(float);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return '${float}';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function toFixed(value:Float):Float
|
function toFixed(value:Float):Float
|
||||||
|
|
Loading…
Reference in a new issue