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.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.Get(); app.SetSetting( appSetting.id, slider.mode.GetSerializedValue( slider.mainValue ) ); appSetting.ApplyValue( app ); } ); } }