using AZTECHWB.Core; using AZTECHWB.Management; using System.Collections.Generic; using UnityEngine; namespace AZTECHWB.UI { public class ControlSettingContent : MonoBehaviour { private OrbitalController orbitalController; private OptionManager optionManager; private Dictionary controls = new(); private Dictionary initialValues = new(); private Dictionary workingValues = new(); public float minMoveSpeed; public float maxMoveSpeed; public float minRotateSpeed; public float maxRotateSpeed; public float minZoomSpeed; public float maxZoomSpeed; public void Init() { orbitalController = AZTECHAppMain.Instance.cameraController; optionManager = FindAnyObjectByType(); foreach (var field in GetComponentsInChildren()) { field.SetSliderInputField(); controls.Add(field.name, field); } optionManager.onCompletedLoadOption += ApplyIniToUI; } public void ApplyIniToUI() { initialValues.Clear(); foreach (var key in controls.Keys) { string value = optionManager.GetValue("Control", key, GetDefaultValue(key)); initialValues[key] = value; SetupSliderRange(key); controls[key].SetText(value); } } public void Apply() { workingValues.Clear(); foreach (var kv in controls) { float v = float.Parse(kv.Value.GetValue()); v = ClampValue(kv.Key, v); string value = v.ToString("0.##"); workingValues[kv.Key] = value; optionManager.SetValue("Control", kv.Key, value); kv.Value.SetText(value); } ApplyToCamera(); } void SetupSliderRange(string key) { var slider = controls[key].Slider; switch (key) { case "MoveSpeed": slider.minValue = minMoveSpeed; slider.maxValue = maxMoveSpeed; break; case "RotateSpeed": slider.minValue = minRotateSpeed; slider.maxValue = maxRotateSpeed; break; case "ZoomSpeed": slider.minValue = minZoomSpeed; slider.maxValue = maxZoomSpeed; break; } } float ClampValue(string key, float value) { return key switch { "MoveSpeed" => Mathf.Clamp(value, minMoveSpeed, maxMoveSpeed), "RotateSpeed" => Mathf.Clamp(value, minRotateSpeed, maxRotateSpeed), "ZoomSpeed" => Mathf.Clamp(value, minZoomSpeed, maxZoomSpeed), _ => value }; } string GetDefaultValue(string key) { return key switch { "MoveSpeed" => "5", "RotateSpeed" => "90", "ZoomSpeed" => "5", _ => "1" }; } void ApplyToCamera() { orbitalController.moveSpeed = float.Parse(controls["MoveSpeed"].GetValue()); orbitalController.rotateSpeed = float.Parse(controls["RotateSpeed"].GetValue()); orbitalController.zoomSpeed = float.Parse(controls["ZoomSpeed"].GetValue()); } } }