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

◆ AI_147_Celeb2Rocket()

void Terraria.Projectile.AI_147_Celeb2Rocket ( )
inlineprivate

Definition at line 43043 of file Projectile.cs.

43044 {
43045 int num = 0;
43046 int num2 = 1;
43047 int num3 = 1;
43048 localAI[num] += 1f;
43049 alpha = 0;
43050 rotation = velocity.ToRotation() + (float)Math.PI / 2f;
43051 int num4 = (int)ai[0];
43052 Lighting.AddLight(base.Center, GetCeleb2Color().ToVector3() * 0.5f);
43053 switch (num4)
43054 {
43055 case 0:
43056 if (localAI[num] >= 20f)
43057 {
43058 velocity.Y += 0.12f;
43059 penetrate = (maxPenetrate = -1);
43060 }
43061 if (velocity.Y > 16f)
43062 {
43063 velocity.Y = 16f;
43064 }
43065 if (localAI[num] > 20f && localAI[num] % 20f == 0f)
43066 {
43068 }
43069 break;
43070 case 1:
43071 {
43072 if (localAI[num] == 10f)
43073 {
43074 velocity.Y -= 10f;
43075 }
43076 if (localAI[num] >= 10f)
43077 {
43078 velocity.Y += 0.25f;
43079 }
43080 if (velocity.Y > 16f)
43081 {
43082 velocity.Y = 16f;
43083 }
43084 if (!(localAI[num] >= 10f))
43085 {
43086 break;
43087 }
43088 scale += 0.015f;
43089 if (scale > 2.5f)
43090 {
43091 scale = 2.5f;
43092 }
43093 if (localAI[num] % 10f != 0f)
43094 {
43095 break;
43096 }
43097 _ = velocity.Y;
43098 _ = 0f;
43099 for (float num5 = 0f; num5 < 1f; num5 += 0.12f)
43100 {
43101 Vector2 spinningpoint = Vector2.UnitX * -8f;
43102 spinningpoint += -Vector2.UnitY.RotatedBy(num5 * ((float)Math.PI * 2f)) * new Vector2(2f, 4f);
43103 spinningpoint = spinningpoint.RotatedBy(rotation - (float)Math.PI / 2f);
43104 int num6 = Dust.NewDust(base.Center, 0, 0, 267, 0f, 0f, 0, Color.Lerp(GetCeleb2Color(), Color.White, Main.rand.NextFloat() * 0.3f));
43105 Main.dust[num6].scale = 0.9f;
43106 Main.dust[num6].fadeIn = 1.1f;
43107 Main.dust[num6].noGravity = true;
43108 Main.dust[num6].position = base.Center + spinningpoint;
43109 Main.dust[num6].velocity = -velocity * 0.35f + spinningpoint * 0.35f;
43110 Main.dust[num6].velocity *= scale;
43111 if (localAI[num] == 10f)
43112 {
43113 Main.dust[num6].velocity = spinningpoint.RotatedBy(velocity.ToRotation()) * 0.3f;
43114 }
43115 }
43116 break;
43117 }
43118 case 2:
43119 if (localAI[num] >= 60f)
43120 {
43121 velocity.Y += 0.15f;
43122 }
43123 if (velocity.Y > 16f)
43124 {
43125 velocity.Y = 16f;
43126 }
43127 break;
43128 case 3:
43129 {
43130 float num7 = localAI[num2];
43131 if (num7 == 0f)
43132 {
43133 float num8 = velocity.Length();
43134 localAI[num2] = num8;
43135 num7 = num8;
43136 }
43137 if (localAI[num] >= 25f && ai[num3] == 0f)
43138 {
43139 if (localAI[num] >= 20f)
43140 {
43141 velocity.Y += 0.15f;
43142 }
43143 if (velocity.Y > 16f)
43144 {
43145 velocity.Y = 16f;
43146 }
43147 }
43148 if (!(localAI[num] >= 20f))
43149 {
43150 break;
43151 }
43152 float num9 = position.X;
43153 float num10 = position.Y;
43154 float num11 = 800f;
43155 bool flag = false;
43156 int num12 = 0;
43157 if (ai[num3] == 0f)
43158 {
43159 for (int i = 0; i < 200; i++)
43160 {
43161 if (Main.npc[i].CanBeChasedBy(this) && (ai[num3] == 0f || ai[num3] == (float)(i + 1)))
43162 {
43163 float num13 = Main.npc[i].position.X + (float)(Main.npc[i].width / 2);
43164 float num14 = Main.npc[i].position.Y + (float)(Main.npc[i].height / 2);
43165 float num15 = Math.Abs(position.X + (float)(width / 2) - num13) + Math.Abs(position.Y + (float)(height / 2) - num14);
43166 if (num15 < num11 && Collision.CanHit(new Vector2(position.X + (float)(width / 2), position.Y + (float)(height / 2)), 1, 1, Main.npc[i].position, Main.npc[i].width, Main.npc[i].height))
43167 {
43168 num11 = num15;
43169 num9 = num13;
43170 num10 = num14;
43171 flag = true;
43172 num12 = i;
43173 }
43174 }
43175 }
43176 if (flag)
43177 {
43178 ai[1] = num12 + 1;
43179 }
43180 flag = false;
43181 }
43182 if (ai[num3] != 0f)
43183 {
43184 int num16 = (int)(ai[num3] - 1f);
43185 if (Main.npc[num16].active && Main.npc[num16].CanBeChasedBy(this, ignoreDontTakeDamage: true))
43186 {
43187 float num17 = Main.npc[num16].position.X + (float)(Main.npc[num16].width / 2);
43188 float num18 = Main.npc[num16].position.Y + (float)(Main.npc[num16].height / 2);
43189 if (Math.Abs(position.X + (float)(width / 2) - num17) + Math.Abs(position.Y + (float)(height / 2) - num18) < 1000f)
43190 {
43191 flag = true;
43192 num9 = Main.npc[num16].position.X + (float)(Main.npc[num16].width / 2);
43193 num10 = Main.npc[num16].position.Y + (float)(Main.npc[num16].height / 2);
43194 }
43195 }
43196 }
43197 if (!friendly)
43198 {
43199 flag = false;
43200 }
43201 if (flag)
43202 {
43203 float num19 = num7;
43204 Vector2 vector2 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
43205 float num20 = num9 - vector2.X;
43206 float num21 = num10 - vector2.Y;
43207 float num22 = (float)Math.Sqrt(num20 * num20 + num21 * num21);
43208 num22 = num19 / num22;
43209 num20 *= num22;
43210 num21 *= num22;
43211 int num23 = 8;
43212 velocity.X = (velocity.X * (float)(num23 - 1) + num20) / (float)num23;
43213 velocity.Y = (velocity.Y * (float)(num23 - 1) + num21) / (float)num23;
43214 }
43215 break;
43216 }
43217 case 4:
43218 {
43219 if (localAI[num] == 1f && ai[1] == 1f)
43220 {
43221 localAI[num] += 45f;
43222 }
43223 float x = velocity.SafeNormalize(Vector2.Zero).RotatedBy(localAI[num] * ((float)Math.PI / 45f)).X;
43224 Vector2 vector = velocity.SafeNormalize(Vector2.Zero).RotatedBy(1.5707963705062866);
43225 position += vector * x * 3f;
43226 scale = 2f;
43227 if (localAI[num] >= 10f)
43228 {
43229 velocity.Y += 0.04f;
43230 }
43231 if (velocity.Y > 16f)
43232 {
43233 velocity.Y = 16f;
43234 }
43235 break;
43236 }
43237 case 5:
43238 if (localAI[num] >= 40f)
43239 {
43240 velocity.Y += 0.08f;
43241 }
43242 if (velocity.Y > 16f)
43243 {
43244 velocity.Y = 16f;
43245 }
43246 break;
43247 case 6:
43248 if (localAI[num] >= 30f)
43249 {
43250 velocity.Y += 0.1f;
43251 }
43252 if (velocity.Y > 16f)
43253 {
43254 velocity.Y = 16f;
43255 }
43256 break;
43257 }
43258 }
static double Sqrt(double d)
static double Abs(double value)
const double PI
Definition Math.cs:16
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
static Color Lerp(Color value1, Color value2, float amount)
Definition Color.cs:491

References System.Math.Abs(), Terraria.Lighting.AddLight(), Terraria.Collision.CanHit(), Terraria.Main.dust, Microsoft.Xna.Framework.Color.Lerp(), Terraria.Dust.NewDust(), Terraria.Main.npc, System.Math.PI, Terraria.Main.rand, System.Math.Sqrt(), Microsoft.Xna.Framework.Vector2.UnitY, Microsoft.Xna.Framework.Color.White, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Vector2.Y, and Microsoft.Xna.Framework.Vector2.Zero.