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 TitleHeight = 70; [SerializeField] private float SettingHeight = 50; [SerializeField] private float Spacing = 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 - TitleHeight - 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; SettingsContainer.sizeDelta = new Vector2(thisRect.sizeDelta.x - 2 * Spacing, settingsContainerHeight); SettingsContainer.anchoredPosition = new Vector2(Spacing, -TitleHeight - 2 * Spacing); //Настройка родиткльского контейнера thisRect.sizeDelta = new Vector2(thisRect.sizeDelta.x, TitleHeight + SettingsContainer.sizeDelta.y + 2 * Spacing); } 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; } }