using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; //Для экрана public class SettingGroupView : MonoBehaviour { [Header("Layout ссылки")] [SerializeField] private TextMeshProUGUI TitleLabel; [SerializeField] private Image IconImage; [SerializeField] private RectTransform SettingsContainer; [Header("Параметры Layout'а")] [SerializeField] private float HeaderHeight = 120; [SerializeField] private float SettingHeight = 50; [SerializeField] private float Spacing = 20; [SerializeField] private float FooterHeight = 20; [Header("Перфабы")] [SerializeField] private SettingView SettingViewPrefab; public List GeneratedSettingViews { get; private set; } public void Generate(SettingsGroupDTO group) { this.name = "(group) " + group.Name; TitleLabel.text = group.Name; IconImage.sprite = LoadIcon(group.IconPath); GeneratedSettingViews = new(); foreach (var setting in group.Settings) { var go = Instantiate(SettingViewPrefab.gameObject, SettingsContainer); var settingView = go.GetComponent(); settingView.Generate(setting); GeneratedSettingViews.Add(settingView); } SetSizesAndPositions(group); } private void SetSizesAndPositions(SettingsGroupDTO group) { var thisRect = GetComponent(); //IconImage.rectTransform.sizeDelta = new Vector2(TitleHeight, TitleHeight); //Настройка заголовка var titleWidth = thisRect.sizeDelta.x - HeaderHeight - Spacing * 2; //TitleLabel.rectTransform.sizeDelta = new Vector2(titleWidth, TitleHeight); //TitleLabel.rectTransform.anchoredPosition = new Vector2(2 * Spacing + TitleHeight, -Spacing); //Настройка контейнера настроек //float settingsContainerHeight = group.Settings.Count * (SettingHeight + Spacing) - Spacing; float settingsContainerHeight = GeneratedSettingViews.Count * (SettingHeight + Spacing) - Spacing; SettingsContainer.sizeDelta = new Vector2(SettingsContainer.sizeDelta.x, settingsContainerHeight); SettingsContainer.anchoredPosition = new Vector2(x: SettingsContainer.anchoredPosition.x, y: -HeaderHeight - Spacing); //Настройка родиткльского контейнера thisRect.sizeDelta = new Vector2(thisRect.sizeDelta.x, HeaderHeight + SettingsContainer.sizeDelta.y + FooterHeight); } private Sprite LoadIcon(string iconPath) { if (string.IsNullOrEmpty(iconPath)) return null; // Пытаемся загрузить из Resources Sprite loadedSprite = Resources.Load(iconPath); if (loadedSprite == null) { Debug.LogWarning($"Не удалось загрузить иконку по пути: {iconPath}"); } return loadedSprite; } }