diff --git a/Assets/BitWise.cs b/Assets/BitWise.cs
new file mode 100644
index 0000000..13f4453
--- /dev/null
+++ b/Assets/BitWise.cs
@@ -0,0 +1,44 @@
+using System.Collections.Generic;
+
+public class BitWise
+{
+ public static int HammingWeight(long x)
+ {
+ const long h01 = 0x0101010101010101;
+ const long m1 = 0x5555555555555555; // 0101...
+ const long m2 = 0x3333333333333333; // 00110011..
+ const long m4 = 0x0f0f0f0f0f0f0f0f;
+ x -= (x >> 1) & m1; // put count of each 2 bits into those 2 bits
+ x = (x & m2) + ((x >> 2) & m2); // put count of each 4 bits into those 4 bits
+ x = (x + (x >> 4)) & m4; // put count of each 8 bits into those 8 bits
+ return (int)((x * h01) >> 56);
+ }
+
+ ///
+ /// return all the permutation of n choose p, long output are bitflags were 1 bit represent selected.
+ /// Exactly n bits are set to 1, among the p first bits.
+ /// n parmi p
+ ///
+ ///
+ ///
+ ///
+ public static HashSet GetAllPermutation(int numberOfElementToSelect, int totalNumberOfElement)
+ {
+ HashSet result = new HashSet();
+ if (numberOfElementToSelect>totalNumberOfElement)
+ {
+ return result;
+ }
+
+ long v = (1L << numberOfElementToSelect) - 1;
+ long end = 1L << totalNumberOfElement;
+ while (v < end)
+ {
+ result.Add(v);
+ long t = (v | (v - 1)) + 1;
+ v = t | ((((t & -t) / (v & -v)) >> 1) - 1);
+ }
+
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/Assets/BitWise.cs.meta b/Assets/BitWise.cs.meta
new file mode 100644
index 0000000..abfa0d0
--- /dev/null
+++ b/Assets/BitWise.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 2a6dff4eb0cc0aa44a847ee093734b7a
\ No newline at end of file
diff --git a/Assets/Data/ChampionEnum.cs b/Assets/Data/ChampionEnum.cs
deleted file mode 100644
index b5ce4d9..0000000
--- a/Assets/Data/ChampionEnum.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-public enum ChampionsEnum
-{
- ASHE = 0,
- BLITZCRANK = 1 << 0,
- ELISE = 1 << 1,
- JAX = 1 << 2,
- JAYCE = 1 << 3,
- LILLIA = 1 << 4,
- NOMSY = 1 << 5,
- POPPY = 1 << 6,
- SERAPHINE = 1 << 7,
- SORAKA = 1 << 8,
- TWITCH = 1 << 9,
- WARWICK = 1 << 10,
- ZIGGS = 1 << 11,
- ZOE = 1 << 12,
- AHRI = 1 << 13,
- AKALI = 1 << 14,
- CASSIOPEIA = 1 << 15,
- GALIO = 1 << 16,
- KASSADIN = 1 << 17,
- KOGMAW = 1 << 18,
- NILAH = 1 << 19,
- NUNU = 1 << 20,
- RUMBLE = 1 << 21,
- SHYVANA = 1 << 22,
- SYNDRA = 1 << 23,
- TRISTANA = 1 << 24,
- ZILEAN = 1 << 25,
- BARD = 1 << 26,
- EZREAL = 1 << 27,
- HECARIM = 1 << 28,
- HWEI = 1 << 29,
- JINX = 1 << 30,
- KATARINA = 1 << 31,
- MORDEKAISER = 1 << 32,
- NEEKO = 1 << 33,
- SHEN = 1 << 34,
- SWAIN = 1 << 35,
- VEIGAR = 1 << 36,
- VEX = 1 << 37,
- WUKONG = 1 << 38,
- FIORA = 1 << 39,
- GWEN = 1 << 40,
- KALISTA = 1 << 41,
- KARMA = 1 << 42,
- NAMI = 1 << 43,
- NASUS = 1 << 44,
- OLAF = 1 << 45,
- RAKAN = 1 << 46,
- RYZE = 1 << 47,
- TAHMKENCH = 1 << 48,
- TARIC = 1 << 49,
- VARUS = 1 << 50,
- BRIAR = 1 << 51,
- CAMILLE = 1 << 52,
- DIANA = 1 << 53,
- MILLIO = 1 << 54,
- MORGANA = 1 << 55,
- NORRA = 1 << 56,
- SMOLDER = 1 << 57,
- XERATH = 1 << 58,
-}
diff --git a/Assets/Data/ChampionUtils.cs b/Assets/Data/ChampionUtils.cs
new file mode 100644
index 0000000..442a326
--- /dev/null
+++ b/Assets/Data/ChampionUtils.cs
@@ -0,0 +1,67 @@
+using System.Collections.Generic;
+
+namespace Assets.Data
+{
+ public class ChampionUtils
+ {
+ public static HashSet FromLong(long champions)
+ {
+ HashSet result = new HashSet();
+ foreach (ChampionsEnum champion in System.Enum.GetValues(typeof(ChampionsEnum)))
+ {
+ if ((champions & (long)champion) != 0)
+ {
+ result.Add(champion);
+ }
+ }
+ return result;
+ }
+
+ public static long ToLong(HashSet champions)
+ {
+ long result = 0;
+ foreach (ChampionsEnum champion in champions)
+ {
+ result |= (long)champion;
+ }
+ return result;
+ }
+
+ public static long ToLong(ChampionsEnum champions)
+ {
+ return (long)champions;
+ }
+ public static bool ContainsChampion(long champions, ChampionsEnum champion)
+ {
+ return (champions & (long)champion) != 0;
+ }
+
+
+ public static bool ContainsChampion(long champions, long champion)
+ {
+ return (champions & champion) != 0;
+ }
+
+ public static int NumberOfChampions(long champions)
+ {
+ return BitWise.HammingWeight(champions);
+ }
+
+ public static long GetNthChampion(long champions, int n)
+ {
+ int kThFoundChampion = 0;
+ for (int i = 0; i < 64; i++)
+ {
+ if ((champions & (1L << i)) != 0)
+ {
+ if (kThFoundChampion == n)
+ {
+ return 1L << i;
+ }
+ kThFoundChampion++;
+ }
+ }
+ return 0;
+ }
+ }
+}
diff --git a/Assets/Data/ChampionUtils.cs.meta b/Assets/Data/ChampionUtils.cs.meta
new file mode 100644
index 0000000..b3c8d2d
--- /dev/null
+++ b/Assets/Data/ChampionUtils.cs.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ae22ada17bccee84b817a24470d45e6a
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Data/ChampionsEnum.cs b/Assets/Data/ChampionsEnum.cs
new file mode 100644
index 0000000..89ca738
--- /dev/null
+++ b/Assets/Data/ChampionsEnum.cs
@@ -0,0 +1,66 @@
+using System;
+
+[Flags]
+public enum ChampionsEnum : long
+{
+ ASHE = 1L << 0,
+ BLITZCRANK = 1L << 1,
+ ELISE = 1L << 2,
+ JAX = 1L << 3,
+ JAYCE = 1L << 4,
+ LILLIA = 1L << 5,
+ NOMSY = 1L << 6,
+ POPPY = 1L << 7,
+ SERAPHINE = 1L << 8,
+ SORAKA = 1L << 9,
+ TWITCH = 1L << 10,
+ WARWICK = 1L << 11,
+ ZIGGS = 1L << 12,
+ ZOE = 1L << 13,
+ AHRI = 1L << 14,
+ AKALI = 1L << 15,
+ CASSIOPEIA = 1L << 16,
+ GALIO = 1L << 17,
+ KASSADIN = 1L << 18,
+ KOGMAW = 1L << 19,
+ NILAH = 1L << 20,
+ NUNU = 1L << 21,
+ RUMBLE = 1L << 22,
+ SHYVANA = 1L << 23,
+ SYNDRA = 1L << 24,
+ TRISTANA = 1L << 25,
+ ZILEAN = 1L << 26,
+ BARD = 1L << 27,
+ EZREAL = 1L << 28,
+ HECARIM = 1L << 29,
+ HWEI = 1L << 30,
+ JINX = 1L << 31,
+ KATARINA = 1L << 32,
+ MORDEKAISER = 1L << 33,
+ NEEKO = 1L << 34,
+ SHEN = 1L << 35,
+ SWAIN = 1L << 36,
+ VEIGAR = 1L << 37,
+ VEX = 1L << 38,
+ WUKONG = 1L << 39,
+ FIORA = 1L << 40,
+ GWEN = 1L << 41,
+ KALISTA = 1L << 42,
+ KARMA = 1L << 43,
+ NAMI = 1L << 44,
+ NASUS = 1L << 45,
+ OLAF = 1L << 46,
+ RAKAN = 1L << 47,
+ RYZE = 1L << 48,
+ TAHMKENCH = 1L << 49,
+ TARIC = 1L << 50,
+ VARUS = 1L << 51,
+ BRIAR = 1L << 52,
+ CAMILLE = 1L << 53,
+ DIANA = 1L << 54,
+ MILLIO = 1L << 55,
+ MORGANA = 1L << 56,
+ NORRA = 1L << 57,
+ SMOLDER = 1L << 58,
+ XERATH = 1L << 59,
+}
diff --git a/Assets/Data/ChampionEnum.cs.meta b/Assets/Data/ChampionsEnum.cs.meta
similarity index 100%
rename from Assets/Data/ChampionEnum.cs.meta
rename to Assets/Data/ChampionsEnum.cs.meta
diff --git a/Assets/Data/TraitSelectorManager.cs b/Assets/Data/TraitSelectorManager.cs
index aa8a952..11fd737 100644
--- a/Assets/Data/TraitSelectorManager.cs
+++ b/Assets/Data/TraitSelectorManager.cs
@@ -9,10 +9,13 @@ public class TraitSelectorManager : MonoBehaviour
private TMP_InputField _compositionSize;
[SerializeField]
- private ChampionSelector _championSelector;
+ private ChampionSelector _mandatorychampionSelector;
[SerializeField]
- private UIToLogic _emblemSelector;
+ private ChampionSelector _acceptablechampionSelector;
+
+ [SerializeField]
+ private EmblemSelector _emblemSelector;
[SerializeField]
private int _traitThreshold = 7;
@@ -22,25 +25,28 @@ public class TraitSelectorManager : MonoBehaviour
public void ListAllActivableCompo()
{
emblemList = _emblemSelector.GetEmblems();
- var champList = _championSelector.GetSelectedChampions();
+ var mandatoryChampions = ChampionUtils.ToLong(_mandatorychampionSelector.GetSelectedChampions());
+ var acceptableChampions = ChampionUtils.ToLong(_acceptablechampionSelector.GetSelectedChampions());
int compositionSize = _compositionSize.text == "" ? 1 : int.Parse(_compositionSize.text);
- var coroutine = StartCoroutine(TraitsMapping.GetChampionSubsetsAsync(champList, compositionSize,emblemList, HandleCombination));
+ var composition = TraitsMapping.GenerateCombinations(mandatoryChampions, acceptableChampions, compositionSize);
+ Coroutine coroutine = StartCoroutine(TraitsMapping.DisplayCompositions(composition));
+ //var coroutine = StartCoroutine(TraitsMapping.GetChampionSubsetsAsync(champList, compositionSize,emblemList, HandleCombination));
}
- private void HandleCombination(HashSet combination)
+ private void HandleCombination(long combination)
{
- var synergies = TraitsMapping.MergeEmblems(
- TraitsMapping.TraitCountInCompo(combination),
- emblemList
- );
- var activeSynergies = TraitsMapping.FilterActiveTraits(synergies);
- if (activeSynergies.Count >= _traitThreshold)
- {
- var s = TraitsMapping.CompositionToString(combination, activeSynergies);
- Debug.Log(s);
- } else {
- Debug.LogWarning("Combination not valid");
- }
+ // var synergies = TraitsMapping.MergeEmblems(
+ // TraitsMapping.TraitCountInCompo(combination),
+ // emblemList
+ // );
+ // var activeSynergies = TraitsMapping.FilterActiveTraits(synergies);
+ // if (TraitUtils.TraitCountFromInt(activeSynergies) >= _traitThreshold)
+ // {
+ // var s = TraitsMapping.CompositionToString(combination, activeSynergies);
+ // Debug.Log(s);
+ // } else {
+ // Debug.LogWarning("Combination not valid");
+ // }
}
}
diff --git a/Assets/Data/TraitUtils.cs b/Assets/Data/TraitUtils.cs
index ddf06c5..231e2db 100644
--- a/Assets/Data/TraitUtils.cs
+++ b/Assets/Data/TraitUtils.cs
@@ -1,6 +1,52 @@
-namespace Assets.Data
+using System.Collections.Generic;
+using System.Numerics;
+
+namespace Assets.Data
{
public class TraitUtils
{
+ public static HashSet FromInt(int traits)
+ {
+ HashSet result = new HashSet();
+ foreach (TraitsEnum trait in System.Enum.GetValues(typeof(TraitsEnum)))
+ {
+ if ((traits & (int)trait) != 0)
+ {
+ result.Add(trait);
+ }
+ }
+ return result;
+ }
+
+ public static int ToInt(HashSet traits)
+ {
+ int result = 0;
+ foreach (TraitsEnum trait in traits)
+ {
+ result |= (int)trait;
+ }
+ return result;
+ }
+
+ public static int TraitCountFromInt(int traits)
+ {
+ int count = 0;
+ while (traits != 0)
+ {
+ count += traits & 1;
+ traits >>= 1;
+ }
+ return count;
+ }
+
+ public static bool ContainsTrait(int traits, TraitsEnum trait)
+ {
+ return (traits & (int)trait) != 0;
+ }
+ public static bool ContainsTrait(int traits, int trait)
+ {
+ return (traits & trait) != 0;
+ }
+
}
}
diff --git a/Assets/Data/TraitsEnum.cs b/Assets/Data/TraitsEnum.cs
index 12d73e7..0fe60e4 100644
--- a/Assets/Data/TraitsEnum.cs
+++ b/Assets/Data/TraitsEnum.cs
@@ -1,26 +1,29 @@
-public enum TraitsEnum
+using System;
+
+[Flags]
+public enum TraitsEnum : int
{
- ARCANA = 0,
- CHRONO = 1 << 0,
- DRAGON = 1 << 1,
- DRUID = 1 << 2,
- ELDRICHT = 1 << 3,
- FAERIE = 1 << 4,
- FROST = 1 << 5,
- HONEYMANCY = 1 << 6,
- PORTAL = 1 << 7,
- PYRO = 1 << 8,
- SUGARCRAFT = 1 << 9,
- WITCHCRAFT = 1 << 10,
- BASTION = 1 << 11,
- BLASTER = 1 << 12,
- HUNTER = 1 << 13,
- INCANTATOR = 1 << 14,
- MAGE = 1 << 15,
- MULTISTRIKER = 1 << 16,
- PRESERVER = 1 << 17,
- SCHOLAR = 1 << 18,
- SHAPESHIFTER = 1 << 19,
- VANGUARD = 1 << 20,
- WARRIOR = 1 << 21
+ ARCANA = 1 << 0,
+ CHRONO = 1 << 1,
+ DRAGON = 1 << 2,
+ DRUID = 1 << 3,
+ ELDRICHT = 1 << 4,
+ FAERIE = 1 << 5,
+ FROST = 1 << 6,
+ HONEYMANCY = 1 << 7,
+ PORTAL = 1 << 8,
+ PYRO = 1 << 9,
+ SUGARCRAFT = 1 << 10,
+ WITCHCRAFT = 1 << 11,
+ BASTION = 1 << 12,
+ BLASTER = 1 << 13,
+ HUNTER = 1 << 14,
+ INCANTATOR = 1 << 15,
+ MAGE = 1 << 16,
+ MULTISTRIKER = 1 << 17,
+ PRESERVER = 1 << 18,
+ SCHOLAR = 1 << 19,
+ SHAPESHIFTER = 1 << 20,
+ VANGUARD = 1 << 21,
+ WARRIOR = 1 << 22
}
\ No newline at end of file
diff --git a/Assets/Data/TraitsMapping.cs b/Assets/Data/TraitsMapping.cs
index 178d92b..9de3f8a 100644
--- a/Assets/Data/TraitsMapping.cs
+++ b/Assets/Data/TraitsMapping.cs
@@ -1,790 +1,907 @@
-using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using NUnit.Framework;
using UnityEngine;
namespace Assets.Data
{
public class TraitsMapping : MonoBehaviour
{
- public static Dictionary> ChampsTraits = new Dictionary<
- ChampionsEnum,
- List
- >
+ // long for champion, int for traits
+ public static Dictionary ChampsTraits = new Dictionary
{
{
- ChampionsEnum.ASHE,
- new List { TraitsEnum.ELDRICHT, TraitsEnum.MULTISTRIKER }
+ (long)ChampionsEnum.ASHE,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.ELDRICHT, TraitsEnum.MULTISTRIKER }
+ )
},
{
- ChampionsEnum.BLITZCRANK,
- new List { TraitsEnum.HONEYMANCY, TraitsEnum.VANGUARD }
+ (long)ChampionsEnum.BLITZCRANK,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.HONEYMANCY, TraitsEnum.VANGUARD }
+ )
},
{
- ChampionsEnum.ELISE,
- new List { TraitsEnum.ELDRICHT, TraitsEnum.SHAPESHIFTER }
+ (long)ChampionsEnum.ELISE,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.ELDRICHT, TraitsEnum.SHAPESHIFTER }
+ )
},
{
- ChampionsEnum.JAX,
- new List { TraitsEnum.CHRONO, TraitsEnum.MULTISTRIKER }
+ (long)ChampionsEnum.JAX,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.CHRONO, TraitsEnum.MULTISTRIKER }
+ )
},
{
- ChampionsEnum.JAYCE,
- new List { TraitsEnum.PORTAL, TraitsEnum.SHAPESHIFTER }
+ (long)ChampionsEnum.JAYCE,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.PORTAL, TraitsEnum.SHAPESHIFTER }
+ )
},
{
- ChampionsEnum.LILLIA,
- new List { TraitsEnum.FAERIE, TraitsEnum.BASTION }
+ (long)ChampionsEnum.LILLIA,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.FAERIE, TraitsEnum.BASTION })
},
{
- ChampionsEnum.NOMSY,
- new List { TraitsEnum.DRAGON, TraitsEnum.HUNTER }
+ (long)ChampionsEnum.NOMSY,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.DRAGON, TraitsEnum.HUNTER })
},
{
- ChampionsEnum.POPPY,
- new List { TraitsEnum.WITCHCRAFT, TraitsEnum.BASTION }
+ (long)ChampionsEnum.POPPY,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.WITCHCRAFT, TraitsEnum.BASTION }
+ )
},
{
- ChampionsEnum.SERAPHINE,
- new List { TraitsEnum.FAERIE, TraitsEnum.MAGE }
+ (long)ChampionsEnum.SERAPHINE,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.FAERIE, TraitsEnum.MAGE })
},
{
- ChampionsEnum.SORAKA,
- new List { TraitsEnum.SUGARCRAFT, TraitsEnum.MAGE }
+ (long)ChampionsEnum.SORAKA,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.SUGARCRAFT, TraitsEnum.MAGE })
},
{
- ChampionsEnum.TWITCH,
- new List { TraitsEnum.FROST, TraitsEnum.HUNTER }
+ (long)ChampionsEnum.TWITCH,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.FROST, TraitsEnum.HUNTER })
},
{
- ChampionsEnum.WARWICK,
- new List { TraitsEnum.FROST, TraitsEnum.VANGUARD }
+ (long)ChampionsEnum.WARWICK,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.FROST, TraitsEnum.VANGUARD })
},
{
- ChampionsEnum.ZIGGS,
- new List { TraitsEnum.HONEYMANCY, TraitsEnum.INCANTATOR }
+ (long)ChampionsEnum.ZIGGS,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.HONEYMANCY, TraitsEnum.INCANTATOR }
+ )
},
{
- ChampionsEnum.ZOE,
- new List
- {
- TraitsEnum.WITCHCRAFT,
- TraitsEnum.SCHOLAR,
- TraitsEnum.PORTAL,
- }
+ (long)ChampionsEnum.ZOE,
+ TraitUtils.ToInt(
+ new HashSet
+ {
+ TraitsEnum.WITCHCRAFT,
+ TraitsEnum.SCHOLAR,
+ TraitsEnum.PORTAL,
+ }
+ )
},
{
- ChampionsEnum.AHRI,
- new List { TraitsEnum.ARCANA, TraitsEnum.SCHOLAR }
+ (long)ChampionsEnum.AHRI,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.ARCANA, TraitsEnum.SCHOLAR })
},
{
- ChampionsEnum.AKALI,
- new List
- {
- TraitsEnum.PYRO,
- TraitsEnum.MULTISTRIKER,
- TraitsEnum.WARRIOR,
- }
+ (long)ChampionsEnum.AKALI,
+ TraitUtils.ToInt(
+ new HashSet
+ {
+ TraitsEnum.PYRO,
+ TraitsEnum.MULTISTRIKER,
+ TraitsEnum.WARRIOR,
+ }
+ )
},
{
- ChampionsEnum.CASSIOPEIA,
- new List { TraitsEnum.WITCHCRAFT, TraitsEnum.INCANTATOR }
+ (long)ChampionsEnum.CASSIOPEIA,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.WITCHCRAFT, TraitsEnum.INCANTATOR }
+ )
},
{
- ChampionsEnum.GALIO,
- new List { TraitsEnum.PORTAL, TraitsEnum.VANGUARD, TraitsEnum.MAGE }
+ (long)ChampionsEnum.GALIO,
+ TraitUtils.ToInt(
+ new HashSet
+ {
+ TraitsEnum.PORTAL,
+ TraitsEnum.VANGUARD,
+ TraitsEnum.MAGE,
+ }
+ )
},
{
- ChampionsEnum.KASSADIN,
- new List { TraitsEnum.PORTAL, TraitsEnum.MULTISTRIKER }
+ (long)ChampionsEnum.KASSADIN,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.PORTAL, TraitsEnum.MULTISTRIKER }
+ )
},
{
- ChampionsEnum.KOGMAW,
- new List { TraitsEnum.HONEYMANCY, TraitsEnum.HUNTER }
+ (long)ChampionsEnum.KOGMAW,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.HONEYMANCY, TraitsEnum.HUNTER }
+ )
},
{
- ChampionsEnum.NILAH,
- new List { TraitsEnum.ELDRICHT, TraitsEnum.WARRIOR }
+ (long)ChampionsEnum.NILAH,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.ELDRICHT, TraitsEnum.WARRIOR }
+ )
},
{
- ChampionsEnum.NUNU,
- new List { TraitsEnum.HONEYMANCY, TraitsEnum.BASTION }
+ (long)ChampionsEnum.NUNU,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.HONEYMANCY, TraitsEnum.BASTION }
+ )
},
{
- ChampionsEnum.RUMBLE,
- new List
- {
- TraitsEnum.SUGARCRAFT,
- TraitsEnum.BLASTER,
- TraitsEnum.VANGUARD,
- }
+ (long)ChampionsEnum.RUMBLE,
+ TraitUtils.ToInt(
+ new HashSet
+ {
+ TraitsEnum.SUGARCRAFT,
+ TraitsEnum.BLASTER,
+ TraitsEnum.VANGUARD,
+ }
+ )
},
{
- ChampionsEnum.SHYVANA,
- new List { TraitsEnum.DRAGON, TraitsEnum.SHAPESHIFTER }
+ (long)ChampionsEnum.SHYVANA,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.DRAGON, TraitsEnum.SHAPESHIFTER }
+ )
},
{
- ChampionsEnum.SYNDRA,
- new List { TraitsEnum.ELDRICHT, TraitsEnum.INCANTATOR }
+ (long)ChampionsEnum.SYNDRA,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.ELDRICHT, TraitsEnum.INCANTATOR }
+ )
},
{
- ChampionsEnum.TRISTANA,
- new List { TraitsEnum.FAERIE, TraitsEnum.BLASTER }
+ (long)ChampionsEnum.TRISTANA,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.FAERIE, TraitsEnum.BLASTER })
},
{
- ChampionsEnum.ZILEAN,
- new List { TraitsEnum.FROST, TraitsEnum.CHRONO, TraitsEnum.PRESERVER }
+ (long)ChampionsEnum.ZILEAN,
+ TraitUtils.ToInt(
+ new HashSet
+ {
+ TraitsEnum.FROST,
+ TraitsEnum.CHRONO,
+ TraitsEnum.PRESERVER,
+ }
+ )
},
{
- ChampionsEnum.BARD,
- new List
- {
- TraitsEnum.SUGARCRAFT,
- TraitsEnum.SCHOLAR,
- TraitsEnum.PRESERVER,
- }
+ (long)ChampionsEnum.BARD,
+ TraitUtils.ToInt(
+ new HashSet
+ {
+ TraitsEnum.SUGARCRAFT,
+ TraitsEnum.SCHOLAR,
+ TraitsEnum.PRESERVER,
+ }
+ )
},
{
- ChampionsEnum.EZREAL,
- new List { TraitsEnum.PORTAL, TraitsEnum.BLASTER }
+ (long)ChampionsEnum.EZREAL,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.PORTAL, TraitsEnum.BLASTER })
},
{
- ChampionsEnum.HECARIM,
- new List
- {
- TraitsEnum.ARCANA,
- TraitsEnum.MULTISTRIKER,
- TraitsEnum.BASTION,
- }
+ (long)ChampionsEnum.HECARIM,
+ TraitUtils.ToInt(
+ new HashSet
+ {
+ TraitsEnum.ARCANA,
+ TraitsEnum.MULTISTRIKER,
+ TraitsEnum.BASTION,
+ }
+ )
},
{
- ChampionsEnum.HWEI,
- new List { TraitsEnum.FROST, TraitsEnum.BLASTER }
+ (long)ChampionsEnum.HWEI,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.FROST, TraitsEnum.BLASTER })
},
{
- ChampionsEnum.JINX,
- new List { TraitsEnum.SUGARCRAFT, TraitsEnum.HUNTER }
+ (long)ChampionsEnum.JINX,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.SUGARCRAFT, TraitsEnum.HUNTER }
+ )
},
{
- ChampionsEnum.KATARINA,
- new List { TraitsEnum.FAERIE, TraitsEnum.WARRIOR }
+ (long)ChampionsEnum.KATARINA,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.FAERIE, TraitsEnum.WARRIOR })
},
{
- ChampionsEnum.MORDEKAISER,
- new List { TraitsEnum.ELDRICHT, TraitsEnum.VANGUARD }
+ (long)ChampionsEnum.MORDEKAISER,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.ELDRICHT, TraitsEnum.VANGUARD }
+ )
},
{
- ChampionsEnum.NEEKO,
- new List { TraitsEnum.WITCHCRAFT, TraitsEnum.SHAPESHIFTER }
+ (long)ChampionsEnum.NEEKO,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.WITCHCRAFT, TraitsEnum.SHAPESHIFTER }
+ )
},
{
- ChampionsEnum.SHEN,
- new List { TraitsEnum.PYRO, TraitsEnum.BASTION }
+ (long)ChampionsEnum.SHEN,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.PYRO, TraitsEnum.BASTION })
},
{
- ChampionsEnum.SWAIN,
- new List { TraitsEnum.FROST, TraitsEnum.SHAPESHIFTER }
+ (long)ChampionsEnum.SWAIN,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.FROST, TraitsEnum.SHAPESHIFTER }
+ )
},
{
- ChampionsEnum.VEIGAR,
- new List { TraitsEnum.HONEYMANCY, TraitsEnum.MAGE }
+ (long)ChampionsEnum.VEIGAR,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.HONEYMANCY, TraitsEnum.MAGE })
},
{
- ChampionsEnum.VEX,
- new List { TraitsEnum.CHRONO, TraitsEnum.MAGE }
+ (long)ChampionsEnum.VEX,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.CHRONO, TraitsEnum.MAGE })
},
{
- ChampionsEnum.WUKONG,
- new List { TraitsEnum.DRUID }
+ (long)ChampionsEnum.WUKONG,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.DRUID })
},
{
- ChampionsEnum.FIORA,
- new List { TraitsEnum.WITCHCRAFT, TraitsEnum.WARRIOR }
+ (long)ChampionsEnum.FIORA,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.WITCHCRAFT, TraitsEnum.WARRIOR }
+ )
},
{
- ChampionsEnum.GWEN,
- new List { TraitsEnum.SUGARCRAFT, TraitsEnum.WARRIOR }
+ (long)ChampionsEnum.GWEN,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.SUGARCRAFT, TraitsEnum.WARRIOR }
+ )
},
{
- ChampionsEnum.KALISTA,
- new List { TraitsEnum.FAERIE, TraitsEnum.MULTISTRIKER }
+ (long)ChampionsEnum.KALISTA,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.FAERIE, TraitsEnum.MULTISTRIKER }
+ )
},
{
- ChampionsEnum.KARMA,
- new List { TraitsEnum.INCANTATOR, TraitsEnum.CHRONO }
+ (long)ChampionsEnum.KARMA,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.INCANTATOR, TraitsEnum.CHRONO }
+ )
},
{
- ChampionsEnum.NAMI,
- new List { TraitsEnum.ELDRICHT, TraitsEnum.MAGE }
+ (long)ChampionsEnum.NAMI,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.ELDRICHT, TraitsEnum.MAGE })
},
{
- ChampionsEnum.NASUS,
- new List { TraitsEnum.SHAPESHIFTER, TraitsEnum.PYRO }
+ (long)ChampionsEnum.NASUS,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.SHAPESHIFTER, TraitsEnum.PYRO }
+ )
},
{
- ChampionsEnum.OLAF,
- new List { TraitsEnum.FROST, TraitsEnum.HUNTER }
+ (long)ChampionsEnum.OLAF,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.FROST, TraitsEnum.HUNTER })
},
{
- ChampionsEnum.RAKAN,
- new List { TraitsEnum.FAERIE, TraitsEnum.PRESERVER }
+ (long)ChampionsEnum.RAKAN,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.FAERIE, TraitsEnum.PRESERVER }
+ )
},
{
- ChampionsEnum.RYZE,
- new List { TraitsEnum.PORTAL, TraitsEnum.SCHOLAR }
+ (long)ChampionsEnum.RYZE,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.PORTAL, TraitsEnum.SCHOLAR })
},
{
- ChampionsEnum.TAHMKENCH,
- new List { TraitsEnum.ARCANA, TraitsEnum.VANGUARD }
+ (long)ChampionsEnum.TAHMKENCH,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.ARCANA, TraitsEnum.VANGUARD })
},
{
- ChampionsEnum.TARIC,
- new List { TraitsEnum.PORTAL, TraitsEnum.BASTION }
+ (long)ChampionsEnum.TARIC,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.PORTAL, TraitsEnum.BASTION })
},
{
- ChampionsEnum.VARUS,
- new List { TraitsEnum.PYRO, TraitsEnum.BLASTER }
+ (long)ChampionsEnum.VARUS,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.PYRO, TraitsEnum.BLASTER })
},
{
- ChampionsEnum.BRIAR,
- new List { TraitsEnum.ELDRICHT, TraitsEnum.SHAPESHIFTER }
+ (long)ChampionsEnum.BRIAR,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.ELDRICHT, TraitsEnum.SHAPESHIFTER }
+ )
},
{
- ChampionsEnum.CAMILLE,
- new List { TraitsEnum.CHRONO, TraitsEnum.MULTISTRIKER }
+ (long)ChampionsEnum.CAMILLE,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.CHRONO, TraitsEnum.MULTISTRIKER }
+ )
},
{
- ChampionsEnum.DIANA,
- new List { TraitsEnum.FROST, TraitsEnum.BASTION }
+ (long)ChampionsEnum.DIANA,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.FROST, TraitsEnum.BASTION })
},
{
- ChampionsEnum.MILLIO,
- new List { TraitsEnum.FAERIE, TraitsEnum.SCHOLAR }
+ (long)ChampionsEnum.MILLIO,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.FAERIE, TraitsEnum.SCHOLAR })
},
{
- ChampionsEnum.MORGANA,
- new List { TraitsEnum.WITCHCRAFT, TraitsEnum.PRESERVER }
+ (long)ChampionsEnum.MORGANA,
+ TraitUtils.ToInt(
+ new HashSet { TraitsEnum.WITCHCRAFT, TraitsEnum.PRESERVER }
+ )
},
{
- ChampionsEnum.NORRA,
- new List { TraitsEnum.PORTAL, TraitsEnum.MAGE }
+ (long)ChampionsEnum.NORRA,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.PORTAL, TraitsEnum.MAGE })
},
{
- ChampionsEnum.SMOLDER,
- new List { TraitsEnum.DRAGON, TraitsEnum.BLASTER }
+ (long)ChampionsEnum.SMOLDER,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.DRAGON, TraitsEnum.BLASTER })
},
{
- ChampionsEnum.XERATH,
- new List { TraitsEnum.ARCANA }
+ (long)ChampionsEnum.XERATH,
+ TraitUtils.ToInt(new HashSet { TraitsEnum.ARCANA })
},
};
- public static Dictionary> TraitsChamp = new Dictionary<
- TraitsEnum,
- List
- >
+ // int for trait and long for list of champions
+ public static Dictionary TraitsChamp = new Dictionary
{
{
- TraitsEnum.ARCANA,
- new List
- {
- ChampionsEnum.AHRI,
- ChampionsEnum.HECARIM,
- ChampionsEnum.TAHMKENCH,
- ChampionsEnum.XERATH,
- }
+ (int)TraitsEnum.ARCANA,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.AHRI,
+ ChampionsEnum.HECARIM,
+ ChampionsEnum.TAHMKENCH,
+ ChampionsEnum.XERATH,
+ }
+ )
},
{
- TraitsEnum.CHRONO,
- new List
- {
- ChampionsEnum.CAMILLE,
- ChampionsEnum.JAX,
- ChampionsEnum.KARMA,
- ChampionsEnum.VEX,
- ChampionsEnum.ZILEAN,
- }
+ (int)TraitsEnum.CHRONO,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.CAMILLE,
+ ChampionsEnum.JAX,
+ ChampionsEnum.KARMA,
+ ChampionsEnum.VEX,
+ ChampionsEnum.ZILEAN,
+ }
+ )
},
{
- TraitsEnum.DRAGON,
- new List
- {
- ChampionsEnum.SMOLDER,
- ChampionsEnum.SHYVANA,
- ChampionsEnum.NOMSY,
- }
+ (int)TraitsEnum.DRAGON,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.SMOLDER,
+ ChampionsEnum.SHYVANA,
+ ChampionsEnum.NOMSY,
+ }
+ )
},
{
- TraitsEnum.DRUID,
- new List { ChampionsEnum.WUKONG }
+ (int)TraitsEnum.DRUID,
+ ChampionUtils.ToLong(new HashSet() { ChampionsEnum.WUKONG })
},
{
- TraitsEnum.ELDRICHT,
- new List
- {
- ChampionsEnum.ASHE,
- ChampionsEnum.BRIAR,
- ChampionsEnum.ELISE,
- ChampionsEnum.MORDEKAISER,
- ChampionsEnum.NAMI,
- ChampionsEnum.NILAH,
- ChampionsEnum.SYNDRA,
- }
+ (int)TraitsEnum.ELDRICHT,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.ASHE,
+ ChampionsEnum.BRIAR,
+ ChampionsEnum.ELISE,
+ ChampionsEnum.MORDEKAISER,
+ ChampionsEnum.NAMI,
+ ChampionsEnum.NILAH,
+ ChampionsEnum.SYNDRA,
+ }
+ )
},
{
- TraitsEnum.FAERIE,
- new List
- {
- ChampionsEnum.KALISTA,
- ChampionsEnum.KATARINA,
- ChampionsEnum.LILLIA,
- ChampionsEnum.MILLIO,
- ChampionsEnum.RAKAN,
- ChampionsEnum.SERAPHINE,
- ChampionsEnum.TRISTANA,
- }
+ (int)TraitsEnum.FAERIE,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.KALISTA,
+ ChampionsEnum.KATARINA,
+ ChampionsEnum.LILLIA,
+ ChampionsEnum.MILLIO,
+ ChampionsEnum.RAKAN,
+ ChampionsEnum.SERAPHINE,
+ ChampionsEnum.TRISTANA,
+ }
+ )
},
{
- TraitsEnum.FROST,
- new List
- {
- ChampionsEnum.DIANA,
- ChampionsEnum.HWEI,
- ChampionsEnum.OLAF,
- ChampionsEnum.SWAIN,
- ChampionsEnum.TWITCH,
- ChampionsEnum.WARWICK,
- ChampionsEnum.ZILEAN,
- }
+ (int)TraitsEnum.FROST,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.DIANA,
+ ChampionsEnum.HWEI,
+ ChampionsEnum.OLAF,
+ ChampionsEnum.SWAIN,
+ ChampionsEnum.TWITCH,
+ ChampionsEnum.WARWICK,
+ ChampionsEnum.ZILEAN,
+ }
+ )
},
{
- TraitsEnum.HONEYMANCY,
- new List
- {
- ChampionsEnum.BLITZCRANK,
- ChampionsEnum.KOGMAW,
- ChampionsEnum.NUNU,
- ChampionsEnum.VEIGAR,
- ChampionsEnum.ZIGGS,
- }
+ (int)TraitsEnum.HONEYMANCY,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.BLITZCRANK,
+ ChampionsEnum.KOGMAW,
+ ChampionsEnum.NUNU,
+ ChampionsEnum.VEIGAR,
+ ChampionsEnum.ZIGGS,
+ }
+ )
},
{
- TraitsEnum.PORTAL,
- new List
- {
- ChampionsEnum.EZREAL,
- ChampionsEnum.GALIO,
- ChampionsEnum.JAYCE,
- ChampionsEnum.KASSADIN,
- ChampionsEnum.NORRA,
- ChampionsEnum.RYZE,
- ChampionsEnum.TARIC,
- ChampionsEnum.ZOE,
- }
+ (int)TraitsEnum.PORTAL,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.EZREAL,
+ ChampionsEnum.GALIO,
+ ChampionsEnum.JAYCE,
+ ChampionsEnum.KASSADIN,
+ ChampionsEnum.NORRA,
+ ChampionsEnum.RYZE,
+ ChampionsEnum.TARIC,
+ ChampionsEnum.ZOE,
+ }
+ )
},
{
- TraitsEnum.PYRO,
- new List
- {
- ChampionsEnum.AKALI,
- ChampionsEnum.NASUS,
- ChampionsEnum.SHEN,
- ChampionsEnum.VARUS,
- }
+ (int)TraitsEnum.PYRO,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.AKALI,
+ ChampionsEnum.NASUS,
+ ChampionsEnum.SHEN,
+ ChampionsEnum.VARUS,
+ }
+ )
},
{
- TraitsEnum.SUGARCRAFT,
- new List
- {
- ChampionsEnum.BARD,
- ChampionsEnum.GWEN,
- ChampionsEnum.JINX,
- ChampionsEnum.RUMBLE,
- ChampionsEnum.SORAKA,
- }
+ (int)TraitsEnum.SUGARCRAFT,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.BARD,
+ ChampionsEnum.GWEN,
+ ChampionsEnum.JINX,
+ ChampionsEnum.RUMBLE,
+ ChampionsEnum.SORAKA,
+ }
+ )
},
{
- TraitsEnum.WITCHCRAFT,
- new List
- {
- ChampionsEnum.CASSIOPEIA,
- ChampionsEnum.FIORA,
- ChampionsEnum.MORGANA,
- ChampionsEnum.NEEKO,
- ChampionsEnum.POPPY,
- ChampionsEnum.ZOE,
- }
+ (int)TraitsEnum.WITCHCRAFT,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.CASSIOPEIA,
+ ChampionsEnum.FIORA,
+ ChampionsEnum.MORGANA,
+ ChampionsEnum.NEEKO,
+ ChampionsEnum.POPPY,
+ ChampionsEnum.ZOE,
+ }
+ )
},
{
- TraitsEnum.BASTION,
- new List
- {
- ChampionsEnum.DIANA,
- ChampionsEnum.HECARIM,
- ChampionsEnum.LILLIA,
- ChampionsEnum.NUNU,
- ChampionsEnum.POPPY,
- ChampionsEnum.SHEN,
- ChampionsEnum.TARIC,
- }
+ (int)TraitsEnum.BASTION,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.DIANA,
+ ChampionsEnum.HECARIM,
+ ChampionsEnum.LILLIA,
+ ChampionsEnum.NUNU,
+ ChampionsEnum.POPPY,
+ ChampionsEnum.SHEN,
+ ChampionsEnum.TARIC,
+ }
+ )
},
{
- TraitsEnum.BLASTER,
- new List
- {
- ChampionsEnum.EZREAL,
- ChampionsEnum.HWEI,
- ChampionsEnum.RUMBLE,
- ChampionsEnum.SMOLDER,
- ChampionsEnum.TRISTANA,
- ChampionsEnum.VARUS,
- }
+ (int)TraitsEnum.BLASTER,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.EZREAL,
+ ChampionsEnum.HWEI,
+ ChampionsEnum.RUMBLE,
+ ChampionsEnum.SMOLDER,
+ ChampionsEnum.TRISTANA,
+ ChampionsEnum.VARUS,
+ }
+ )
},
{
- TraitsEnum.HUNTER,
- new List
- {
- ChampionsEnum.JINX,
- ChampionsEnum.KOGMAW,
- ChampionsEnum.NOMSY,
- ChampionsEnum.OLAF,
- ChampionsEnum.TWITCH,
- }
+ (int)TraitsEnum.HUNTER,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.JINX,
+ ChampionsEnum.KOGMAW,
+ ChampionsEnum.NOMSY,
+ ChampionsEnum.OLAF,
+ ChampionsEnum.TWITCH,
+ }
+ )
},
{
- TraitsEnum.INCANTATOR,
- new List
- {
- ChampionsEnum.CASSIOPEIA,
- ChampionsEnum.KARMA,
- ChampionsEnum.SYNDRA,
- ChampionsEnum.ZIGGS,
- }
+ (int)TraitsEnum.INCANTATOR,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.CASSIOPEIA,
+ ChampionsEnum.KARMA,
+ ChampionsEnum.SYNDRA,
+ ChampionsEnum.ZIGGS,
+ }
+ )
},
{
- TraitsEnum.MAGE,
- new List
- {
- ChampionsEnum.GALIO,
- ChampionsEnum.NAMI,
- ChampionsEnum.NORRA,
- ChampionsEnum.SERAPHINE,
- ChampionsEnum.SORAKA,
- ChampionsEnum.VEIGAR,
- ChampionsEnum.VEX,
- }
+ (int)TraitsEnum.MAGE,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.GALIO,
+ ChampionsEnum.NAMI,
+ ChampionsEnum.NORRA,
+ ChampionsEnum.SERAPHINE,
+ ChampionsEnum.SORAKA,
+ ChampionsEnum.VEIGAR,
+ ChampionsEnum.VEX,
+ }
+ )
},
{
- TraitsEnum.MULTISTRIKER,
- new List
- {
- ChampionsEnum.AKALI,
- ChampionsEnum.ASHE,
- ChampionsEnum.CAMILLE,
- ChampionsEnum.HECARIM,
- ChampionsEnum.JAX,
- ChampionsEnum.KALISTA,
- ChampionsEnum.KASSADIN,
- }
+ (int)TraitsEnum.MULTISTRIKER,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.AKALI,
+ ChampionsEnum.ASHE,
+ ChampionsEnum.CAMILLE,
+ ChampionsEnum.HECARIM,
+ ChampionsEnum.JAX,
+ ChampionsEnum.KALISTA,
+ ChampionsEnum.KASSADIN,
+ }
+ )
},
{
- TraitsEnum.PRESERVER,
- new List
- {
- ChampionsEnum.BARD,
- ChampionsEnum.MORGANA,
- ChampionsEnum.RAKAN,
- ChampionsEnum.ZILEAN,
- }
+ (int)TraitsEnum.PRESERVER,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.BARD,
+ ChampionsEnum.MORGANA,
+ ChampionsEnum.RAKAN,
+ ChampionsEnum.ZILEAN,
+ }
+ )
},
{
- TraitsEnum.SCHOLAR,
- new List
- {
- ChampionsEnum.AHRI,
- ChampionsEnum.BARD,
- ChampionsEnum.MILLIO,
- ChampionsEnum.RYZE,
- ChampionsEnum.ZOE,
- }
+ (int)TraitsEnum.SCHOLAR,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.AHRI,
+ ChampionsEnum.BARD,
+ ChampionsEnum.MILLIO,
+ ChampionsEnum.RYZE,
+ ChampionsEnum.ZOE,
+ }
+ )
},
{
- TraitsEnum.SHAPESHIFTER,
- new List
- {
- ChampionsEnum.BRIAR,
- ChampionsEnum.ELISE,
- ChampionsEnum.JAYCE,
- ChampionsEnum.NASUS,
- ChampionsEnum.NEEKO,
- ChampionsEnum.SHYVANA,
- ChampionsEnum.SWAIN,
- }
+ (int)TraitsEnum.SHAPESHIFTER,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.BRIAR,
+ ChampionsEnum.ELISE,
+ ChampionsEnum.JAYCE,
+ ChampionsEnum.NASUS,
+ ChampionsEnum.NEEKO,
+ ChampionsEnum.SHYVANA,
+ ChampionsEnum.SWAIN,
+ }
+ )
},
{
- TraitsEnum.VANGUARD,
- new List
- {
- ChampionsEnum.BLITZCRANK,
- ChampionsEnum.GALIO,
- ChampionsEnum.MORDEKAISER,
- ChampionsEnum.RUMBLE,
- ChampionsEnum.TAHMKENCH,
- ChampionsEnum.WARWICK,
- }
+ (int)TraitsEnum.VANGUARD,
+ ChampionUtils.ToLong(
+ new HashSet()
+ {
+ ChampionsEnum.BLITZCRANK,
+ ChampionsEnum.GALIO,
+ ChampionsEnum.MORDEKAISER,
+ ChampionsEnum.RUMBLE,
+ ChampionsEnum.TAHMKENCH,
+ ChampionsEnum.WARWICK,
+ }
+ )
},
{
- TraitsEnum.WARRIOR,
- new List
- {
- ChampionsEnum.AKALI,
- ChampionsEnum.FIORA,
- ChampionsEnum.GWEN,
- ChampionsEnum.KATARINA,
- ChampionsEnum.NILAH,
- }
+ (int)TraitsEnum.WARRIOR,
+ ChampionUtils.ToLong(
+ new HashSet
+ {
+ ChampionsEnum.AKALI,
+ ChampionsEnum.FIORA,
+ ChampionsEnum.GWEN,
+ ChampionsEnum.KATARINA,
+ ChampionsEnum.NILAH,
+ }
+ )
},
};
- public Dictionary ChampionCost = new Dictionary()
+ public Dictionary ChampionCost = new Dictionary()
{
- { ChampionsEnum.ASHE, 1 },
- { ChampionsEnum.BLITZCRANK, 1 },
- { ChampionsEnum.ELISE, 1 },
- { ChampionsEnum.JAX, 1 },
- { ChampionsEnum.JAYCE, 1 },
- { ChampionsEnum.LILLIA, 1 },
- { ChampionsEnum.NOMSY, 1 },
- { ChampionsEnum.POPPY, 1 },
- { ChampionsEnum.SERAPHINE, 1 },
- { ChampionsEnum.SORAKA, 1 },
- { ChampionsEnum.TWITCH, 1 },
- { ChampionsEnum.WARWICK, 1 },
- { ChampionsEnum.ZIGGS, 1 },
- { ChampionsEnum.ZOE, 1 },
- { ChampionsEnum.AHRI, 2 },
- { ChampionsEnum.AKALI, 2 },
- { ChampionsEnum.CASSIOPEIA, 2 },
- { ChampionsEnum.GALIO, 2 },
- { ChampionsEnum.KASSADIN, 2 },
- { ChampionsEnum.KOGMAW, 2 },
- { ChampionsEnum.NILAH, 2 },
- { ChampionsEnum.NUNU, 2 },
- { ChampionsEnum.RUMBLE, 2 },
- { ChampionsEnum.SHYVANA, 2 },
- { ChampionsEnum.SYNDRA, 2 },
- { ChampionsEnum.TRISTANA, 2 },
- { ChampionsEnum.ZILEAN, 2 },
- { ChampionsEnum.BARD, 3 },
- { ChampionsEnum.EZREAL, 3 },
- { ChampionsEnum.HECARIM, 3 },
- { ChampionsEnum.HWEI, 3 },
- { ChampionsEnum.JINX, 3 },
- { ChampionsEnum.KATARINA, 3 },
- { ChampionsEnum.MORDEKAISER, 3 },
- { ChampionsEnum.NEEKO, 3 },
- { ChampionsEnum.SHEN, 3 },
- { ChampionsEnum.SWAIN, 3 },
- { ChampionsEnum.VEIGAR, 3 },
- { ChampionsEnum.VEX, 3 },
- { ChampionsEnum.WUKONG, 3 },
- { ChampionsEnum.FIORA, 4 },
- { ChampionsEnum.GWEN, 4 },
- { ChampionsEnum.KALISTA, 4 },
- { ChampionsEnum.KARMA, 4 },
- { ChampionsEnum.NAMI, 4 },
- { ChampionsEnum.NASUS, 4 },
- { ChampionsEnum.OLAF, 4 },
- { ChampionsEnum.RAKAN, 4 },
- { ChampionsEnum.RYZE, 4 },
- { ChampionsEnum.TAHMKENCH, 4 },
- { ChampionsEnum.TARIC, 4 },
- { ChampionsEnum.VARUS, 4 },
- { ChampionsEnum.BRIAR, 5 },
- { ChampionsEnum.CAMILLE, 5 },
- { ChampionsEnum.DIANA, 5 },
- { ChampionsEnum.MILLIO, 5 },
- { ChampionsEnum.MORGANA, 5 },
- { ChampionsEnum.NORRA, 5 },
- { ChampionsEnum.SMOLDER, 5 },
- { ChampionsEnum.XERATH, 5 },
+ { (long)ChampionsEnum.ASHE, 1 },
+ { (long)ChampionsEnum.BLITZCRANK, 1 },
+ { (long)ChampionsEnum.ELISE, 1 },
+ { (long)ChampionsEnum.JAX, 1 },
+ { (long)ChampionsEnum.JAYCE, 1 },
+ { (long)ChampionsEnum.LILLIA, 1 },
+ { (long)ChampionsEnum.NOMSY, 1 },
+ { (long)ChampionsEnum.POPPY, 1 },
+ { (long)ChampionsEnum.SERAPHINE, 1 },
+ { (long)ChampionsEnum.SORAKA, 1 },
+ { (long)ChampionsEnum.TWITCH, 1 },
+ { (long)ChampionsEnum.WARWICK, 1 },
+ { (long)ChampionsEnum.ZIGGS, 1 },
+ { (long)ChampionsEnum.ZOE, 1 },
+ { (long)ChampionsEnum.AHRI, 2 },
+ { (long)ChampionsEnum.AKALI, 2 },
+ { (long)ChampionsEnum.CASSIOPEIA, 2 },
+ { (long)ChampionsEnum.GALIO, 2 },
+ { (long)ChampionsEnum.KASSADIN, 2 },
+ { (long)ChampionsEnum.KOGMAW, 2 },
+ { (long)ChampionsEnum.NILAH, 2 },
+ { (long)ChampionsEnum.NUNU, 2 },
+ { (long)ChampionsEnum.RUMBLE, 2 },
+ { (long)ChampionsEnum.SHYVANA, 2 },
+ { (long)ChampionsEnum.SYNDRA, 2 },
+ { (long)ChampionsEnum.TRISTANA, 2 },
+ { (long)ChampionsEnum.ZILEAN, 2 },
+ { (long)ChampionsEnum.BARD, 3 },
+ { (long)ChampionsEnum.EZREAL, 3 },
+ { (long)ChampionsEnum.HECARIM, 3 },
+ { (long)ChampionsEnum.HWEI, 3 },
+ { (long)ChampionsEnum.JINX, 3 },
+ { (long)ChampionsEnum.KATARINA, 3 },
+ { (long)ChampionsEnum.MORDEKAISER, 3 },
+ { (long)ChampionsEnum.NEEKO, 3 },
+ { (long)ChampionsEnum.SHEN, 3 },
+ { (long)ChampionsEnum.SWAIN, 3 },
+ { (long)ChampionsEnum.VEIGAR, 3 },
+ { (long)ChampionsEnum.VEX, 3 },
+ { (long)ChampionsEnum.WUKONG, 3 },
+ { (long)ChampionsEnum.FIORA, 4 },
+ { (long)ChampionsEnum.GWEN, 4 },
+ { (long)ChampionsEnum.KALISTA, 4 },
+ { (long)ChampionsEnum.KARMA, 4 },
+ { (long)ChampionsEnum.NAMI, 4 },
+ { (long)ChampionsEnum.NASUS, 4 },
+ { (long)ChampionsEnum.OLAF, 4 },
+ { (long)ChampionsEnum.RAKAN, 4 },
+ { (long)ChampionsEnum.RYZE, 4 },
+ { (long)ChampionsEnum.TAHMKENCH, 4 },
+ { (long)ChampionsEnum.TARIC, 4 },
+ { (long)ChampionsEnum.VARUS, 4 },
+ { (long)ChampionsEnum.BRIAR, 5 },
+ { (long)ChampionsEnum.CAMILLE, 5 },
+ { (long)ChampionsEnum.DIANA, 5 },
+ { (long)ChampionsEnum.MILLIO, 5 },
+ { (long)ChampionsEnum.MORGANA, 5 },
+ { (long)ChampionsEnum.NORRA, 5 },
+ { (long)ChampionsEnum.SMOLDER, 5 },
+ { (long)ChampionsEnum.XERATH, 5 },
};
- public static Dictionary> TraitsSteps = new Dictionary<
- TraitsEnum,
- List
- >
+ public static Dictionary> TraitsSteps = new Dictionary>
{
{
- TraitsEnum.ARCANA,
- new List { 1, 2, 3, 4, 5 }
+ (int)TraitsEnum.ARCANA,
+ new List { 2, 3, 4, 5 }
},
{
- TraitsEnum.CHRONO,
+ (int)TraitsEnum.CHRONO,
new List { 2, 4, 6 }
},
{
- TraitsEnum.DRAGON,
+ (int)TraitsEnum.DRAGON,
new List { 2, 3 }
},
{
- TraitsEnum.DRUID,
+ (int)TraitsEnum.DRUID,
new List { 1 }
},
{
- TraitsEnum.ELDRICHT,
+ (int)TraitsEnum.ELDRICHT,
new List { 3, 5, 7, 10 }
},
{
- TraitsEnum.FAERIE,
+ (int)TraitsEnum.FAERIE,
new List { 3, 5, 7, 9 }
},
{
- TraitsEnum.FROST,
+ (int)TraitsEnum.FROST,
new List { 3, 5, 7, 9 }
},
{
- TraitsEnum.HONEYMANCY,
+ (int)TraitsEnum.HONEYMANCY,
new List { 3, 5, 7 }
},
{
- TraitsEnum.PORTAL,
+ (int)TraitsEnum.PORTAL,
new List { 3, 6, 8, 10 }
},
{
- TraitsEnum.PYRO,
+ (int)TraitsEnum.PYRO,
new List { 2, 3, 4, 5 }
},
{
- TraitsEnum.SUGARCRAFT,
+ (int)TraitsEnum.SUGARCRAFT,
new List { 2, 4, 6 }
},
{
- TraitsEnum.WITCHCRAFT,
+ (int)TraitsEnum.WITCHCRAFT,
new List { 2, 4, 6, 8 }
},
{
- TraitsEnum.BASTION,
+ (int)TraitsEnum.BASTION,
new List { 2, 4, 6, 8 }
},
{
- TraitsEnum.BLASTER,
+ (int)TraitsEnum.BLASTER,
new List { 2, 4, 6 }
},
{
- TraitsEnum.HUNTER,
+ (int)TraitsEnum.HUNTER,
new List { 2, 4, 6 }
},
{
- TraitsEnum.INCANTATOR,
+ (int)TraitsEnum.INCANTATOR,
new List { 2, 4 }
},
{
- TraitsEnum.MAGE,
+ (int)TraitsEnum.MAGE,
new List { 3, 5, 7, 10 }
},
{
- TraitsEnum.MULTISTRIKER,
+ (int)TraitsEnum.MULTISTRIKER,
new List { 3, 5, 7, 9 }
},
{
- TraitsEnum.PRESERVER,
+ (int)TraitsEnum.PRESERVER,
new List { 2, 3, 4, 5 }
},
{
- TraitsEnum.SCHOLAR,
+ (int)TraitsEnum.SCHOLAR,
new List { 2, 4, 6 }
},
{
- TraitsEnum.SHAPESHIFTER,
+ (int)TraitsEnum.SHAPESHIFTER,
new List { 2, 4, 6, 8 }
},
{
- TraitsEnum.VANGUARD,
+ (int)TraitsEnum.VANGUARD,
new List { 2, 4, 6 }
},
{
- TraitsEnum.WARRIOR,
+ (int)TraitsEnum.WARRIOR,
new List { 2, 4, 6 }
},
};
- public bool TestMappingCoherence()
- {
- foreach (var champTraits in ChampsTraits)
- {
- foreach (var trait in champTraits.Value)
- {
- if (!TraitsChamp[trait].Contains(champTraits.Key))
- {
- Debug.Log($"Error in {champTraits.Key} with {champTraits.Value}");
- return false;
- }
- }
- }
+ public static Dictionary minimalActivation = TraitsSteps.ToDictionary(
+ kvp => kvp.Key,
+ kvp => kvp.Value[0]
+ );
- foreach (var traitChamps in TraitsChamp)
- {
- foreach (var champ in traitChamps.Value)
- {
- if (!ChampsTraits[champ].Contains(traitChamps.Key))
- {
- Debug.Log($"Error in {traitChamps.Key} with {traitChamps.Value}");
- return false;
- }
- }
- }
- return true;
+ public bool TraitEnabled(int trait, int traitChampCount)
+ {
+ return traitChampCount >= minimalActivation[trait];
}
- public bool TraitEnabled(TraitsEnum trait, int traitChampCount)
+ ///
+ /// first int is the trait, second int is the number of champions with this trait
+ ///
+ ///
+ ///
+ public static Dictionary TraitCountInCompo(long compo)
{
- return traitChampCount >= TraitsSteps[trait][0];
- }
-
- public static Dictionary TraitCountInCompo(HashSet compo)
- {
- Dictionary synergies = new Dictionary();
- foreach (var champ in compo)
+ Dictionary synergies = new Dictionary();
+ for (int i = 0; i < 64; i++)
{
- var traits = ChampsTraits[champ];
- foreach (TraitsEnum trait in traits)
+ if ((compo & (1L << i)) != 0)
{
- if (synergies.ContainsKey(trait))
+ var champ = (long)i;
+ var traits = ChampsTraits[champ];
+ // combine the traits within synergies using bitwise operation
+ for (int trait = 0; trait < 22; trait++)
{
- synergies[trait]++;
- }
- else
- {
- synergies[trait] = 1;
+ if ((traits & (1 << trait)) != 0)
+ {
+ if (synergies.ContainsKey(trait))
+ {
+ synergies[trait]++;
+ }
+ else
+ {
+ synergies.Add(trait, 1);
+ }
+ }
}
}
}
+
return synergies;
}
- public static HashSet FilterActiveTraits(Dictionary synergies)
+ ///
+ /// first int is trait, second int is the number of champions with this trait
+ /// output is int of the flag of active traits
+ ///
+ ///
+ ///
+ public static int FilterActiveTraits(Dictionary synergies)
{
- HashSet output = new HashSet();
+ int output = 0;
foreach (var kvp in synergies)
{
- int minActivation = TraitsSteps[kvp.Key][0];
- if (kvp.Value >= minActivation)
+ if (kvp.Value >= minimalActivation[kvp.Key])
{
- output.Add(kvp.Key);
+ output |= kvp.Key;
}
}
return output;
}
- public static Dictionary MergeEmblems(
- Dictionary synergies,
- Dictionary additionalEmblems
+ ///
+ /// trait is the trait, count is the number of champions with this trait
+ ///
+ ///
+ ///
+ ///
+ public static Dictionary MergeEmblems(
+ Dictionary synergies,
+ Dictionary additionalEmblems
)
{
- Dictionary mergedEmblems = new Dictionary();
+ Dictionary mergedEmblems = new Dictionary();
mergedEmblems = synergies
.Concat(additionalEmblems)
@@ -795,24 +912,10 @@ namespace Assets.Data
void Start()
{
- var champList = new HashSet()
- {
- ChampionsEnum.ASHE,
- ChampionsEnum.BLITZCRANK,
- ChampionsEnum.ELISE,
- ChampionsEnum.JAX,
- ChampionsEnum.SERAPHINE,
- };
- var combination = GetChampionSubsets(champList, 3);
- Debug.Log(DisplayComposition(champList));
-
- Debug.Log("----------------------");
- foreach (var compo in combination)
- {
- Debug.Log(DisplayComposition(compo));
- }
}
+
+
public void DisplayTraits(Dictionary traits)
{
foreach (var kvp in traits)
@@ -831,66 +934,51 @@ namespace Assets.Data
return sb.ToString();
}
- public static IEnumerator GetChampionSubsetsAsync(
- HashSet champs,
- int size,
- Dictionary emblemList,
- System.Action> onCombinationGenerated
- )
- {
- if (size == 0)
- {
- onCombinationGenerated(new HashSet());
- yield break;
- }
+ // public static IEnumerator GetChampionSubsetsAsync(
+ // long possibleChamp,
+ // long mandatoryChamps,
+ // int size,
+ // Dictionary emblemList,
+ // System.Action onCombinationGenerated
+ // )
+ // {
+ // List possibleChampList = new List();
+ // foreach (var champ in ChampsTraits.Keys)
+ // {
+ // if ((possibleChamp & champ) != 0)
+ // {
+ // possibleChampList.Add(champ);
+ // }
+ // }
- List champList = champs.ToList();
+ // int n = possibleChampList.Count;
+ // }
- // Handle the edge case when size is greater than the number of available champions.
- if (size > champList.Count)
- {
- yield break; // No valid subsets if size is too large.
- }
+ ///
+ /// Create a list of compositions based on the possible champions, mandatory champions, size of the composition, and the list of emblems.
+ /// each composition much contain all mandatory champs, and can contain any number of possible champs.
+ /// No other champions are allowed in the composition.
+ /// Composition is stored in the shape of a long, where each bit represents a champion.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ // ///
+ // public static List GetCompositionList(
+ // long possibleChamp,
+ // long mandatoryChamps,
+ // int size,
+ // Dictionary emblemList,
+ // System.Action