Files
beyond/Assets/Scripts/UI/SkillsMenuController.cs
2024-11-20 15:21:28 +01:00

109 lines
3.5 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Beyond
{
public class SkillsMenuController : MonoBehaviour
{
[SerializeField]
private bEquipArea spellsArea;
public bItemWindow itemPicker;
public SkillSlot skillSlotPrefab;
private List<SkillSlot> skillSlots = new List<SkillSlot>();
public RectTransform skillsPickerRect, skillsDescriptionRect;
private SkillSlot selectedSlot;
[SerializeField] private Image skillImage, skillBackgroundQuanta, levelImage;
[SerializeField] private TMP_Text skillDescription, skillTitle;
[SerializeField] private Sprite noSkillImage;
[SerializeField] private List<Sprite> levelImages;
public void RefreshSpellsWindow()
{
LoadSkills();
if (skillSlots.Count > 0)
{
SelectSlot(skillSlots[0]);
}
}
private void LoadSkills()
{
//could optimize here
while (skillSlots.Count > 0)
{
Destroy(skillSlots[0].gameObject);
skillSlots.RemoveAt(0);
}
List<CompleteSkillInfo> unlockedSkills = SkillsManager.instance.GetAllUnlockedSkills();
if (unlockedSkills.Count <= 0)
{
DisableDescriptionObjects();
return;
}
else
{
EnableDescriptionObjects();
}
unlockedSkills.ForEach(skill =>
{
SkillSlot clone = Instantiate(skillSlotPrefab, skillsPickerRect);
clone.title.text = skill.skillInfo.descriptioryName;// + " lvl. " + skill.currentLevel;
clone.description = skill.skillInfo.description;
clone.image.sprite = Resources.Load<Sprite>(skill.skillInfo.imagePath);
clone.quantaImage.sprite = Resources.Load<Sprite>(skill.skillInfo.quantaImagePath);
clone.quantaBackgroundImage = Resources.Load<Sprite>(skill.skillInfo.quantaBackgroundImagePath);
clone.levelImage.sprite = levelImages[skill.currentLevel - 1];
clone.skillType = skill.skillInfo.skillType;
clone.SetNotSeenIcon(clone.skillType);
clone.SetAsDeselected();
clone.Clicked += () => SelectSlot(clone);
skillSlots.Add(clone);
});
}
private void DisableDescriptionObjects()
{
skillsDescriptionRect.gameObject.SetActive(false);
skillTitle.enabled = false;
}
private void EnableDescriptionObjects()
{
skillsDescriptionRect.gameObject.SetActive(true);
skillTitle.enabled = true;
}
private void SelectSlot(SkillSlot clone)
{
if (selectedSlot)
{
selectedSlot.SetAsDeselected();
}
selectedSlot = clone;
selectedSlot.SetAsSelected();
skillImage.sprite = selectedSlot.image.sprite;
skillBackgroundQuanta.sprite = selectedSlot.quantaBackgroundImage;
levelImage.sprite = clone.levelImage.sprite;
skillDescription.text = selectedSlot.description;
skillTitle.text = selectedSlot.title.text;
LayoutRebuilder.ForceRebuildLayoutImmediate(skillsDescriptionRect);
}
}
}