Beispiel #1
0
        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);
                }
            }
        }