247 lines
9.6 KiB
C#
247 lines
9.6 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Set.Data;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace UI
|
|
{
|
|
public class ChampionSelector : MonoBehaviour
|
|
{
|
|
[Header("Configuration")]
|
|
[SerializeField]
|
|
private bool _defaultSelection = false;
|
|
|
|
[SerializeField]
|
|
private GameObject _championUIPrefab;
|
|
|
|
[Header("Layout")]
|
|
[SerializeField]
|
|
private Transform _cost1Parent;
|
|
|
|
[SerializeField]
|
|
private Transform _cost2Parent;
|
|
|
|
[SerializeField]
|
|
private Transform _cost3Parent;
|
|
|
|
[SerializeField]
|
|
private Transform _cost4Parent;
|
|
|
|
[SerializeField]
|
|
private Transform _cost5Parent;
|
|
|
|
[Header("Optional: Champion Icons")]
|
|
[SerializeField]
|
|
|
|
private Dictionary<ChampionsEnum, ChampionBaseUI> _championUIs =
|
|
new Dictionary<ChampionsEnum, ChampionBaseUI>();
|
|
|
|
|
|
// Champion definitions with display names and costs
|
|
private readonly Dictionary<ChampionsEnum, ChampionDisplayInfo> _championDisplayInfo =
|
|
new Dictionary<ChampionsEnum, ChampionDisplayInfo>
|
|
{
|
|
// Cost 1 Champions
|
|
{ ChampionsEnum.AATROX, new ChampionDisplayInfo("Aatrox", 1) },
|
|
{ ChampionsEnum.EZREAL, new ChampionDisplayInfo("Ezreal", 1) },
|
|
{ ChampionsEnum.GAREN, new ChampionDisplayInfo("Garen", 1) },
|
|
{ ChampionsEnum.GNAR, new ChampionDisplayInfo("Gnar", 1) },
|
|
{ ChampionsEnum.KALISTA, new ChampionDisplayInfo("Kalista", 1) },
|
|
{ ChampionsEnum.KAYLE, new ChampionDisplayInfo("Kayle", 1) },
|
|
{ ChampionsEnum.KENNEN, new ChampionDisplayInfo("Kennen", 1) },
|
|
{ ChampionsEnum.LUCIAN, new ChampionDisplayInfo("Lucian", 1) },
|
|
{ ChampionsEnum.MALPHITE, new ChampionDisplayInfo("Malphite", 1) },
|
|
{ ChampionsEnum.NAAFIRI, new ChampionDisplayInfo("Naafiri", 1) },
|
|
{ ChampionsEnum.RELL, new ChampionDisplayInfo("Rell", 1) },
|
|
{ ChampionsEnum.SIVIR, new ChampionDisplayInfo("Sivir", 1) },
|
|
{ ChampionsEnum.SYNDRA, new ChampionDisplayInfo("Syndra", 1) },
|
|
{ ChampionsEnum.ZAC, new ChampionDisplayInfo("Zac", 1) },
|
|
// Cost 2 Champions
|
|
{ ChampionsEnum.DRMUNDO, new ChampionDisplayInfo("Dr. Mundo", 2) },
|
|
{ ChampionsEnum.GANGPLANK, new ChampionDisplayInfo("Gangplank", 2) },
|
|
{ ChampionsEnum.JANNA, new ChampionDisplayInfo("Janna", 2) },
|
|
{ ChampionsEnum.JHIN, new ChampionDisplayInfo("Jhin", 2) },
|
|
{ ChampionsEnum.KAISA, new ChampionDisplayInfo("Kai'Sa", 2) },
|
|
{ ChampionsEnum.KATARINA, new ChampionDisplayInfo("Katarina", 2) },
|
|
{ ChampionsEnum.KOBUKO, new ChampionDisplayInfo("Kobuko", 2) },
|
|
{ ChampionsEnum.LUX, new ChampionDisplayInfo("Lux", 2) },
|
|
{ ChampionsEnum.RAKAN, new ChampionDisplayInfo("Rakan", 2) },
|
|
{ ChampionsEnum.SHEN, new ChampionDisplayInfo("Shen", 2) },
|
|
{ ChampionsEnum.VI, new ChampionDisplayInfo("Vi", 2) },
|
|
{ ChampionsEnum.XAYAH, new ChampionDisplayInfo("Xayah", 2) },
|
|
{ ChampionsEnum.XINZHAO, new ChampionDisplayInfo("Xin Zhao", 2) },
|
|
// Cost 3 Champions
|
|
{ ChampionsEnum.AHRI, new ChampionDisplayInfo("Ahri", 3) },
|
|
{ ChampionsEnum.CAITLYN, new ChampionDisplayInfo("Caitlyn", 3) },
|
|
{ ChampionsEnum.DARIUS, new ChampionDisplayInfo("Darius", 3) },
|
|
{ ChampionsEnum.JAYCE, new ChampionDisplayInfo("Jayce", 3) },
|
|
{ ChampionsEnum.KOGMAW, new ChampionDisplayInfo("Kog'Maw", 3) },
|
|
{ ChampionsEnum.LULU, new ChampionDisplayInfo("Lulu", 3) },
|
|
{ ChampionsEnum.MALZAHAR, new ChampionDisplayInfo("Malzahar", 3) },
|
|
{ ChampionsEnum.NEEKO, new ChampionDisplayInfo("Neeko", 3) },
|
|
{ ChampionsEnum.RAMMUS, new ChampionDisplayInfo("Rammus", 3) },
|
|
{ ChampionsEnum.SENNA, new ChampionDisplayInfo("Senna", 3) },
|
|
{ ChampionsEnum.SMOLDER, new ChampionDisplayInfo("Smolder", 3) },
|
|
{ ChampionsEnum.SWAIN, new ChampionDisplayInfo("Swain", 3) },
|
|
{ ChampionsEnum.UDYR, new ChampionDisplayInfo("Udyr", 3) },
|
|
{ ChampionsEnum.VIEGO, new ChampionDisplayInfo("Viego", 3) },
|
|
{ ChampionsEnum.YASUO, new ChampionDisplayInfo("Yasuo", 3) },
|
|
{ ChampionsEnum.ZIGGS, new ChampionDisplayInfo("Ziggs", 3) },
|
|
// Cost 4 Champions
|
|
{ ChampionsEnum.AKALI, new ChampionDisplayInfo("Akali", 4) },
|
|
{ ChampionsEnum.ASHE, new ChampionDisplayInfo("Ashe", 4) },
|
|
{ ChampionsEnum.JARVANIV, new ChampionDisplayInfo("Jarvan IV", 4) },
|
|
{ ChampionsEnum.JINX, new ChampionDisplayInfo("Jinx", 4) },
|
|
{ ChampionsEnum.KARMA, new ChampionDisplayInfo("Karma", 4) },
|
|
{ ChampionsEnum.KSANTE, new ChampionDisplayInfo("K'Sante", 4) },
|
|
{ ChampionsEnum.LEONA, new ChampionDisplayInfo("Leona", 4) },
|
|
{ ChampionsEnum.POPPY, new ChampionDisplayInfo("Poppy", 4) },
|
|
{ ChampionsEnum.RYZE, new ChampionDisplayInfo("Ryze", 4) },
|
|
{ ChampionsEnum.SAMIRA, new ChampionDisplayInfo("Samira", 4) },
|
|
{ ChampionsEnum.SETT, new ChampionDisplayInfo("Sett", 4) },
|
|
{ ChampionsEnum.VOLIBEAR, new ChampionDisplayInfo("Volibear", 4) },
|
|
{ ChampionsEnum.YUUMI, new ChampionDisplayInfo("Yuumi", 4) },
|
|
// Cost 5 Champions
|
|
{ ChampionsEnum.BRAUM, new ChampionDisplayInfo("Braum", 5) },
|
|
{ ChampionsEnum.EKKO, new ChampionDisplayInfo("Ekko", 5) },
|
|
{ ChampionsEnum.GWEN, new ChampionDisplayInfo("Gwen", 5) },
|
|
{ ChampionsEnum.LEESIN, new ChampionDisplayInfo("Lee Sin", 5) },
|
|
{ ChampionsEnum.SERAPHINE, new ChampionDisplayInfo("Seraphine", 5) },
|
|
{ ChampionsEnum.TWISTEDFATE, new ChampionDisplayInfo("Twisted Fate", 5) },
|
|
{ ChampionsEnum.VARUS, new ChampionDisplayInfo("Varus", 5) },
|
|
};
|
|
|
|
[System.Serializable]
|
|
public class ChampionIconData
|
|
{
|
|
public ChampionsEnum champion;
|
|
public Sprite icon;
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
CreateChampionUIs();
|
|
}
|
|
|
|
|
|
|
|
private void CreateChampionUIs()
|
|
{
|
|
if (_championUIPrefab == null)
|
|
{
|
|
Debug.LogError("Champion UI Prefab is not assigned!");
|
|
return;
|
|
}
|
|
|
|
foreach (var kvp in _championDisplayInfo)
|
|
{
|
|
var champion = kvp.Key;
|
|
var displayInfo = kvp.Value;
|
|
|
|
Transform parent = GetParentForCost(displayInfo.Cost);
|
|
if (parent == null)
|
|
continue;
|
|
|
|
GameObject championUI = Instantiate(_championUIPrefab, parent);
|
|
ChampionBaseUI championBaseUI = championUI.GetComponent<ChampionBaseUI>();
|
|
|
|
if (championBaseUI != null)
|
|
{
|
|
championBaseUI.Initialize(champion, displayInfo.DisplayName, _defaultSelection);
|
|
_championUIs[champion] = championBaseUI;
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError($"ChampionBaseUI component not found on prefab for {champion}");
|
|
}
|
|
}
|
|
}
|
|
|
|
private Transform GetParentForCost(int cost)
|
|
{
|
|
return cost switch
|
|
{
|
|
1 => _cost1Parent,
|
|
2 => _cost2Parent,
|
|
3 => _cost3Parent,
|
|
4 => _cost4Parent,
|
|
5 => _cost5Parent,
|
|
_ => null,
|
|
};
|
|
}
|
|
|
|
public HashSet<Set.Data.ChampionsEnum> GetSelectedChampions()
|
|
{
|
|
var selectedChampions = new HashSet<Set.Data.ChampionsEnum>();
|
|
|
|
foreach (var kvp in _championUIs)
|
|
{
|
|
if (kvp.Value.IsSelected)
|
|
{
|
|
selectedChampions.Add(kvp.Key);
|
|
}
|
|
}
|
|
|
|
return selectedChampions;
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
ResetToDefault();
|
|
}
|
|
|
|
public void SetTo(bool on)
|
|
{
|
|
if (on)
|
|
SelectAll();
|
|
else
|
|
SelectNone();
|
|
}
|
|
|
|
public void SetTo(Set.Data.ChampionsEnum championValue)
|
|
{
|
|
foreach (var kvp in _championUIs)
|
|
{
|
|
var champion = kvp.Key;
|
|
var championUI = kvp.Value;
|
|
|
|
bool shouldBeSelected = (championValue & champion) == champion;
|
|
championUI.SetSelected(shouldBeSelected);
|
|
}
|
|
}
|
|
|
|
public void ResetToDefault()
|
|
{
|
|
foreach (var championUI in _championUIs.Values)
|
|
{
|
|
championUI.ResetToDefault();
|
|
}
|
|
}
|
|
|
|
public void SelectAll()
|
|
{
|
|
foreach (var championUI in _championUIs.Values)
|
|
{
|
|
championUI.SetSelected(true);
|
|
}
|
|
}
|
|
|
|
public void SelectNone()
|
|
{
|
|
foreach (var championUI in _championUIs.Values)
|
|
{
|
|
championUI.SetSelected(false);
|
|
}
|
|
}
|
|
|
|
public void SetInteractable(bool interactable)
|
|
{
|
|
foreach (var championUI in _championUIs.Values)
|
|
{
|
|
championUI.SetInteractable(interactable);
|
|
}
|
|
}
|
|
}
|
|
}
|