sea-battle-vr/Assets/Scripts/Settings/Views/SettingGroupView.cs

82 lines
2.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}