Skip to content

Instantly share code, notes, and snippets.

@xavierarpa
Created November 19, 2022 12:27
Show Gist options
  • Save xavierarpa/94b2f2e8fe387df87bef8c04307c67e6 to your computer and use it in GitHub Desktop.
Save xavierarpa/94b2f2e8fe387df87bef8c04307c67e6 to your computer and use it in GitHub Desktop.
Enumerate a List<Enum,T>. Useful to inspector
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XavHelpTo;
using XavHelpTo.Get;
using XavHelpTo.Set;
using XavHelpTo.Know;
[Serializable]
public struct EnumData<TEnum, TValue>
where TEnum : Enum
{
public string name; // Para mostrar el contenido
[HideInInspector] public TEnum enumme; // Tipo de valor
public TValue value; // Valor
}
[Serializable]
public class ListEnum<TEnum,TValue>
where TEnum : Enum
{
public List<EnumData<TEnum,TValue>> list = new List<EnumData<TEnum, TValue>>();
public TValue[] Values => list.Select(d => d.value).ToArray();
public TValue Get(TEnum @enum) => list.Find(l => l.enumme.Equals(@enum)).value;
public void ValidateList()
{
//1. Reajustar el Array
int length = Supply.Lenght<TEnum>();
EnumData<TEnum, TValue>[] datas = new EnumData<TEnum, TValue>[length];
//Array values = Enum.GetValues(typeof(TEnum));
//Revisar cada List y ajsutar el nombre
for (int i = 0; i < list.Count.Max(length); i++){
//Debug.Log(values.GetValue(i).GetType().Name);
//int indexValue = (int)values.GetValue(i);
//object enumme = Enum.Parse(typeof(TEnum), indexValue.ToString() ,true);
object enumme = Enum.Parse(typeof(TEnum), i.ToString() ,true);
//enumme.ToString().Print();
datas[i] = new EnumData<TEnum, TValue>();
datas[i].enumme = (TEnum)enumme;
datas[i].value = list[i].value;
//datas[i].name = $"{indexValue} : {datas[i].enumme}".ToLower();
datas[i].name = $"{i} : {datas[i].enumme}".ToLower();
}
list.Clear();
for (int i = 0; i < datas.Length; i++) list.Add(datas[i]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment