using UnityEngine; using TMPro; // НАСТРОЙКИ: звук, вибрация, уведомления, графика, частота кадров, сохранение, сброс, о игре. public class SettingsPanel : BasePanel { // Ползунки не должны пересоздаваться посреди перетаскивания protected override bool RebuildOnChange { get { return false; } } static readonly string[] QualityNames = { "Низкое", "Среднее", "Высокое" }; protected override void Build(RectTransform root) { var d = GP.Data; var list = ScrollList(root); // --- Звук --- var sound = UIKit.Card(list); ProfilePanel.Header(sound, "Звук"); SliderRow(sound, "Музыка", d.musicVolume, v => { d.musicVolume = v; GP.ApplySettings(); GP.SaveSoon(); }); SliderRow(sound, "Звуки", d.soundVolume, v => { d.soundVolume = v; GP.ApplySettings(); GP.SaveSoon(); }); // --- Общие --- var general = UIKit.Card(list); ProfilePanel.Header(general, "Общие"); SwitchRow(general, "Вибрация", d.vibration, v => { d.vibration = v; GP.SaveSoon(); if (v) GP.Vibrate(); }); SwitchRow(general, "Уведомления", d.notifications, v => { d.notifications = v; GP.SaveSoon(); }); // --- Графика --- var gfx = UIKit.Card(list); ProfilePanel.Header(gfx, "Графика"); UIKit.Text(gfx, "Качество", 28, UIKit.Theme.TextDim); UIKit.Tabs(gfx, QualityNames, d.quality, i => { d.quality = i; GP.ApplySettings(); GP.SaveSoon(); RequestRebuild(); }); SwitchRow(gfx, "60 кадров/сек (больше расход батареи)", d.fps60, v => { d.fps60 = v; GP.ApplySettings(); GP.SaveSoon(); }); // --- Игра --- var game = UIKit.Card(list); ProfilePanel.Header(game, "Игра"); UIKit.Button(game, "Сохранить игру сейчас", UIKit.Theme.Blue, () => { if (SaveManager.Instance != null) SaveManager.Instance.SaveGame(); GP.Save(); UIKit.Toast("Игра сохранена"); }, -1, 90); UIKit.Button(game, "Сбросить весь прогресс", UIKit.Theme.Red, () => UIKit.Confirm("Сбросить прогресс?", "Удалятся все здания, ресурсы, войска, герой и задания. Отменить это нельзя.", "Сбросить", () => { GP.ResetAll(); if (UIPanelManager.Instance != null) UIPanelManager.Instance.CloseAll(); }), -1, 90); // --- О игре --- var about = UIKit.Card(list); ProfilePanel.Header(about, "О игре"); ProfilePanel.KV(about, "Версия", Application.version); ProfilePanel.KV(about, "ID игрока", d.playerId); UIKit.Text(about, "MVP1 • команда 4bit", 24, UIKit.Theme.TextDim, TextAlignmentOptions.Center); } static void SliderRow(Transform parent, string label, float value, System.Action onChange) { var r = UIKit.Row(parent, 70, 20); var t = UIKit.Text(r, label, 28); UIKit.Size(t, 200); var pct = UIKit.Text(r, Mathf.RoundToInt(value * 100) + "%", 26, UIKit.Theme.TextDim, TextAlignmentOptions.Right); UIKit.Slider(r, value, v => { pct.text = Mathf.RoundToInt(v * 100) + "%"; onChange(v); }); pct.transform.SetAsLastSibling(); UIKit.Size(pct, 90); } static void SwitchRow(Transform parent, string label, bool value, System.Action onChange) { var r = UIKit.Row(parent, 76, 20); var t = UIKit.Text(r, label, 28); UIKit.Size(t, -1, -1, 1); UIKit.Switch(r, value, onChange); } }