Files
BlueArchiveMiniGame/Assets/Scripts/HotUpdate/Main/UI/SettingWindow/DisplayPanel.cs

141 lines
3.9 KiB
C#
Raw Normal View History

2025-09-17 18:56:28 +08:00
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
using TMPro;
using System.Collections;
2025-09-29 07:45:07 +08:00
public class DisplayPanel : UIBasePanel, ISettingsPanel
2025-09-17 18:56:28 +08:00
{
[Header("UI References")]
[SerializeField] private TMP_Dropdown resolutionDropdown;
[SerializeField] private Toggle fullscreenToggle;
[SerializeField] private Toggle borderlessToggle;
[SerializeField] private TMP_Dropdown displayDropdown;
private Resolution[] resolutions;
private void Awake()
{
InitializeResolutionDropdown();
InitializeDisplayDropdown();
}
private void OnEnable()
{
StartCoroutine(InitializeDelayed());
}
IEnumerator InitializeDelayed()
{
yield return null;
2025-09-29 07:45:07 +08:00
var settings = SettingsManager.Inst.CurrentSettings;
2025-09-17 18:56:28 +08:00
resolutionDropdown.SetValueWithoutNotify(settings.resolutionIndex);
fullscreenToggle.SetIsOnWithoutNotify(settings.fullscreen);
borderlessToggle.SetIsOnWithoutNotify(settings.borderless);
displayDropdown.SetValueWithoutNotify(settings.displayIndex);
UpdateBorderlessToggleState();
}
private void InitializeResolutionDropdown()
{
resolutions = Screen.resolutions;
resolutionDropdown.ClearOptions();
var options = new List<string>();
for (int i = 0; i < resolutions.Length; i++)
{
int refreshRate = Mathf.RoundToInt((float)resolutions[i].refreshRateRatio.value);
options.Add($"{resolutions[i].width}x{resolutions[i].height} {refreshRate}Hz");
}
resolutionDropdown.AddOptions(options);
}
private void InitializeDisplayDropdown()
{
displayDropdown.ClearOptions();
var options = new List<string>();
for (int i = 0; i < Display.displays.Length; i++)
{
options.Add($"Display {i + 1}");
}
displayDropdown.AddOptions(options);
}
public void OnResolutionChanged(int index)
{
2025-09-29 07:45:07 +08:00
SettingsManager.Inst.CurrentSettings.resolutionIndex = index;
2025-09-17 18:56:28 +08:00
ApplySetResolution();
}
public void OnFullscreenChanged(bool value)
{
2025-09-29 07:45:07 +08:00
SettingsManager.Inst.CurrentSettings.fullscreen = value;
2025-09-17 18:56:28 +08:00
UpdateBorderlessToggleState();
ApplySetResolution();
}
public void OnBorderlessChanged(bool value)
{
2025-09-29 07:45:07 +08:00
SettingsManager.Inst.CurrentSettings.borderless = value;
2025-09-17 18:56:28 +08:00
ApplySetResolution();
}
public void OnDisplayChanged(int index)
{
2025-09-29 07:45:07 +08:00
SettingsManager.Inst.CurrentSettings.displayIndex = index;
2025-09-17 18:56:28 +08:00
ApplySetDisplay();
}
private void UpdateBorderlessToggleState()
{
borderlessToggle.interactable = fullscreenToggle.isOn;
if (!fullscreenToggle.isOn)
borderlessToggle.isOn = false;
ApplySetResolution();
}
public void ApplySettings()
{
ApplySetResolution();
ApplySetDisplay();
}
void ApplySetResolution()
{
if (resolutions == null) return;
2025-09-29 07:45:07 +08:00
var settings = SettingsManager.Inst.CurrentSettings;
2025-09-18 10:15:40 +08:00
Resolution res = resolutions[resolutions.Length-1];
if (settings.resolutionIndex < resolutions.Length && settings.resolutionIndex>=0)
2025-09-17 18:56:28 +08:00
{
res = resolutions[settings.resolutionIndex];
}
FullScreenMode mode = settings.borderless ?
FullScreenMode.FullScreenWindow :
(settings.fullscreen ? FullScreenMode.ExclusiveFullScreen : FullScreenMode.Windowed);
Screen.SetResolution(
res.width,
res.height,
mode,
res.refreshRateRatio
);
}
void ApplySetDisplay()
{
2025-09-29 07:45:07 +08:00
var settings = SettingsManager.Inst.CurrentSettings;
2025-09-17 18:56:28 +08:00
if (settings.displayIndex > 0 && settings.displayIndex < Display.displays.Length)
{
Display.displays[settings.displayIndex].Activate();
}
}
2025-09-29 07:45:07 +08:00
public void ResetToDefault()
{
throw new System.NotImplementedException();
}
2025-09-17 18:56:28 +08:00
}