Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
FlexibleTileWand.cs
Go to the documentation of this file.
3
5
6public class FlexibleTileWand
7{
8 private class OptionBucket
9 {
11
13
19
21 {
22 return Options[random.Next(Options.Count)];
23 }
24
26 {
27 int count = Options.Count;
28 int index = (cycleOffset % count + count) % count;
29 return Options[index];
30 }
31 }
32
33 public class PlacementOption
34 {
35 public int TileIdToPlace;
36
37 public int TileStyleToPlace;
38 }
39
41
43
45
47
49
51 {
52 if (!_options.TryGetValue(itemType, out var value))
53 {
55 value = optionBucket2;
56 }
57 value.Options.Add(new PlacementOption
58 {
59 TileIdToPlace = tileIdToPlace,
60 TileStyleToPlace = tileStyleToPlace
61 });
62 }
63
71
73 {
74 for (int i = 0; i < rows.Length; i++)
75 {
76 for (int j = 0; j < variationsPerRow; j++)
77 {
80 }
81 }
82 }
83
85 {
86 option = null;
87 itemToConsume = null;
88 Item[] inventory = player.inventory;
89 for (int i = 0; i < 58; i++)
90 {
91 if (i < 50 || i >= 54)
92 {
93 Item item = inventory[i];
94 if (!item.IsAir && _options.TryGetValue(item.type, out var value))
95 {
97 option = value.GetOptionWithCycling(selectCycleOffset);
98 itemToConsume = item;
99 return true;
100 }
101 }
102 }
103 return false;
104 }
105
107 {
109 int tileIdToPlace = 647;
110 flexibleTileWand.AddVariations(154, tileIdToPlace, 0, 1, 2, 3, 4, 5, 6);
111 flexibleTileWand.AddVariations(3, tileIdToPlace, 7, 8, 9, 10, 11, 12, 13, 14, 15);
112 flexibleTileWand.AddVariations(71, tileIdToPlace, 16, 17);
113 flexibleTileWand.AddVariations(72, tileIdToPlace, 18, 19);
114 flexibleTileWand.AddVariations(73, tileIdToPlace, 20, 21);
115 flexibleTileWand.AddVariations(9, tileIdToPlace, 22, 23, 24, 25);
116 flexibleTileWand.AddVariations(593, tileIdToPlace, 26, 27, 28, 29, 30, 31);
117 flexibleTileWand.AddVariations(183, tileIdToPlace, 32, 33, 34);
118 tileIdToPlace = 648;
119 flexibleTileWand.AddVariations(195, tileIdToPlace, 0, 1, 2);
120 flexibleTileWand.AddVariations(195, tileIdToPlace, 3, 4, 5);
121 flexibleTileWand.AddVariations(174, tileIdToPlace, 6, 7, 8);
122 flexibleTileWand.AddVariations(150, tileIdToPlace, 9, 10, 11, 12, 13);
123 flexibleTileWand.AddVariations(3, tileIdToPlace, 14, 15, 16);
124 flexibleTileWand.AddVariations(989, tileIdToPlace, 17);
125 flexibleTileWand.AddVariations(1101, tileIdToPlace, 18, 19, 20);
126 flexibleTileWand.AddVariations(9, tileIdToPlace, 21, 22);
127 flexibleTileWand.AddVariations(9, tileIdToPlace, 23, 24, 25, 26, 27, 28);
128 flexibleTileWand.AddVariations(3271, tileIdToPlace, 29, 30, 31, 32, 33, 34);
129 flexibleTileWand.AddVariations(3086, tileIdToPlace, 35, 36, 37, 38, 39, 40);
130 flexibleTileWand.AddVariations(3081, tileIdToPlace, 41, 42, 43, 44, 45, 46);
131 flexibleTileWand.AddVariations(62, tileIdToPlace, 47, 48, 49);
132 flexibleTileWand.AddVariations(62, tileIdToPlace, 50, 51);
133 flexibleTileWand.AddVariations(154, tileIdToPlace, 52, 53, 54);
134 tileIdToPlace = 651;
135 flexibleTileWand.AddVariations(195, tileIdToPlace, 0, 1, 2);
136 flexibleTileWand.AddVariations(62, tileIdToPlace, 3, 4, 5);
137 flexibleTileWand.AddVariations(331, tileIdToPlace, 6, 7, 8);
138 return flexibleTileWand;
139 }
140
142 {
144 ushort tileIdToPlace = 652;
145 flexibleTileWand.AddVariations(195, tileIdToPlace, 0, 1, 2);
146 flexibleTileWand.AddVariations(62, tileIdToPlace, 3, 4, 5);
147 flexibleTileWand.AddVariations(331, tileIdToPlace, 6, 7, 8, 9, 10, 11);
148 tileIdToPlace = 649;
149 flexibleTileWand.AddVariations(3, tileIdToPlace, 0, 1, 2, 3, 4, 5);
150 flexibleTileWand.AddVariations(154, tileIdToPlace, 6, 7, 8, 9, 10);
151 flexibleTileWand.AddVariations(154, tileIdToPlace, 11, 12, 13, 14, 15);
152 flexibleTileWand.AddVariations(71, tileIdToPlace, 16);
153 flexibleTileWand.AddVariations(72, tileIdToPlace, 17);
154 flexibleTileWand.AddVariations(73, tileIdToPlace, 18);
155 flexibleTileWand.AddVariations(181, tileIdToPlace, 19);
156 flexibleTileWand.AddVariations(180, tileIdToPlace, 20);
157 flexibleTileWand.AddVariations(177, tileIdToPlace, 21);
158 flexibleTileWand.AddVariations(179, tileIdToPlace, 22);
159 flexibleTileWand.AddVariations(178, tileIdToPlace, 23);
160 flexibleTileWand.AddVariations(182, tileIdToPlace, 24);
161 flexibleTileWand.AddVariations(593, tileIdToPlace, 25, 26, 27, 28, 29, 30);
162 flexibleTileWand.AddVariations(9, tileIdToPlace, 31, 32, 33);
163 flexibleTileWand.AddVariations(150, tileIdToPlace, 34, 35, 36, 37);
164 flexibleTileWand.AddVariations(3, tileIdToPlace, 38, 39, 40);
165 flexibleTileWand.AddVariations(3271, tileIdToPlace, 41, 42, 43, 44, 45, 46);
166 flexibleTileWand.AddVariations(3086, tileIdToPlace, 47, 48, 49, 50, 51, 52);
167 flexibleTileWand.AddVariations(3081, tileIdToPlace, 53, 54, 55, 56, 57, 58);
168 flexibleTileWand.AddVariations(62, tileIdToPlace, 59, 60, 61);
169 flexibleTileWand.AddVariations(169, tileIdToPlace, 62, 63, 64);
170 return flexibleTileWand;
171 }
172
174 {
176 ushort tileIdToPlace = 650;
177 flexibleTileWand.AddVariations(3, tileIdToPlace, 0, 1, 2, 3, 4, 5);
178 flexibleTileWand.AddVariations(2, tileIdToPlace, 6, 7, 8, 9, 10, 11);
179 flexibleTileWand.AddVariations(154, tileIdToPlace, 12, 13, 14, 15, 16, 17, 18, 19);
180 flexibleTileWand.AddVariations(154, tileIdToPlace, 20, 21, 22, 23, 24, 25, 26, 27);
181 flexibleTileWand.AddVariations(9, tileIdToPlace, 28, 29, 30, 31, 32);
182 flexibleTileWand.AddVariations(9, tileIdToPlace, 33, 34, 35);
183 flexibleTileWand.AddVariations(593, tileIdToPlace, 36, 37, 38, 39, 40, 41);
184 flexibleTileWand.AddVariations(664, tileIdToPlace, 42, 43, 44, 45, 46, 47);
185 flexibleTileWand.AddVariations(150, tileIdToPlace, 48, 49, 50, 51, 52, 53);
186 flexibleTileWand.AddVariations(3271, tileIdToPlace, 54, 55, 56, 57, 58, 59);
187 flexibleTileWand.AddVariations(3086, tileIdToPlace, 60, 61, 62, 63, 64, 65);
188 flexibleTileWand.AddVariations(3081, tileIdToPlace, 66, 67, 68, 69, 70, 71);
189 flexibleTileWand.AddVariations(62, tileIdToPlace, 72);
190 flexibleTileWand.AddVariations(169, tileIdToPlace, 73, 74, 75, 76);
191 return flexibleTileWand;
192 }
193
194 public static void ForModders_AddPotsToWand(FlexibleTileWand wand, ref int echoPileStyle, ref ushort tileType)
195 {
196 int variationsPerRow = 3;
197 echoPileStyle = 0;
198 tileType = 653;
199 wand.AddVariations_ByRow(133, tileType, variationsPerRow, 0, 1, 2, 3);
200 wand.AddVariations_ByRow(664, tileType, variationsPerRow, 4, 5, 6);
201 wand.AddVariations_ByRow(176, tileType, variationsPerRow, 7, 8, 9);
202 wand.AddVariations_ByRow(154, tileType, variationsPerRow, 10, 11, 12);
203 wand.AddVariations_ByRow(173, tileType, variationsPerRow, 13, 14, 15);
204 wand.AddVariations_ByRow(61, tileType, variationsPerRow, 16, 17, 18);
205 wand.AddVariations_ByRow(150, tileType, variationsPerRow, 19, 20, 21);
206 wand.AddVariations_ByRow(836, tileType, variationsPerRow, 22, 23, 24);
207 wand.AddVariations_ByRow(607, tileType, variationsPerRow, 25, 26, 27);
208 wand.AddVariations_ByRow(1101, tileType, variationsPerRow, 28, 29, 30);
209 wand.AddVariations_ByRow(3081, tileType, variationsPerRow, 31, 32, 33);
210 wand.AddVariations_ByRow(607, tileType, variationsPerRow, 34, 35, 36);
211 }
212}
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
PlacementOption GetOptionWithCycling(int cycleOffset)
PlacementOption GetRandomOption(UnifiedRandom random)
static FlexibleTileWand CreateRubblePlacerSmall()
bool TryGetPlacementOption(Player player, int randomSeed, int selectCycleOffset, out PlacementOption option, out Item itemToConsume)
Dictionary< int, OptionBucket > _options
void AddVariations(int itemType, int tileIdToPlace, params int[] stylesToPlace)
static FlexibleTileWand CreateRubblePlacerLarge()
void AddVariation(int itemType, int tileIdToPlace, int tileStyleToPlace)
static FlexibleTileWand RubblePlacementSmall
static FlexibleTileWand RubblePlacementMedium
void AddVariations_ByRow(int itemType, int tileIdToPlace, int variationsPerRow, params int[] rows)
static FlexibleTileWand RubblePlacementLarge
static void ForModders_AddPotsToWand(FlexibleTileWand wand, ref int echoPileStyle, ref ushort tileType)
static FlexibleTileWand CreateRubblePlacerMedium()
Item[] inventory
Definition Player.cs:1257