82 lines
2.8 KiB
C#
82 lines
2.8 KiB
C#
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<SettingView> 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>();
|
||
settingView.Generate(setting);
|
||
|
||
GeneratedSettingViews.Add(settingView);
|
||
}
|
||
|
||
SetSizesAndPositions(group);
|
||
|
||
}
|
||
|
||
private void SetSizesAndPositions(SettingsGroupDTO group)
|
||
{
|
||
var thisRect = GetComponent<RectTransform>();
|
||
|
||
//Настройка иконки
|
||
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<Sprite>(iconPath);
|
||
|
||
if (loadedSprite == null)
|
||
{
|
||
Debug.LogWarning($"Не удалось загрузить иконку по пути: {iconPath}");
|
||
}
|
||
|
||
return loadedSprite;
|
||
}
|
||
|
||
}
|