Files
AZTECH_WB/Assets/Scripts/UI/SettingPanel/ControlSettingContent.cs

122 lines
3.6 KiB
C#
Raw Permalink Normal View History

using AZTECHWB.Core;
using AZTECHWB.Management;
2026-01-09 10:43:40 +09:00
using System.Collections.Generic;
using UnityEngine;
namespace AZTECHWB.UI
2026-01-09 10:43:40 +09:00
{
public class ControlSettingContent : MonoBehaviour
2026-01-09 10:43:40 +09:00
{
private OrbitalController orbitalController;
private OptionManager optionManager;
private Dictionary<string, SliderInputField> controls = new();
2026-01-09 10:43:40 +09:00
private Dictionary<string, string> initialValues = new();
private Dictionary<string, string> 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;
2026-01-09 10:43:40 +09:00
optionManager = FindAnyObjectByType<OptionManager>();
foreach (var field in GetComponentsInChildren<SliderInputField>())
2026-01-09 10:43:40 +09:00
{
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());
2026-01-09 10:43:40 +09:00
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());
2026-01-09 10:43:40 +09:00
}
}
}