TModLoader v1.4.4.9
TModLoader source code documentation
Loading...
Searching...
No Matches
FlexibleTileWand.cs
Go to the documentation of this file.
1using System.Collections.Generic;
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
42
45
48
50
52
53 public void AddVariation(int itemType, int tileIdToPlace, int tileStyleToPlace)
54 {
55 if (!_options.TryGetValue(itemType, out var value))
56 {
57 OptionBucket optionBucket2 = (_options[itemType] = new OptionBucket(itemType));
58 value = optionBucket2;
59 }
60 value.Options.Add(new PlacementOption
61 {
62 TileIdToPlace = tileIdToPlace,
63 TileStyleToPlace = tileStyleToPlace
64 });
65 }
66
67 public void AddVariations(int itemType, int tileIdToPlace, params int[] stylesToPlace)
68 {
69 foreach (int tileStyleToPlace in stylesToPlace)
70 {
72 }
73 }
74
75 public void AddVariations_ByRow(int itemType, int tileIdToPlace, int variationsPerRow, params int[] rows)
76 {
77 for (int i = 0; i < rows.Length; i++)
78 {
79 for (int j = 0; j < variationsPerRow; j++)
80 {
83 }
84 }
85 }
86
88 {
89 option = null;
90 itemToConsume = null;
91 Item[] inventory = player.inventory;
92 for (int i = 0; i < 58; i++)
93 {
94 if (i < 50 || i >= 54)
95 {
96 Item item = inventory[i];
97 if (!item.IsAir && _options.TryGetValue(item.type, out var value))
98 {
100 option = value.GetOptionWithCycling(selectCycleOffset);
101 itemToConsume = item;
102 return true;
103 }
104 }
105 }
106 return false;
107 }
108
110 {
112 int tileIdToPlace = 647;
113 flexibleTileWand.AddVariations(154, tileIdToPlace, 0, 1, 2, 3, 4, 5, 6);
114 flexibleTileWand.AddVariations(3, tileIdToPlace, 7, 8, 9, 10, 11, 12, 13, 14, 15);
115 flexibleTileWand.AddVariations(71, tileIdToPlace, 16, 17);
116 flexibleTileWand.AddVariations(72, tileIdToPlace, 18, 19);
117 flexibleTileWand.AddVariations(73, tileIdToPlace, 20, 21);
118 flexibleTileWand.AddVariations(9, tileIdToPlace, 22, 23, 24, 25);
119 flexibleTileWand.AddVariations(593, tileIdToPlace, 26, 27, 28, 29, 30, 31);
120 flexibleTileWand.AddVariations(183, tileIdToPlace, 32, 33, 34);
121 tileIdToPlace = 648;
122 flexibleTileWand.AddVariations(195, tileIdToPlace, 0, 1, 2);
123 flexibleTileWand.AddVariations(195, tileIdToPlace, 3, 4, 5);
124 flexibleTileWand.AddVariations(174, tileIdToPlace, 6, 7, 8);
125 flexibleTileWand.AddVariations(150, tileIdToPlace, 9, 10, 11, 12, 13);
126 flexibleTileWand.AddVariations(3, tileIdToPlace, 14, 15, 16);
127 flexibleTileWand.AddVariations(989, tileIdToPlace, 17);
128 flexibleTileWand.AddVariations(1101, tileIdToPlace, 18, 19, 20);
129 flexibleTileWand.AddVariations(9, tileIdToPlace, 21, 22);
130 flexibleTileWand.AddVariations(9, tileIdToPlace, 23, 24, 25, 26, 27, 28);
131 flexibleTileWand.AddVariations(3271, tileIdToPlace, 29, 30, 31, 32, 33, 34);
132 flexibleTileWand.AddVariations(3086, tileIdToPlace, 35, 36, 37, 38, 39, 40);
133 flexibleTileWand.AddVariations(3081, tileIdToPlace, 41, 42, 43, 44, 45, 46);
134 flexibleTileWand.AddVariations(62, tileIdToPlace, 47, 48, 49);
135 flexibleTileWand.AddVariations(62, tileIdToPlace, 50, 51);
136 flexibleTileWand.AddVariations(154, tileIdToPlace, 52, 53, 54);
137 tileIdToPlace = 651;
138 flexibleTileWand.AddVariations(195, tileIdToPlace, 0, 1, 2);
139 flexibleTileWand.AddVariations(62, tileIdToPlace, 3, 4, 5);
140 flexibleTileWand.AddVariations(331, tileIdToPlace, 6, 7, 8);
141 return flexibleTileWand;
142 }
143
145 {
147 ushort tileIdToPlace = 652;
148 flexibleTileWand.AddVariations(195, tileIdToPlace, 0, 1, 2);
149 flexibleTileWand.AddVariations(62, tileIdToPlace, 3, 4, 5);
150 flexibleTileWand.AddVariations(331, tileIdToPlace, 6, 7, 8, 9, 10, 11);
151 tileIdToPlace = 649;
152 flexibleTileWand.AddVariations(3, tileIdToPlace, 0, 1, 2, 3, 4, 5);
153 flexibleTileWand.AddVariations(154, tileIdToPlace, 6, 7, 8, 9, 10);
154 flexibleTileWand.AddVariations(154, tileIdToPlace, 11, 12, 13, 14, 15);
155 flexibleTileWand.AddVariations(71, tileIdToPlace, 16);
156 flexibleTileWand.AddVariations(72, tileIdToPlace, 17);
157 flexibleTileWand.AddVariations(73, tileIdToPlace, 18);
158 flexibleTileWand.AddVariations(181, tileIdToPlace, 19);
159 flexibleTileWand.AddVariations(180, tileIdToPlace, 20);
160 flexibleTileWand.AddVariations(177, tileIdToPlace, 21);
161 flexibleTileWand.AddVariations(179, tileIdToPlace, 22);
162 flexibleTileWand.AddVariations(178, tileIdToPlace, 23);
163 flexibleTileWand.AddVariations(182, tileIdToPlace, 24);
164 flexibleTileWand.AddVariations(593, tileIdToPlace, 25, 26, 27, 28, 29, 30);
165 flexibleTileWand.AddVariations(9, tileIdToPlace, 31, 32, 33);
166 flexibleTileWand.AddVariations(150, tileIdToPlace, 34, 35, 36, 37);
167 flexibleTileWand.AddVariations(3, tileIdToPlace, 38, 39, 40);
168 flexibleTileWand.AddVariations(3271, tileIdToPlace, 41, 42, 43, 44, 45, 46);
169 flexibleTileWand.AddVariations(3086, tileIdToPlace, 47, 48, 49, 50, 51, 52);
170 flexibleTileWand.AddVariations(3081, tileIdToPlace, 53, 54, 55, 56, 57, 58);
171 flexibleTileWand.AddVariations(62, tileIdToPlace, 59, 60, 61);
172 flexibleTileWand.AddVariations(169, tileIdToPlace, 62, 63, 64);
173 return flexibleTileWand;
174 }
175
177 {
179 ushort tileIdToPlace = 650;
180 flexibleTileWand.AddVariations(3, tileIdToPlace, 0, 1, 2, 3, 4, 5);
181 flexibleTileWand.AddVariations(2, tileIdToPlace, 6, 7, 8, 9, 10, 11);
182 flexibleTileWand.AddVariations(154, tileIdToPlace, 12, 13, 14, 15, 16, 17, 18, 19);
183 flexibleTileWand.AddVariations(154, tileIdToPlace, 20, 21, 22, 23, 24, 25, 26, 27);
184 flexibleTileWand.AddVariations(9, tileIdToPlace, 28, 29, 30, 31, 32);
185 flexibleTileWand.AddVariations(9, tileIdToPlace, 33, 34, 35);
186 flexibleTileWand.AddVariations(593, tileIdToPlace, 36, 37, 38, 39, 40, 41);
187 flexibleTileWand.AddVariations(664, tileIdToPlace, 42, 43, 44, 45, 46, 47);
188 flexibleTileWand.AddVariations(150, tileIdToPlace, 48, 49, 50, 51, 52, 53);
189 flexibleTileWand.AddVariations(3271, tileIdToPlace, 54, 55, 56, 57, 58, 59);
190 flexibleTileWand.AddVariations(3086, tileIdToPlace, 60, 61, 62, 63, 64, 65);
191 flexibleTileWand.AddVariations(3081, tileIdToPlace, 66, 67, 68, 69, 70, 71);
192 flexibleTileWand.AddVariations(62, tileIdToPlace, 72);
193 flexibleTileWand.AddVariations(169, tileIdToPlace, 73, 74, 75, 76);
194 return flexibleTileWand;
195 }
196
197 public static void ForModders_AddPotsToWand(FlexibleTileWand wand, ref int echoPileStyle, ref ushort tileType)
198 {
199 int variationsPerRow = 3;
200 echoPileStyle = 0;
201 tileType = 653;
202 wand.AddVariations_ByRow(133, tileType, variationsPerRow, 0, 1, 2, 3);
203 wand.AddVariations_ByRow(664, tileType, variationsPerRow, 4, 5, 6);
204 wand.AddVariations_ByRow(176, tileType, variationsPerRow, 7, 8, 9);
205 wand.AddVariations_ByRow(154, tileType, variationsPerRow, 10, 11, 12);
206 wand.AddVariations_ByRow(173, tileType, variationsPerRow, 13, 14, 15);
207 wand.AddVariations_ByRow(61, tileType, variationsPerRow, 16, 17, 18);
208 wand.AddVariations_ByRow(150, tileType, variationsPerRow, 19, 20, 21);
209 wand.AddVariations_ByRow(836, tileType, variationsPerRow, 22, 23, 24);
210 wand.AddVariations_ByRow(607, tileType, variationsPerRow, 25, 26, 27);
211 wand.AddVariations_ByRow(1101, tileType, variationsPerRow, 28, 29, 30);
212 wand.AddVariations_ByRow(3081, tileType, variationsPerRow, 31, 32, 33);
213 wand.AddVariations_ByRow(607, tileType, variationsPerRow, 34, 35, 36);
214 }
215
222}
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
Used by the Rubblemaker item to place fake versions of 1x1 rubble tiles. Technically it can place any...
static FlexibleTileWand RubblePlacementMedium
Used by the Rubblemaker item to place fake versions of 2x1 rubble tiles. Technically it can place any...
void AddVariations_ByRow(int itemType, int tileIdToPlace, int variationsPerRow, params int[] rows)
static FlexibleTileWand RubblePlacementLarge
Used by the Rubblemaker item to place fake versions of 3x2 rubble tiles. Technically it can place any...
static void ForModders_AddPotsToWand(FlexibleTileWand wand, ref int echoPileStyle, ref ushort tileType)
static FlexibleTileWand CreateRubblePlacerMedium()
bool IsAir
Definition Item.cs:965
int type
The Item ID of this item. The Item ID is a unique number assigned to each Item loaded into the game....
Definition Item.cs:345
Item[] inventory
The player's normal inventory. Indexes 0-9 hold the hotbar items, 10-49 the rest of the main inventor...
Definition Player.cs:1767