rokojori_action_library/Runtime/UI/UIAppSettings/Handlers/UINumberAppSettingHandler.cs

72 lines
1.6 KiB
C#

using Godot;
using Rokojori;
using System.Collections.Generic;
using System.Linq;
namespace Rokojori;
[Tool]
[GlobalClass]
public partial class UINumberAppSettingHandler:UIAppSettingHandler
{
[Export]
public UIValueSlider slider;
public override void _Ready()
{
Initialize();
}
public override void FocusHandler()
{
slider.CallDeferred( slider.GrabFocus );
}
public override void LoadSetting()
{
var app = Unique<App>.Get();
var value = app.GetSetting( appSetting );
var normalized = slider.mode.FromSerializedToNormalized( value );
slider.SetSliderMainValue( normalized );
this.LogInfo( "Set setting", appSetting.title.currentValue, value, normalized );
}
public void Initialize()
{
UIValueSliderMode mode = null;
if ( appSetting is ResolutionScalingSetting rss )
{
var resFloatMode = new UIResolutionScaleMode();
resFloatMode.CopyFrom( appSetting as NumberAppSetting );
resFloatMode.userScaleToResolutionScale = rss.userScaleToResolutionScale;
mode = resFloatMode;
}
else
{
mode = UIFloatValueMode.From( appSetting as NumberAppSetting );
}
slider.mode = mode;
slider._onSliderChange.AddAction(
( v2 )=>
{
if ( appSetting is ResolutionScalingSetting )
{
var resFloatMode = slider.mode as UIResolutionScaleMode;
resFloatMode.windowSize = GetWindow().Size;
}
var app = Unique<App>.Get();
app.SetSetting( appSetting.id, slider.mode.GetSerializedValue( slider.mainValue ) );
appSetting.ApplyValue( app );
}
);
}
}