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

◆ DrawKite()

void Terraria.Main.DrawKite ( Projectile proj)
inlineprivate

Definition at line 33858 of file Main.cs.

33859 {
33861 Texture2D value2 = TextureAssets.Extra[103].Value;
33862 int num = 15;
33863 float num2 = 0f;
33864 int num3 = 10;
33865 int num4 = 5;
33866 float num5 = 10f;
33867 float num6 = 0f;
33868 int num7 = -14;
33869 int num8 = -2;
33870 int num9 = -1;
33871 int num10 = -1;
33872 int num11 = 8;
33873 int num12 = 0;
33874 int num13 = 1;
33875 int num14 = 0;
33876 int num15 = 0;
33877 bool flag = true;
33878 bool flag2 = false;
33879 switch (proj.type)
33880 {
33881 case 771:
33882 value2 = TextureAssets.Extra[104].Value;
33883 num = 12;
33884 num12 = 12;
33885 num2 = ((proj.spriteDirection == 1) ? ((float)Math.PI / 2f) : (-(float)Math.PI / 2f));
33886 num3 = 12;
33887 num5 = 22f;
33888 num6 += (float)Math.PI / 8f * (float)proj.spriteDirection;
33889 num7 = -8;
33890 num8 = -6;
33891 num9 = 10;
33892 num10 = 8;
33893 num11 = 12;
33894 break;
33895 case 822:
33896 value2 = TextureAssets.Extra[132].Value;
33897 num = 7;
33898 num12 = 7;
33899 num2 = ((proj.spriteDirection == 1) ? ((float)Math.PI / 2f) : (-(float)Math.PI / 2f));
33900 num3 = 7;
33901 num5 = 22f;
33902 num6 += (float)Math.PI / 12f * (float)proj.spriteDirection;
33903 num7 = -20;
33904 num8 = -6;
33905 num11 = 12;
33906 break;
33907 case 850:
33908 value2 = TextureAssets.Extra[147].Value;
33909 num = 8;
33910 num12 = 8;
33911 num2 = ((proj.spriteDirection == 1) ? ((float)Math.PI / 2f) : (-(float)Math.PI / 2f));
33912 num3 = 8;
33913 num5 = 22f;
33914 num6 += (float)Math.PI / 12f * (float)proj.spriteDirection;
33915 num7 = -20;
33916 num8 = -38;
33917 num11 = 12;
33918 num14 = 6;
33919 num15 = 2;
33920 flag = false;
33921 break;
33922 case 823:
33923 case 846:
33924 value2 = TextureAssets.Extra[133].Value;
33925 if (proj.type == 846)
33926 {
33927 value2 = TextureAssets.Extra[146].Value;
33928 }
33929 num = 6;
33930 num12 = 6;
33931 num2 = ((proj.spriteDirection == 1) ? ((float)Math.PI / 2f) : (-(float)Math.PI / 2f));
33932 num3 = 6;
33933 num5 = 40f;
33934 num6 += (float)Math.PI / 12f * (float)proj.spriteDirection;
33935 num7 = -16;
33936 num8 = -10;
33937 num11 = 30;
33938 break;
33939 case 827:
33940 case 844:
33941 value2 = TextureAssets.Extra[135].Value;
33942 if (proj.type == 844)
33943 {
33944 value2 = TextureAssets.Extra[144].Value;
33945 }
33946 num = 4;
33947 num12 = 3;
33948 num2 = ((proj.spriteDirection == 1) ? ((float)Math.PI / 2f) : (-(float)Math.PI / 2f));
33949 num3 = 16;
33950 num5 = 10f;
33951 num6 += (float)Math.PI / 12f * (float)proj.spriteDirection;
33952 num8 = -4;
33953 num4 = 4;
33954 flag2 = true;
33955 break;
33956 case 828:
33957 case 829:
33958 value2 = TextureAssets.Extra[136].Value;
33959 if (proj.type == 829)
33960 {
33961 value2 = TextureAssets.Extra[137].Value;
33962 }
33963 num = 2;
33964 num12 = 1;
33965 num2 = ((proj.spriteDirection == 1) ? ((float)Math.PI / 2f) : (-(float)Math.PI / 2f));
33966 num3 = 6;
33967 num5 = 10f;
33968 num6 += (float)Math.PI / 12f * (float)proj.spriteDirection;
33969 num11 = 10;
33970 num8 = -4;
33971 num13 = 3;
33972 flag = false;
33973 flag2 = true;
33974 break;
33975 case 852:
33976 value2 = TextureAssets.Extra[148].Value;
33977 num = 2;
33978 num12 = 1;
33979 num2 = ((proj.spriteDirection == 1) ? ((float)Math.PI / 2f) : (-(float)Math.PI / 2f));
33980 num3 = 6;
33981 num5 = 10f;
33982 num6 += (float)Math.PI / 12f * (float)proj.spriteDirection;
33983 num11 = 10;
33984 num8 = -4;
33985 num13 = 4;
33986 flag = false;
33987 flag2 = true;
33988 break;
33989 case 830:
33990 case 838:
33991 value2 = TextureAssets.Extra[138].Value;
33992 if (proj.type == 838)
33993 {
33994 value2 = TextureAssets.Extra[139].Value;
33995 }
33996 num = 3;
33997 num12 = 3;
33998 num2 = ((proj.spriteDirection == 1) ? ((float)Math.PI / 2f) : (-(float)Math.PI / 2f));
33999 num3 = 3;
34000 num5 = 60f;
34001 num10 = 40;
34002 num9 = 3;
34003 num6 += (float)Math.PI / 12f * (float)proj.spriteDirection;
34004 num11 = 50;
34005 num8 = -20;
34006 num14 = -10;
34007 break;
34008 case 843:
34009 value2 = TextureAssets.Extra[140].Value;
34010 num = 2;
34011 num12 = 2;
34012 num2 = ((proj.spriteDirection == 1) ? ((float)Math.PI / 2f) : (-(float)Math.PI / 2f));
34013 num3 = 2;
34014 num5 = 30f;
34015 num6 += (float)Math.PI / 12f * (float)proj.spriteDirection;
34016 num11 = 20;
34017 num8 = -16;
34018 num14 = -10;
34019 break;
34020 case 845:
34021 value2 = TextureAssets.Extra[145].Value;
34022 num = 3;
34023 num12 = 3;
34024 num2 = ((proj.spriteDirection == 1) ? ((float)Math.PI / 2f) : (-(float)Math.PI / 2f));
34025 num3 = 3;
34026 num5 = 42f;
34027 num10 = 50;
34028 num9 = 2;
34029 num6 += (float)Math.PI / 12f * (float)proj.spriteDirection;
34030 num11 = 30;
34031 num8 = -8;
34032 num14 = -10;
34033 break;
34034 case 824:
34035 case 826:
34036 case 839:
34037 case 840:
34038 case 853:
34039 num13 = 0;
34040 break;
34041 case 766:
34042 case 767:
34043 case 768:
34044 case 769:
34045 case 770:
34046 num12 = (proj.type - 766) * 3 + 3;
34047 break;
34048 }
34049 SpriteEffects effects = ((proj.spriteDirection != 1) ? SpriteEffects.FlipHorizontally : SpriteEffects.None);
34051 Vector2 origin = rectangle.Size() / 2f;
34052 Vector2 position = proj.Center - screenPosition;
34053 Microsoft.Xna.Framework.Color color = Lighting.GetColor(proj.Center.ToTileCoordinates());
34054 Microsoft.Xna.Framework.Color alpha = proj.GetAlpha(color);
34057 Vector2 origin2 = new Vector2(value4.Width / 2, 2f);
34059 int width = rectangle2.Width;
34060 rectangle2.Width -= 2;
34061 Vector2 origin3 = rectangle2.Size() / 2f;
34062 rectangle2.X = width * (num - 1);
34064 Vector2 center = proj.Center;
34066 float num16 = 12f;
34067 _ = (playerArmPosition - center).SafeNormalize(Vector2.Zero) * num16;
34070 Vector2 velocity = proj.velocity;
34071 if (Math.Abs(velocity.X) > Math.Abs(velocity.Y))
34072 {
34073 Utils.Swap(ref velocity.X, ref velocity.Y);
34074 }
34075 float num17 = vector2.Length();
34076 float num18 = 16f;
34077 float num19 = 80f;
34078 bool flag3 = true;
34079 if (num17 == 0f)
34080 {
34081 flag3 = false;
34082 }
34083 else
34084 {
34085 vector2 *= 12f / num17;
34086 vector -= vector2;
34087 vector2 = center - vector;
34088 }
34089 while (flag3)
34090 {
34091 float num20 = 12f;
34092 float num21 = vector2.Length();
34093 float num22 = num21;
34094 if (float.IsNaN(num21) || num21 == 0f)
34095 {
34096 flag3 = false;
34097 continue;
34098 }
34099 if (num21 < 20f)
34100 {
34101 num20 = num21 - 8f;
34102 flag3 = false;
34103 }
34104 num21 = 12f / num21;
34105 vector2 *= num21;
34106 vector += vector2;
34107 vector2 = center - vector;
34108 if (num22 > 12f)
34109 {
34110 float num23 = 0.3f;
34111 float num24 = Math.Abs(velocity.X) + Math.Abs(velocity.Y);
34112 if (num24 > num18)
34113 {
34114 num24 = num18;
34115 }
34116 num24 = 1f - num24 / num18;
34117 num23 *= num24;
34118 num24 = num22 / num19;
34119 if (num24 > 1f)
34120 {
34121 num24 = 1f;
34122 }
34123 num23 *= num24;
34124 if (num23 < 0f)
34125 {
34126 num23 = 0f;
34127 }
34128 num24 = 1f;
34129 num23 *= num24;
34130 if (vector2.Y > 0f)
34131 {
34132 vector2.Y *= 1f + num23;
34133 vector2.X *= 1f - num23;
34134 }
34135 else
34136 {
34137 num24 = Math.Abs(velocity.X) / 3f;
34138 if (num24 > 1f)
34139 {
34140 num24 = 1f;
34141 }
34142 num24 -= 0.5f;
34143 num23 *= num24;
34144 if (num23 > 0f)
34145 {
34146 num23 *= 2f;
34147 }
34148 vector2.Y *= 1f + num23;
34149 vector2.X *= 1f - num23;
34150 }
34151 }
34152 float rotation = vector2.ToRotation() - (float)Math.PI / 2f;
34153 if (!flag3)
34154 {
34155 value4.Height = (int)num20;
34156 }
34157 Microsoft.Xna.Framework.Color color2 = Lighting.GetColor(center.ToTileCoordinates());
34159 }
34160 Vector2 vector3 = proj.Size / 2f;
34161 float num25 = Math.Abs(WindForVisuals);
34162 float num26 = MathHelper.Lerp(0.5f, 1f, num25);
34163 float num27 = num25;
34164 if (vector2.Y >= -0.02f && vector2.Y < 1f)
34165 {
34166 num27 = Utils.GetLerpValue(0.2f, 0.5f, num25, clamped: true);
34167 }
34168 int num28 = num4;
34169 int num29 = num3 + 1;
34170 for (int i = 0; i < num13; i++)
34171 {
34172 rectangle2.X = width * (num - 1);
34174 Vector2 vector4 = new Vector2(num26 * (float)num11 * (float)proj.spriteDirection, (float)Math.Sin(timeForVisualEffects / 300.0 * 6.2831854820251465) * num27) * 2f;
34175 float num30 = num7 + num14;
34176 float num31 = num8 + num15;
34177 switch (i)
34178 {
34179 case 1:
34180 vector4 = new Vector2(num26 * (float)num11 * (float)proj.spriteDirection, (float)Math.Sin(timeForVisualEffects / 300.0 * 6.2831854820251465) * num27 + 0.5f) * 2f;
34181 num30 -= 8f;
34182 num31 -= 8f;
34183 break;
34184 case 2:
34185 vector4 = new Vector2(num26 * (float)num11 * (float)proj.spriteDirection, (float)Math.Sin(timeForVisualEffects / 300.0 * 6.2831854820251465) * num27 + 1f) * 2f;
34186 num30 -= 4f;
34187 num31 -= 4f;
34188 break;
34189 case 3:
34190 vector4 = new Vector2(num26 * (float)num11 * (float)proj.spriteDirection, (float)Math.Sin(timeForVisualEffects / 300.0 * 6.2831854820251465) * num27 + 1.5f) * 2f;
34191 num30 -= 12f;
34192 num31 -= 12f;
34193 break;
34194 }
34195 Vector2 vector5 = proj.Center + new Vector2(((float)rectangle.Width * 0.5f + num30) * (float)proj.spriteDirection, num31).RotatedBy(proj.rotation + num6);
34196 list.Add(vector5);
34197 int num32 = num28;
34198 int num33 = 1;
34199 while (num32 < num29 * num28)
34200 {
34201 if (num9 != -1 && num9 == num33)
34202 {
34203 num5 = num10;
34204 }
34205 Vector2 vector6 = proj.oldPos[num32];
34206 if (vector6.X == 0f && vector6.Y == 0f)
34207 {
34208 list.Add(vector5);
34209 }
34210 else
34211 {
34212 vector6 += vector3 + new Vector2(((float)rectangle.Width * 0.5f + num30) * (float)proj.oldSpriteDirection[num32], num31).RotatedBy(proj.oldRot[num32] + num6);
34213 vector6 += vector4 * (num33 + 1);
34215 float num34 = vector7.Length();
34216 if (num34 > num5)
34217 {
34218 vector7 *= num5 / num34;
34219 }
34221 list.Add(vector6);
34222 vector5 = vector6;
34223 }
34224 num32 += num28;
34225 num33++;
34226 }
34227 if (flag)
34228 {
34230 for (int num35 = list.Count - 2; num35 >= 0; num35--)
34231 {
34233 Vector2 v = list[num35 + 1] - vector8;
34234 float num36 = v.Length();
34235 if (!(num36 < 2f))
34236 {
34237 float rotation2 = v.ToRotation() - (float)Math.PI / 2f;
34239 }
34240 }
34241 }
34242 for (int num37 = list.Count - 2; num37 >= 0; num37--)
34243 {
34245 Vector2 vector10 = list[num37 + 1];
34247 v2.Length();
34248 float rotation3 = v2.ToRotation() - (float)Math.PI / 2f + num2;
34250 rectangle2.X -= width;
34251 if (rectangle2.X < 0)
34252 {
34253 int num38 = num12;
34254 if (flag2)
34255 {
34256 num38--;
34257 }
34258 rectangle2.X = num38 * width;
34259 }
34260 }
34261 }
34262 EntitySpriteDraw(value, position, rectangle, alpha, proj.rotation + num6, origin, proj.scale, effects);
34263 }
static float Lerp(float value1, float value2, float amount)
Definition MathHelper.cs:53
void Add(TKey key, TValue value)
static double Abs(double value)
static double Sin(double a)
const double PI
Definition Math.cs:16
static Asset< Texture2D >[] Projectile
static Asset< Texture2D > FishingLine
static Asset< Texture2D >[] Extra
static Vector2 GetPlayerArmPosition(Projectile proj)
Definition Main.cs:34265
static int[] projFrames
Definition Main.cs:1326
static float WindForVisuals
Definition Main.cs:2827
static double timeForVisualEffects
Definition Main.cs:1286
static Vector2 screenPosition
Definition Main.cs:1715
static void EntitySpriteDraw(Texture2D texture, Vector2 position, Microsoft.Xna.Framework.Rectangle? sourceRectangle, Microsoft.Xna.Framework.Color color, float rotation, Vector2 origin, float scale, SpriteEffects effects, float worthless=0f)
Definition Main.cs:34658
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91

References System.Math.Abs(), System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, Microsoft.Xna.Framework.Vector2.Distance(), Terraria.Main.EntitySpriteDraw(), Terraria.GameContent.TextureAssets.Extra, Terraria.GameContent.TextureAssets.FishingLine, Terraria.Lighting.GetColor(), Terraria.Utils.GetLerpValue(), Terraria.Main.GetPlayerArmPosition(), System.Text.RegularExpressions.i, Microsoft.Xna.Framework.Vector2.Length(), Microsoft.Xna.Framework.MathHelper.Lerp(), System.list, System.Math.PI, Terraria.GameContent.TextureAssets.Projectile, Terraria.Main.projFrames, Terraria.Main.screenPosition, System.Math.Sin(), Terraria.Main.timeForVisualEffects, System.value, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Main.WindForVisuals, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Vector2.Y, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.Main.DrawProjDirect().