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

◆ noSlopeCollision()

static Vector2 Terraria.Collision.noSlopeCollision ( Vector2 Position,
Vector2 Velocity,
int Width,
int Height,
bool fallThrough = false,
bool fall2 = false )
inlinestatic

Definition at line 1808 of file Collision.cs.

1809 {
1810 up = false;
1811 down = false;
1812 Vector2 result = Velocity;
1813 Vector2 vector = Velocity;
1814 Vector2 vector2 = Position + Velocity;
1816 int value = (int)(Position.X / 16f) - 1;
1817 int value2 = (int)((Position.X + (float)Width) / 16f) + 2;
1818 int value3 = (int)(Position.Y / 16f) - 1;
1819 int value4 = (int)((Position.Y + (float)Height) / 16f) + 2;
1820 int num = -1;
1821 int num2 = -1;
1822 int num3 = -1;
1823 int num4 = -1;
1824 int num5 = Utils.Clamp(value, 0, Main.maxTilesX - 1);
1825 value2 = Utils.Clamp(value2, 0, Main.maxTilesX - 1);
1826 value3 = Utils.Clamp(value3, 0, Main.maxTilesY - 1);
1827 value4 = Utils.Clamp(value4, 0, Main.maxTilesY - 1);
1828 float num6 = (value4 + 3) * 16;
1829 Vector2 vector4 = default(Vector2);
1830 for (int i = num5; i < value2; i++)
1831 {
1832 for (int j = value3; j < value4; j++)
1833 {
1834 if (Main.tile[i, j] == null || !Main.tile[i, j].active() || (!Main.tileSolid[Main.tile[i, j].type] && (!Main.tileSolidTop[Main.tile[i, j].type] || Main.tile[i, j].frameY != 0)))
1835 {
1836 continue;
1837 }
1838 vector4.X = i * 16;
1839 vector4.Y = j * 16;
1840 int num7 = 16;
1841 if (Main.tile[i, j].halfBrick())
1842 {
1843 vector4.Y += 8f;
1844 num7 -= 8;
1845 }
1846 if (!(vector2.X + (float)Width > vector4.X) || !(vector2.X < vector4.X + 16f) || !(vector2.Y + (float)Height > vector4.Y) || !(vector2.Y < vector4.Y + (float)num7))
1847 {
1848 continue;
1849 }
1850 if (vector3.Y + (float)Height <= vector4.Y)
1851 {
1852 down = true;
1853 if ((!(Main.tileSolidTop[Main.tile[i, j].type] && fallThrough) || !(Velocity.Y <= 1f || fall2)) && num6 > vector4.Y)
1854 {
1855 num3 = i;
1856 num4 = j;
1857 if (num7 < 16)
1858 {
1859 num4++;
1860 }
1861 if (num3 != num)
1862 {
1863 result.Y = vector4.Y - (vector3.Y + (float)Height);
1864 num6 = vector4.Y;
1865 }
1866 }
1867 }
1868 else if (vector3.X + (float)Width <= vector4.X && !Main.tileSolidTop[Main.tile[i, j].type])
1869 {
1870 num = i;
1871 num2 = j;
1872 if (num2 != num4)
1873 {
1874 result.X = vector4.X - (vector3.X + (float)Width);
1875 }
1876 if (num3 == num)
1877 {
1878 result.Y = vector.Y;
1879 }
1880 }
1881 else if (vector3.X >= vector4.X + 16f && !Main.tileSolidTop[Main.tile[i, j].type])
1882 {
1883 num = i;
1884 num2 = j;
1885 if (num2 != num4)
1886 {
1887 result.X = vector4.X + 16f - vector3.X;
1888 }
1889 if (num3 == num)
1890 {
1891 result.Y = vector.Y;
1892 }
1893 }
1894 else if (vector3.Y >= vector4.Y + (float)num7 && !Main.tileSolidTop[Main.tile[i, j].type])
1895 {
1896 up = true;
1897 num3 = i;
1898 num4 = j;
1899 result.Y = vector4.Y + (float)num7 - vector3.Y + 0.01f;
1900 if (num4 == num2)
1901 {
1902 result.X = vector.X;
1903 }
1904 }
1905 }
1906 }
1907 return result;
1908 }
static bool down
Definition Collision.cs:34
static bool up
Definition Collision.cs:32

References Terraria.Collision.down, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Terraria.Collision.up, and System.value.

Referenced by Terraria.NPC.Collision_MoveBlazingWheel().