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

◆ DrownCollision()

static bool Terraria.Collision.DrownCollision ( Vector2 Position,
int Width,
int Height,
float gravDir = -1f,
bool includeSlopes = false )
inlinestatic

Definition at line 1173 of file Collision.cs.

1174 {
1175 Vector2 vector = new Vector2(Position.X + (float)(Width / 2), Position.Y + (float)(Height / 2));
1176 int num = 10;
1177 int num2 = 12;
1178 if (num > Width)
1179 {
1180 num = Width;
1181 }
1182 if (num2 > Height)
1183 {
1184 num2 = Height;
1185 }
1186 vector = new Vector2(vector.X - (float)(num / 2), Position.Y + -2f);
1187 if (gravDir == -1f)
1188 {
1189 vector.Y += Height / 2 - 6;
1190 }
1191 int value = (int)(Position.X / 16f) - 1;
1192 int value2 = (int)((Position.X + (float)Width) / 16f) + 2;
1193 int value3 = (int)(Position.Y / 16f) - 1;
1194 int value4 = (int)((Position.Y + (float)Height) / 16f) + 2;
1195 int num3 = Utils.Clamp(value, 0, Main.maxTilesX - 1);
1196 value2 = Utils.Clamp(value2, 0, Main.maxTilesX - 1);
1197 value3 = Utils.Clamp(value3, 0, Main.maxTilesY - 1);
1198 value4 = Utils.Clamp(value4, 0, Main.maxTilesY - 1);
1199 int num4 = ((gravDir == 1f) ? value3 : (value4 - 1));
1200 Vector2 vector2 = default(Vector2);
1201 for (int i = num3; i < value2; i++)
1202 {
1203 for (int j = value3; j < value4; j++)
1204 {
1205 Tile tile = Main.tile[i, j];
1206 if (tile != null && tile.liquid > 0 && !tile.lava() && !tile.shimmer() && (j != num4 || !tile.active() || !Main.tileSolid[tile.type] || Main.tileSolidTop[tile.type] || (includeSlopes && tile.blockType() != 0)))
1207 {
1208 vector2.X = i * 16;
1209 vector2.Y = j * 16;
1210 int num5 = 16;
1211 float num6 = 256 - Main.tile[i, j].liquid;
1212 num6 /= 32f;
1213 vector2.Y += num6 * 2f;
1214 num5 -= (int)(num6 * 2f);
1215 if (vector.X + (float)num > vector2.X && vector.X < vector2.X + 16f && vector.Y + (float)num2 > vector2.Y && vector.Y < vector2.Y + (float)num5)
1216 {
1217 return true;
1218 }
1219 }
1220 }
1221 }
1222 return false;
1223 }

References Terraria.Tile.active(), Terraria.Tile.blockType(), Terraria.Tile.lava(), Terraria.Tile.liquid, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Tile.shimmer(), Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Terraria.Tile.type, and System.value.

Referenced by Terraria.NPC.AI_007_TownEntities(), Terraria.NPC.AI_007_TownEntities_GetWalkPrediction(), Terraria.NPC.CheckDrowning(), and Terraria.Player.CheckDrowning().