Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ SettleWaterAt()

static void Terraria.Liquid.SettleWaterAt ( int originX,
int originY )
inlinestaticprivate

Definition at line 145 of file Liquid.cs.

146 {
147 Tile tile = Main.tile[originX, originY];
149 if (tile.liquid == 0)
150 {
151 return;
152 }
153 int num = originX;
154 int num2 = originY;
155 bool tileAtXYHasLava = tile.lava();
156 bool flag = tile.honey();
157 bool flag2 = tile.shimmer();
158 int num3 = tile.liquid;
159 byte b = tile.liquidType();
160 tile.liquid = 0;
161 bool flag3 = true;
162 while (true)
163 {
164 Tile tile2 = Main.tile[num, num2 + 1];
165 bool flag4 = false;
166 while (num2 < Main.maxTilesY - 5 && tile2.liquid == 0 && (!tile2.nactive() || !Main.tileSolid[tile2.type] || Main.tileSolidTop[tile2.type]))
167 {
168 num2++;
169 flag4 = true;
170 flag3 = false;
171 tile2 = Main.tile[num, num2 + 1];
172 }
173 if (WorldGen.gen && flag4 && !flag && !flag2)
174 {
175 if (WorldGen.remixWorldGen)
176 {
177 b = ((num2 > GenVars.lavaLine && ((double)num2 < Main.rockLayer - 80.0 || num2 > Main.maxTilesY - 350) && !WorldGen.oceanDepths(num, num2)) ? ((byte)1) : ((byte)0));
178 }
179 else if (num2 > GenVars.waterLine)
180 {
181 b = 1;
182 }
183 }
184 int num4 = -1;
185 int num5 = 0;
186 int num6 = -1;
187 int num7 = 0;
188 bool flag5 = false;
189 bool flag6 = false;
190 bool flag7 = false;
191 while (true)
192 {
193 if (Main.tile[num + num5 * num4, num2].liquid == 0)
194 {
195 num6 = num4;
196 num7 = num5;
197 }
198 if (num4 == -1 && num + num5 * num4 < 5)
199 {
200 flag6 = true;
201 }
202 else if (num4 == 1 && num + num5 * num4 > Main.maxTilesX - 5)
203 {
204 flag5 = true;
205 }
206 tile2 = Main.tile[num + num5 * num4, num2 + 1];
207 if (tile2.liquid != 0 && tile2.liquid != byte.MaxValue && tile2.liquidType() == b)
208 {
209 int num8 = 255 - tile2.liquid;
210 if (num8 > num3)
211 {
212 num8 = num3;
213 }
214 tile2.liquid += (byte)num8;
215 num3 -= num8;
216 if (num3 == 0)
217 {
218 break;
219 }
220 }
221 if (num2 < Main.maxTilesY - 5 && tile2.liquid == 0 && (!tile2.nactive() || !Main.tileSolid[tile2.type] || Main.tileSolidTop[tile2.type]))
222 {
223 flag7 = true;
224 break;
225 }
226 Tile tile3 = Main.tile[num + (num5 + 1) * num4, num2];
227 if ((tile3.liquid != 0 && (!flag3 || num4 != 1)) || (tile3.nactive() && Main.tileSolid[tile3.type] && !Main.tileSolidTop[tile3.type]))
228 {
229 if (num4 == 1)
230 {
231 flag5 = true;
232 }
233 else
234 {
235 flag6 = true;
236 }
237 }
238 if (flag6 && flag5)
239 {
240 break;
241 }
242 if (flag5)
243 {
244 num4 = -1;
245 num5++;
246 }
247 else if (flag6)
248 {
249 if (num4 == 1)
250 {
251 num5++;
252 }
253 num4 = 1;
254 }
255 else
256 {
257 if (num4 == 1)
258 {
259 num5++;
260 }
261 num4 = -num4;
262 }
263 }
264 num += num7 * num6;
265 if (num3 == 0 || !flag7)
266 {
267 break;
268 }
269 num2++;
270 }
271 Main.tile[num, num2].liquid = (byte)num3;
272 Main.tile[num, num2].liquidType(b);
273 if (Main.tile[num, num2].liquid > 0)
274 {
276 AttemptToMoveHoney(num, num2, flag);
278 }
280 }
static void AttemptToMoveShimmer(int X, int Y, bool tileAtXYHasShimmer)
Definition Liquid.cs:378
static void tilesIgnoreWater(bool ignoreSolids)
Definition Liquid.cs:67
static void AttemptToMoveHoney(int X, int Y, bool tileAtXYHasHoney)
Definition Liquid.cs:282
static void AttemptToMoveLava(int X, int Y, bool tileAtXYHasLava)
Definition Liquid.cs:330

References Terraria.Liquid.AttemptToMoveHoney(), Terraria.Liquid.AttemptToMoveLava(), Terraria.Liquid.AttemptToMoveShimmer(), Terraria.WorldGen.gen, Terraria.Tile.honey(), Terraria.Tile.lava(), Terraria.Tile.liquid, Terraria.Tile.liquidType(), Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.WorldGen.oceanDepths(), Terraria.WorldGen.remixWorldGen, Terraria.Tile.shimmer(), Terraria.Main.tile, Terraria.Liquid.tilesIgnoreWater(), Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, and Terraria.WorldBuilding.GenVars.waterLine.

Referenced by Terraria.Liquid.QuickWater().