public override void OnAI() { Entity.TargetClosest(false); if (Entity.target >= 0) { Entity.timeLeft = Terraria.NPC.activeTime; if (State == PizzaGodState.SpinStart) { CheckMinionSpawns(); if (RotationSpeed < MaxRotSpeed) { RotationSpeed += GetDistDelta(RotAcc); } else { State = PizzaGodState.WaitingToDash; DashWaitTimer = 0; } } else if (State == PizzaGodState.SpinStop) { if (RotationSpeed > 0) { RotationSpeed -= GetDistDelta(RotAcc); } else { RotationSpeed = -RotationSpeed; State = PizzaGodState.SpinStart; RotatingCCW = !RotatingCCW; MinionSpawnTimer = MinionSpawnDelay; } } else if (State == PizzaGodState.WaitingToDash) { if (DashWaitTimer < DashWaitDur) { DashWaitTimer += TMain.ElapsedTime; } else { DashWaitTimer = 0; State = PizzaGodState.Dash; Dash = DashInitSpeed; ReachedPlayerWithDash = false; Main.PlaySound(15, Entity.Center, 0); } } else if (State == PizzaGodState.Dash) { if (Dash > 0) { if (!ReachedPlayerWithDash && Entity.getRect().Intersects(Entity.targetRect)) { ReachedPlayerWithDash = true; } Dash -= GetDistDelta(DashSlowdownAcc); } else { Dash = 0; State = PizzaGodState.SpinStop; } } Rotate(MathHelper.TwoPi * GetDistDelta(RotationSpeed * (RotatingCCW ? -1 : 1))); Entity.SimpleFlyMovement(CurrentDashDir * GetDistDelta(Dash * 16), GetDistDelta(Dash * 16)); if (Dash > 0 && !ReachedPlayerWithDash) { CurrentDashDir = Entity.DirectionTo(Main.player[Entity.target].Center); } Entity.scale = 6 - (2 * (RotationSpeed / MaxRotSpeed)); Entity.width = Entity.height = (int)(48 * Entity.scale); prevRot = Entity.rotation; Lighting.AddLight(Entity.Center, new Vector3(20, 20, 0) * 0.5f * (Entity.scale / 8)); if ((Target.Center - Entity.Center).Length() >= (256 * 16)) { Entity.Teleport(Target.Center); } } }
public override void OnAI() { Entity.TargetClosest(false); if (Entity.target >= 0) { Entity.timeLeft = Terraria.NPC.activeTime; if (State == PizzaGodState.SpinStart) { CheckMinionSpawns(); if (RotationSpeed < MaxRotSpeed) { RotationSpeed += GetDistDelta(RotAcc); } else { State = PizzaGodState.WaitingToDash; DashWaitTimer = 0; } } else if (State == PizzaGodState.SpinStop) { if (RotationSpeed > 0) { RotationSpeed -= GetDistDelta(RotAcc); } else { RotationSpeed = -RotationSpeed; State = PizzaGodState.SpinStart; RotatingCCW = !RotatingCCW; MinionSpawnTimer = MinionSpawnDelay; } } else if (State == PizzaGodState.WaitingToDash) { if (DashWaitTimer < DashWaitDur) { DashWaitTimer += TMain.ElapsedTime; } else { DashWaitTimer = 0; State = PizzaGodState.Dash; Dash = DashInitSpeed; ReachedPlayerWithDash = false; Main.PlaySound(15, Entity.Center, 0); } } else if (State == PizzaGodState.Dash) { if (Dash > 0) { if (!ReachedPlayerWithDash && Entity.getRect().Intersects(Entity.targetRect)) ReachedPlayerWithDash = true; Dash -= GetDistDelta(DashSlowdownAcc); } else { Dash = 0; State = PizzaGodState.SpinStop; } } Rotate(MathHelper.TwoPi * GetDistDelta(RotationSpeed * (RotatingCCW ? -1 : 1))); Entity.SimpleFlyMovement(CurrentDashDir * GetDistDelta(Dash * 16), GetDistDelta(Dash * 16)); if (Dash > 0 && !ReachedPlayerWithDash) CurrentDashDir = Entity.DirectionTo(Main.player[Entity.target].Center); Entity.scale = 6 - (2 * (RotationSpeed / MaxRotSpeed)); Entity.width = Entity.height = (int)(48 * Entity.scale); prevRot = Entity.rotation; Lighting.AddLight(Entity.Center, new Vector3(20, 20, 0) * 0.5f * (Entity.scale / 8)); if ((Target.Center - Entity.Center).Length() >= (256 * 16)) { Entity.Teleport(Target.Center); } } }