Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ItemVariants.cs
Go to the documentation of this file.
2using System.Linq;
3using Terraria.ID;
5
7
8public static class ItemVariants
9{
10 public class VariantEntry
11 {
12 public readonly ItemVariant Variant;
13
15
17
22
24 {
25 _conditions.AddRange(conditions);
26 }
27
28 public bool AnyConditionMet()
29 {
30 return Conditions.Any((ItemVariantCondition c) => c.IsMet());
31 }
32 }
33
34 private static List<VariantEntry>[] _variants;
35
37
39
41
43
45
47
49
51
52 public static IEnumerable<VariantEntry> GetVariants(int itemId)
53 {
54 if (!_variants.IndexInRange(itemId))
55 {
56 return Enumerable.Empty<VariantEntry>();
57 }
59 return enumerable ?? Enumerable.Empty<VariantEntry>();
60 }
61
62 private static VariantEntry GetEntry(int itemId, ItemVariant variant)
63 {
64 return GetVariants(itemId).SingleOrDefault((VariantEntry v) => v.Variant == variant);
65 }
66
67 public static void AddVariant(int itemId, ItemVariant variant, params ItemVariantCondition[] conditions)
68 {
70 if (variantEntry == null)
71 {
72 List<VariantEntry> list = _variants[itemId];
73 if (list == null)
74 {
75 list = (_variants[itemId] = new List<VariantEntry>());
76 }
77 list.Add(variantEntry = new VariantEntry(variant));
78 }
79 variantEntry.AddConditions(conditions);
80 }
81
82 public static bool HasVariant(int itemId, ItemVariant variant)
83 {
84 return GetEntry(itemId, variant) != null;
85 }
86
87 public static ItemVariant SelectVariant(int itemId)
88 {
89 if (!_variants.IndexInRange(itemId))
90 {
91 return null;
92 }
93 List<VariantEntry> list = _variants[itemId];
94 if (list == null)
95 {
96 return null;
97 }
98 foreach (VariantEntry item in list)
99 {
100 if (item.AnyConditionMet())
101 {
102 return item.Variant;
103 }
104 }
105 return null;
106 }
107
109 {
111 StrongerVariant = new ItemVariant(NetworkText.FromKey("ItemVariant.Stronger"));
112 WeakerVariant = new ItemVariant(NetworkText.FromKey("ItemVariant.Weaker"));
113 RebalancedVariant = new ItemVariant(NetworkText.FromKey("ItemVariant.Rebalanced"));
114 EnabledVariant = new ItemVariant(NetworkText.FromKey("ItemVariant.Enabled"));
115 DisabledBossSummonVariant = new ItemVariant(NetworkText.FromKey("ItemVariant.DisabledBossSummon"));
116 RemixWorld = new ItemVariantCondition(NetworkText.FromKey("ItemVariantCondition.RemixWorld"), () => Main.remixWorld);
117 GetGoodWorld = new ItemVariantCondition(NetworkText.FromKey("ItemVariantCondition.GetGoodWorld"), () => Main.getGoodWorld);
118 EverythingWorld = new ItemVariantCondition(NetworkText.FromKey("ItemVariantCondition.EverythingWorld"), () => Main.getGoodWorld && Main.remixWorld);
144 }
145}
void AddRange(IEnumerable< KeyValuePair< TKey, TValue > > collection)
IEnumerable< ItemVariantCondition > Conditions
readonly List< ItemVariantCondition > _conditions
void AddConditions(IEnumerable< ItemVariantCondition > conditions)
static void AddVariant(int itemId, ItemVariant variant, params ItemVariantCondition[] conditions)
static ItemVariantCondition GetGoodWorld
static List< VariantEntry >[] _variants
static ItemVariantCondition EverythingWorld
static ItemVariant SelectVariant(int itemId)
static ItemVariantCondition RemixWorld
static bool HasVariant(int itemId, ItemVariant variant)
static IEnumerable< VariantEntry > GetVariants(int itemId)
static VariantEntry GetEntry(int itemId, ItemVariant variant)
static readonly short Count
Definition ItemID.cs:12138
static NetworkText FromKey(string key, params object[] substitutions)
static bool getGoodWorld
Definition Main.cs:341
static bool remixWorld
Definition Main.cs:349