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

◆ AI_015_Flails_Old()

void Terraria.Projectile.AI_015_Flails_Old ( )
inlineprivate

Definition at line 36185 of file Projectile.cs.

36186 {
36188 bool flag = Main.player[owner].dead;
36189 if (!flag)
36190 {
36191 flag = (Main.player[owner].Center - base.Center).Length() > 2000f;
36192 }
36193 if (flag)
36194 {
36195 Kill();
36196 return;
36197 }
36198 Main.player[owner].SetDummyItemTime(10);
36199 if (position.X + (float)(width / 2) > Main.player[owner].position.X + (float)(Main.player[owner].width / 2))
36200 {
36201 Main.player[owner].ChangeDir(1);
36202 direction = 1;
36203 }
36204 else
36205 {
36206 Main.player[owner].ChangeDir(-1);
36207 direction = -1;
36208 }
36209 Vector2 mountedCenter = Main.player[owner].MountedCenter;
36210 Vector2 vector = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
36211 float num = mountedCenter.X - vector.X;
36212 float num2 = mountedCenter.Y - vector.Y;
36213 float num3 = (float)Math.Sqrt(num * num + num2 * num2);
36214 if (ai[0] == 0f)
36215 {
36216 float num4 = 160f;
36217 if (type == 63)
36218 {
36219 num4 *= 1.5f;
36220 }
36221 if (type == 247)
36222 {
36223 num4 *= 1.5f;
36224 }
36225 if (type == 757)
36226 {
36227 num4 *= 1.5f;
36228 }
36229 tileCollide = true;
36230 if (num3 > num4)
36231 {
36232 ai[0] = 1f;
36233 netUpdate = true;
36234 }
36235 else if (!Main.player[owner].channel)
36236 {
36237 if (velocity.Y < 0f)
36238 {
36239 velocity.Y *= 0.9f;
36240 }
36241 velocity.Y += 1f;
36242 velocity.X *= 0.9f;
36243 }
36244 }
36245 else if (ai[0] == 1f)
36246 {
36247 float meleeSpeed = Main.player[owner].meleeSpeed;
36248 float num5 = 14f / meleeSpeed;
36249 float num6 = 0.9f / meleeSpeed;
36250 float num7 = 300f / meleeSpeed;
36251 int num8 = 60;
36252 if (type == 63)
36253 {
36254 num7 *= 1.5f;
36255 num5 *= 1.5f;
36256 num6 *= 1.5f;
36257 }
36258 if (type == 247)
36259 {
36260 num7 *= 1.5f;
36261 num5 = 15.9f;
36262 num6 *= 2f;
36263 num8 = 100;
36264 }
36265 if (type == 757)
36266 {
36267 num7 *= 1.5f;
36268 num5 = 15.9f;
36269 num6 *= 2f;
36270 num8 = 100;
36271 }
36272 Math.Abs(num);
36273 Math.Abs(num2);
36274 if (ai[1] == 1f)
36275 {
36276 tileCollide = false;
36277 }
36278 if (!Main.player[owner].channel || num3 > num7 || !tileCollide)
36279 {
36280 ai[1] = 1f;
36281 if (tileCollide)
36282 {
36283 netUpdate = true;
36284 }
36285 tileCollide = false;
36286 if (num3 < 20f)
36287 {
36288 Kill();
36289 }
36290 }
36291 if (!tileCollide)
36292 {
36293 num6 *= 2f;
36294 }
36295 if (num3 > (float)num8 || !tileCollide)
36296 {
36297 num3 = num5 / num3;
36298 num *= num3;
36299 num2 *= num3;
36300 new Vector2(velocity.X, velocity.Y);
36301 float num9 = num - velocity.X;
36302 float num10 = num2 - velocity.Y;
36303 float num11 = (float)Math.Sqrt(num9 * num9 + num10 * num10);
36304 num11 = num6 / num11;
36305 num9 *= num11;
36306 num10 *= num11;
36307 velocity.X *= 0.98f;
36308 velocity.Y *= 0.98f;
36309 velocity.X += num9;
36310 velocity.Y += num10;
36311 }
36312 else
36313 {
36314 if (Math.Abs(velocity.X) + Math.Abs(velocity.Y) < 6f)
36315 {
36316 velocity.X *= 0.96f;
36317 velocity.Y += 0.2f;
36318 }
36319 if (Main.player[owner].velocity.X == 0f)
36320 {
36321 velocity.X *= 0.96f;
36322 }
36323 }
36324 }
36325 if (type == 247)
36326 {
36327 if (velocity.X < 0f)
36328 {
36329 rotation -= (Math.Abs(velocity.X) + Math.Abs(velocity.Y)) * 0.01f;
36330 }
36331 else
36332 {
36333 rotation += (Math.Abs(velocity.X) + Math.Abs(velocity.Y)) * 0.01f;
36334 }
36335 float num12 = position.X;
36336 float num13 = position.Y;
36337 float num14 = 600f;
36338 bool flag2 = false;
36339 if (owner == Main.myPlayer)
36340 {
36341 localAI[1] += 1f;
36342 if (localAI[1] > 20f)
36343 {
36344 localAI[1] = 20f;
36345 for (int i = 0; i < 200; i++)
36346 {
36347 if (Main.npc[i].CanBeChasedBy(this))
36348 {
36349 float num15 = Main.npc[i].position.X + (float)(Main.npc[i].width / 2);
36350 float num16 = Main.npc[i].position.Y + (float)(Main.npc[i].height / 2);
36351 float num17 = Math.Abs(position.X + (float)(width / 2) - num15) + Math.Abs(position.Y + (float)(height / 2) - num16);
36352 if (num17 < num14 && Collision.CanHit(position, width, height, Main.npc[i].position, Main.npc[i].width, Main.npc[i].height))
36353 {
36354 num14 = num17;
36355 num12 = num15;
36356 num13 = num16;
36357 flag2 = true;
36358 }
36359 }
36360 }
36361 }
36362 }
36363 if (flag2)
36364 {
36365 localAI[1] = 0f;
36366 vector = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
36367 num = num12 - vector.X;
36368 num2 = num13 - vector.Y;
36369 num3 = (float)Math.Sqrt(num * num + num2 * num2);
36370 num3 = 14f / num3;
36371 num *= num3;
36372 num2 *= num3;
36373 NewProjectile(GetProjectileSource_FromThis(), vector.X, vector.Y, num, num2, 248, (int)((double)damage / 1.5), knockBack / 2f, Main.myPlayer);
36374 }
36375 }
36376 else
36377 {
36378 rotation = (float)Math.Atan2(num2, num) - velocity.X * 0.1f;
36379 }
36380 }
static double Atan2(double y, double x)
static double Sqrt(double d)
static double Abs(double value)
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
IEntitySource GetProjectileSource_FromThis()
void AI_015_Flails_Dust(bool doFastThrowDust)
static int NewProjectile(IEntitySource spawnSource, Vector2 position, Vector2 velocity, int Type, int Damage, float KnockBack, int Owner=-1, float ai0=0f, float ai1=0f, float ai2=0f)

References System.Math.Abs(), System.Math.Atan2(), Terraria.Collision.CanHit(), Terraria.Main.myPlayer, Terraria.Main.npc, Terraria.Main.player, System.Math.Sqrt(), System.type, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.