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

◆ LiquidCheck()

static void Terraria.Liquid.LiquidCheck ( int x,
int y,
int thisLiquidType )
inlinestatic

Definition at line 1225 of file Liquid.cs.

1226 {
1227 if (WorldGen.SolidTile(x, y))
1228 {
1229 return;
1230 }
1231 Tile tile = Main.tile[x - 1, y];
1232 Tile tile2 = Main.tile[x + 1, y];
1233 Tile tile3 = Main.tile[x, y - 1];
1234 Tile tile4 = Main.tile[x, y + 1];
1235 Tile tile5 = Main.tile[x, y];
1236 if ((tile.liquid > 0 && tile.liquidType() != thisLiquidType) || (tile2.liquid > 0 && tile2.liquidType() != thisLiquidType) || (tile3.liquid > 0 && tile3.liquidType() != thisLiquidType))
1237 {
1238 int num = 0;
1239 if (tile.liquidType() != thisLiquidType)
1240 {
1241 num += tile.liquid;
1242 tile.liquid = 0;
1243 }
1244 if (tile2.liquidType() != thisLiquidType)
1245 {
1246 num += tile2.liquid;
1247 tile2.liquid = 0;
1248 }
1249 if (tile3.liquidType() != thisLiquidType)
1250 {
1251 num += tile3.liquid;
1252 tile3.liquid = 0;
1253 }
1254 int liquidMergeTileType = 56;
1255 int liquidMergeType = 0;
1256 bool waterNearby = tile.liquidType() == 0 || tile2.liquidType() == 0 || tile3.liquidType() == 0;
1257 bool lavaNearby = tile.lava() || tile2.lava() || tile3.lava();
1258 bool honeyNearby = tile.honey() || tile2.honey() || tile3.honey();
1259 bool shimmerNearby = tile.shimmer() || tile2.shimmer() || tile3.shimmer();
1261 if (num < 24 || liquidMergeType == thisLiquidType)
1262 {
1263 return;
1264 }
1265 if (tile5.active() && Main.tileObsidianKill[tile5.type])
1266 {
1267 WorldGen.KillTile(x, y);
1268 if (Main.netMode == 2)
1269 {
1270 NetMessage.SendData(17, -1, -1, null, 0, x, y);
1271 }
1272 }
1273 if (!tile5.active())
1274 {
1275 tile5.liquid = 0;
1276 switch (thisLiquidType)
1277 {
1278 case 1:
1279 tile5.lava(lava: false);
1280 break;
1281 case 2:
1282 tile5.honey(honey: false);
1283 break;
1284 case 3:
1285 tile5.shimmer(shimmer: false);
1286 break;
1287 }
1289 if (!WorldGen.gen)
1290 {
1291 WorldGen.PlayLiquidChangeSound(liquidChangeType, x, y);
1292 }
1294 WorldGen.SquareTileFrame(x, y);
1295 if (Main.netMode == 2)
1296 {
1297 NetMessage.SendTileSquare(-1, x - 1, y - 1, 3, liquidChangeType);
1298 }
1299 }
1300 }
1301 else
1302 {
1303 if (tile4.liquid <= 0 || tile4.liquidType() == thisLiquidType)
1304 {
1305 return;
1306 }
1307 bool flag = false;
1308 if (tile5.active() && TileID.Sets.IsAContainer[tile5.type] && !TileID.Sets.IsAContainer[tile4.type])
1309 {
1310 flag = true;
1311 }
1312 if (thisLiquidType != 0 && Main.tileCut[tile4.type])
1313 {
1314 WorldGen.KillTile(x, y + 1);
1315 if (Main.netMode == 2)
1316 {
1317 NetMessage.SendData(17, -1, -1, null, 0, x, y + 1);
1318 }
1319 }
1320 else if (tile4.active() && Main.tileObsidianKill[tile4.type])
1321 {
1322 WorldGen.KillTile(x, y + 1);
1323 if (Main.netMode == 2)
1324 {
1325 NetMessage.SendData(17, -1, -1, null, 0, x, y + 1);
1326 }
1327 }
1328 if (!(!tile4.active() || flag))
1329 {
1330 return;
1331 }
1332 if (tile5.liquid < 24)
1333 {
1334 tile5.liquid = 0;
1335 tile5.liquidType(0);
1336 if (Main.netMode == 2)
1337 {
1338 NetMessage.SendTileSquare(-1, x - 1, y, 3);
1339 }
1340 return;
1341 }
1342 int liquidMergeTileType2 = 56;
1343 int liquidMergeType2 = 0;
1344 bool waterNearby2 = tile4.liquidType() == 0;
1345 bool lavaNearby2 = tile4.lava();
1346 bool honeyNearby2 = tile4.honey();
1347 bool shimmerNearby2 = tile4.shimmer();
1349 tile5.liquid = 0;
1350 switch (thisLiquidType)
1351 {
1352 case 1:
1353 tile5.lava(lava: false);
1354 break;
1355 case 2:
1356 tile5.honey(honey: false);
1357 break;
1358 case 3:
1359 tile5.shimmer(shimmer: false);
1360 break;
1361 }
1362 tile4.liquid = 0;
1364 if (!Main.gameMenu)
1365 {
1366 WorldGen.PlayLiquidChangeSound(liquidChangeType2, x, y);
1367 }
1368 WorldGen.PlaceTile(x, y + 1, liquidMergeTileType2, mute: true, forced: true);
1369 WorldGen.SquareTileFrame(x, y + 1);
1370 if (Main.netMode == 2)
1371 {
1372 NetMessage.SendTileSquare(-1, x - 1, y, 3, liquidChangeType2);
1373 }
1374 }
1375 }
static bool[] IsAContainer
Definition TileID.cs:297
static void GetLiquidMergeTypes(int thisLiquidType, out int liquidMergeTileType, out int liquidMergeType, bool waterNearby, bool lavaNearby, bool honeyNearby, bool shimmerNearby)
Definition Liquid.cs:1377

References Terraria.Main.gameMenu, Terraria.WorldGen.gen, Terraria.WorldGen.GetLiquidChangeType(), Terraria.Liquid.GetLiquidMergeTypes(), Terraria.Tile.honey(), Terraria.ID.TileID.Sets.IsAContainer, Terraria.WorldGen.KillTile(), Terraria.Tile.lava(), Terraria.Tile.liquid, Terraria.Tile.liquidType(), Terraria.Main.netMode, Terraria.WorldGen.PlaceTile(), Terraria.WorldGen.PlayLiquidChangeSound(), Terraria.NetMessage.SendData(), Terraria.NetMessage.SendTileSquare(), Terraria.Tile.shimmer(), Terraria.WorldGen.SolidTile(), Terraria.WorldGen.SquareTileFrame(), Terraria.Main.tile, Terraria.Main.tileCut, Terraria.Main.tileObsidianKill, Terraria.Liquid.x, and Terraria.Liquid.y.

Referenced by Terraria.Liquid.HoneyCheck(), Terraria.Liquid.LavaCheck(), and Terraria.Liquid.ShimmerCheck().