Пример #1
0
        public override void AI(Projectile projectile)
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (projectile.minion && projectile.minionSlots > 0 && modPlayer.pursuitScroll)
            {
                runeCounter++;
                if (runeCounter >= 180 / projectile.minionSlots)
                {
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((1 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((1 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer);
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((2 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((2 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer);
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((3 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((3 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer);
                    runeCounter = 0;
                }
            }
            else if (projectile.minion && projectile.sentry && modPlayer.pursuitScroll)
            {
                runeCounter++;
                if (runeCounter >= 90)
                {
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((1 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((1 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer);
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((2 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((2 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer);
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((3 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((3 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer);
                    runeCounter = 0;
                }
            }
        }
        public override void AI()
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (modPlayer.HydraHeadMinion)
            {
                projectile.timeLeft = 2;
            }
            if (Main.LocalPlayer == player)
            {
                projectile.ai[0]     = Main.MouseWorld.X;
                projectile.ai[1]     = Main.MouseWorld.Y;
                projectile.netUpdate = true;

                //projectile.netUpdate = true;
            }
            projectile.rotation = (new Vector2(projectile.ai[0], projectile.ai[1]) - projectile.Center).ToRotation();
            tarX = (float)Math.Cos(projectile.rotation) * 10;
            tarY = (float)Math.Sin(projectile.rotation) * 10;

            //  Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 24);



            if (player.maxMinions - player.numMinions >= 1 && Main.netMode != 2 && modPlayer.HydraHeadMinion && Main.myPlayer == projectile.owner)
            {
                Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, projectile.Center.X, projectile.Center.Y, mod.ProjectileType("MinionHead"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f);
            }



            varTime++;
            if (varTime == 30 && Main.netMode != 2 && Main.myPlayer == projectile.owner)
            {
                Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, tarX, tarY, mod.ProjectileType("MinionBreath"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f);
            }
            if (varTime >= 60)
            {
                if (Main.netMode != 2 && Main.myPlayer == projectile.owner)
                {
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, tarX, tarY, mod.ProjectileType("MinionBreath"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f);
                }
                YvarOld = Yvar;

                XvarOld = Xvar;

                varTime = 0;
                if (Main.netMode != 2)
                {
                    Yvar = Main.rand.Next(0, 80);
                    Xvar = Main.rand.Next(-80, 80);
                }
            }

            Vector2 moveTo = new Vector2(player.Center.X + Xvar, player.Center.Y - Yvar) - projectile.Center;

            projectile.velocity = (moveTo) * .04f;
        }
Пример #3
0
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod);
            Vector2      trueSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(15));

            bool  yes = true;
            float anotherSpeedVariable = trueSpeed.Length();

            modPlayer.PickRandomAmmo(GetReference(95), ref type, ref anotherSpeedVariable, ref yes, ref damage, ref knockBack, Main.rand.Next(2) == 0);
            Projectile.NewProjectile(position.X, position.Y, trueSpeed.X, trueSpeed.Y, type, damage, knockBack, player.whoAmI);

            return(false);
        }
        public override void AI(Projectile projectile)
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (modPlayer.minionFang && projectile.minion)
            {
                projectile.melee = true;
            }
            else if (projectile.minion)
            {
                projectile.melee = false;
            }
        }
Пример #5
0
        public override void AI()
        {
            Player player = Main.player[projectile.owner];
            //Main.NewText(moveTo);
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod);

            sniperCount = player.ownedProjectileCounts[mod.ProjectileType("ChlorophyteSniper")];
            if (modPlayer.chlorophyteSniper)
            {
                projectile.timeLeft = 2;
            }
            for (int p = 0; p < 1000; p++)
            {
                if (Main.projectile[p].type == mod.ProjectileType("ChlorophyteSniper"))
                {
                    if (p == projectile.whoAmI)
                    {
                        break;
                    }
                    else
                    {
                        identity++;
                    }
                }
            }



            timer++;
            if (sniperCount != 0)
            {
                projectile.ai[0] = 40f;

                flyTo = player.Center + QwertyMethods.PolarVector(projectile.ai[0], -modPlayer.mythrilPrismRotation + (2f * (float)Math.PI * identity) / sniperCount);

                projectile.velocity = (flyTo - projectile.Center) * .1f;
                if (QwertyMethods.ClosestNPC(ref target, 100000, projectile.Center, false, player.MinionAttackTargetNPC) && timer > 180)
                {
                    Projectile.NewProjectile(projectile.Center, QwertyMethods.PolarVector(10, (target.Center - projectile.Center).ToRotation()), mod.ProjectileType("ChlorophyteSnipe"), projectile.damage, projectile.knockBack, player.whoAmI);
                    timer = 0;
                }
                //Main.NewText(projectile.Center);/
                //projectile.Center = flyTo;
            }



            identity = 0;
        }
        public override void AI()
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            varTime++;
            if (varTime >= 60)
            {
                varTime = 0;
                if (Main.netMode != 2)
                {
                    Yvar = Main.rand.Next(0, 80);
                    Xvar = Main.rand.Next(-80, 80);
                }
            }

            Vector2 moveTo = new Vector2(player.Center.X + Xvar, player.Center.Y - Yvar) - projectile.Center;

            projectile.velocity = (moveTo) * .04f;
            if (modPlayer.LuneArcher)
            {
                projectile.timeLeft = 2;
            }

            timer++;
            if (QwertyMethods.ClosestNPC(ref target, 10000, player.Center, false, player.MinionAttackTargetNPC))
            {
                projectile.rotation = (target.Center - projectile.Center).ToRotation();
                if (timer > 90)
                {
                    int   weaponDamage    = projectile.damage;
                    float weaponKnockback = projectile.knockBack;
                    player.PickAmmo(QwertyMethods.MakeItemFromID(39), ref arrow, ref speedB, ref canShoot, ref weaponDamage, ref weaponKnockback, Main.rand.Next(2) == 0);
                    if (Main.netMode != 1)
                    {
                        Projectile bul = Main.projectile[Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos(projectile.rotation) * BulVel, (float)Math.Sin(projectile.rotation) * BulVel, arrow, weaponDamage, weaponKnockback, Main.myPlayer)];
                        bul.ranged = false;
                        bul.minion = true;
                        if (Main.netMode == 1)
                        {
                            QwertysRandomContent.UpdateProjectileClass(bul);
                        }
                    }
                    timer = 0;
                }
                projectile.rotation += (float)Math.PI / 2;
            }
        }
Пример #7
0
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            //reset damage and knockback to avoid ammo modifing
            damage    = (int)(item.damage * player.meleeDamage);
            knockBack = item.knockBack * knockBack;

            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();
            Vector2      trueSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(1));

            bool  yes = true;
            float anotherSpeedVariable = trueSpeed.Length();

            modPlayer.PickRandomAmmo(item, ref type, ref anotherSpeedVariable, ref yes, ref damage, ref knockBack, Main.rand.Next(2) == 0);
            Projectile.NewProjectile(position.X, position.Y, trueSpeed.X, trueSpeed.Y, type, damage, knockBack, player.whoAmI);

            return(false);
        }
Пример #8
0
        public override void Update(Player player, ref int buffIndex)
        {
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (player.ownedProjectileCounts[mod.ProjectileType("AncientMinionFreindly")] > 0 || player.ownedProjectileCounts[mod.ProjectileType("RunicMinionFreindly")] > 0)
            {
                modPlayer.AncientMinion = true;
            }
            if (!modPlayer.AncientMinion)
            {
                player.DelBuff(buffIndex);
                buffIndex--;
            }
            else
            {
                player.buffTime[buffIndex] = 18000;
            }
        }
Пример #9
0
        public override void Update(Player player, ref int buffIndex)
        {
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (player.ownedProjectileCounts[mod.ProjectileType("MinionHead")] > 0)
            {
                modPlayer.HydraHeadMinion = true;
            }
            if (!modPlayer.HydraHeadMinion)
            {
                player.DelBuff(buffIndex);
                buffIndex--;
            }
            else
            {
                player.buffTime[buffIndex] = 18000;
            }
        }
Пример #10
0
        public override void Update(Player player, ref int buffIndex)
        {
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod);

            if (player.ownedProjectileCounts[mod.ProjectileType("SpaceFighter")] > 0)
            {
                modPlayer.SpaceFighter = true;
            }
            if (!modPlayer.SpaceFighter)
            {
                player.DelBuff(buffIndex);
                buffIndex--;
            }
            else
            {
                player.buffTime[buffIndex] = 18000;
            }
        }
        /*------------------------------------------------- */
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            int numberProjectiles = 1 + Main.rand.Next(16);

            for (int i = 0; i < numberProjectiles; i++)
            {
                QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod);
                Vector2      trueSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(20));
                float        scale     = Main.rand.NextFloat(.7f, 2.3f);
                trueSpeed = trueSpeed * scale;
                bool  yes = true;
                float anotherSpeedVariable = trueSpeed.Length();

                modPlayer.PickRandomAmmo(GetReference(39), ref type, ref anotherSpeedVariable, ref yes, ref damage, ref knockBack, Main.rand.Next(2) == 0);
                Projectile.NewProjectile(position.X + Main.rand.Next(-18, 18), position.Y + Main.rand.Next(-18, 18), trueSpeed.X, trueSpeed.Y, type, damage, knockBack, player.whoAmI);
            }
            return(false);
        }
Пример #12
0
        public override void AI()
        {
            Player player = Main.player[projectile.owner];

            shader = player.miscDyes[1].dye;
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (!player.active)
            {
                projectile.active = false;
                return;
            }
            if (player.dead)
            {
                modPlayer.Lightling = false;
            }
            if (modPlayer.Lightling)
            {
                projectile.timeLeft = 2;
            }
            Vector2 flyTo = player.Center - projectile.Center;

            //float dir = flyTo.ToRotation();
            //flyTo = (player.Center +QwertyMethods.PolarVector(-200, dir)) - projectile.Center;
            // Main.NewText(flyTo.Length());
            if (flyTo.Length() < 120)
            {
                projectile.velocity = Vector2.Zero;
            }
            else
            {
                projectile.velocity = flyTo * .01f;
            }
            projectile.frameCounter++;
            if (projectile.frameCounter % 10 == 0)
            {
                projectile.frame = 1;
            }
            else if (projectile.frameCounter % 5 == 0)
            {
                projectile.frame = 0;
            }
        }
Пример #13
0
        /*------------------------------------------------- */
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            int numberProjectiles = 2 + Main.rand.Next(7);

            for (int i = 0; i < numberProjectiles; i++)
            {
                QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();
                Vector2      trueSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(15));
                float        scale     = Main.rand.NextFloat(1, 2);
                trueSpeed = trueSpeed * scale;
                bool  yes = true;
                float anotherSpeedVariable = trueSpeed.Length();
                int   currentDmg           = (int)(item.damage * player.rangedDamage);
                float currentKnockBack     = item.knockBack * knockBack;
                modPlayer.PickRandomAmmo(item, ref type, ref anotherSpeedVariable, ref yes, ref currentDmg, ref currentKnockBack, Main.rand.Next(2) == 0);
                Projectile.NewProjectile(position.X + Main.rand.Next(-12, 12), position.Y + Main.rand.Next(-12, 12), trueSpeed.X, trueSpeed.Y, type, currentDmg, currentKnockBack, player.whoAmI);
            }
            return(false);
        }
Пример #14
0
        public override void AI()
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (modPlayer.HydraHeadMinion)
            {
                projectile.timeLeft = 2;
            }
            projectile.rotation = (QwertysRandomContent.LocalCursor[projectile.owner] - projectile.Center).ToRotation();

            if (player.maxMinions - player.numMinions >= 1 && Main.netMode != 2 && modPlayer.HydraHeadMinion && Main.myPlayer == projectile.owner)
            {
                Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, projectile.Center.X, projectile.Center.Y, mod.ProjectileType("MinionHead"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f);
            }



            varTime++;
            if (varTime == 30 && projectile.owner == Main.myPlayer)
            {
                Projectile.NewProjectile(projectile.Center, QwertyMethods.PolarVector(10, projectile.rotation), mod.ProjectileType("MinionBreath"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f);
            }
            if (varTime >= 60)
            {
                if (projectile.owner == Main.myPlayer)
                {
                    Projectile.NewProjectile(projectile.Center, QwertyMethods.PolarVector(10, projectile.rotation), mod.ProjectileType("MinionBreath"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f);
                }
                varTime = 0;
                if (Main.netMode != 2 && Main.myPlayer == projectile.owner)
                {
                    Yvar = Main.rand.Next(0, 80);
                    Xvar = Main.rand.Next(-80, 80);
                    projectile.netUpdate = true;
                }
            }

            Vector2 moveTo = new Vector2(player.Center.X + Xvar, player.Center.Y - Yvar) - projectile.Center;

            projectile.velocity = (moveTo) * .04f;
        }
Пример #15
0
        /*------------------------------------------------- */
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            if (player.altFunctionUse == 2)
            {
                QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod);
                Vector2      trueSpeed = new Vector2(speedX, speedY);

                bool  yes = true;
                float anotherSpeedVariable = trueSpeed.Length();

                modPlayer.PickRandomAmmo(GetReference(39), ref type, ref anotherSpeedVariable, ref yes, ref damage, ref knockBack, Main.rand.Next(2) == 0);
                Projectile.NewProjectile(position.X, position.Y, speedX, speedY, type, damage, knockBack, player.whoAmI);

                return(false);
            }
            else
            {
                return(true);
            }
        }
Пример #16
0
        public override void AI()
        {
            if (spin)
            {
                projectile.rotation += projectile.velocity.Length() * (float)Math.PI / 60 * (projectile.velocity.X > 0 ? 1 : -1);
            }
            spin = true;
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (modPlayer.GlassSpike)
            {
                projectile.timeLeft = 2;
            }

            if ((player.Center - projectile.Center).Length() > 400)
            {
                projectile.tileCollide = false;
            }

            if (projectile.tileCollide)
            {
                projectile.velocity.Y  = 7;
                projectile.velocity.X *= .9f;
            }
            else
            {
                Vector2 flyTo = player.Center + new Vector2(orientation, -20);
                if ((projectile.Center - flyTo).Length() < 20)
                {
                    projectile.tileCollide = true;
                }
                Vector2 vel = (flyTo - projectile.Center) * .07f;
                if (vel.Length() < 3)
                {
                    vel = vel.SafeNormalize(-Vector2.UnitY) * 3;
                }
                projectile.velocity = vel;
            }
        }
Пример #17
0
        public override void AI(Projectile projectile)
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod);

            if (player.maxMinions - player.numMinions >= projectile.minionSlots && Main.netMode != 2 && projectile.minionSlots > 0 && projectile.active && modPlayer.hydraCharm)
            {
                if (wait >= 20 && projectile.active)
                {
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0, -4, projectile.type, projectile.damage, projectile.knockBack, Main.myPlayer, 0f, 0f);
                    wait = 0;
                }
                else
                {
                    wait++;
                }
            }
            else
            {
                wait = 0;
            }
        }
Пример #18
0
        public override void AI(Projectile projectile)
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (player.maxMinions - player.numMinions >= projectile.minionSlots && Main.netMode != 2 && projectile.minionSlots > 0 && projectile.active && modPlayer.hydraCharm && projectile.type != mod.ProjectileType("SwordMinion") && (projectile.type < ProjectileID.StardustDragon1 || projectile.type > ProjectileID.StardustDragon4))
            {
                if (wait >= 20 && projectile.active)
                {
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0, -4, projectile.type, projectile.damage, projectile.knockBack, Main.myPlayer, 0f, 0f);
                    wait = 0;
                }
                else
                {
                    wait++;
                }
            }
            else
            {
                wait = 0;
            }
        }
Пример #19
0
        public override void AI()
        {
            Player player = Main.player[projectile.owner];
            //Main.NewText(moveTo);
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            prismCount = player.ownedProjectileCounts[mod.ProjectileType("MythrilPrism")];
            if (modPlayer.mythrilPrism)
            {
                projectile.timeLeft = 2;
            }
            for (int p = 0; p < 1000; p++)
            {
                if (Main.projectile[p].type == mod.ProjectileType("MythrilPrism"))
                {
                    if (p == projectile.whoAmI)
                    {
                        break;
                    }
                    else
                    {
                        identity++;
                    }
                }
            }
            if (player.MinionAttackTargetNPC != -1)
            {
                for (int k = 0; k < 200; k++)
                {
                    possibleTarget = Main.npc[k];
                    distance       = (possibleTarget.Center - player.Center).Length();
                    if (distance < maxDistance && possibleTarget.active && !possibleTarget.dontTakeDamage && !possibleTarget.friendly && possibleTarget.lifeMax > 5 && !possibleTarget.immortal)
                    {
                        target      = Main.npc[k];
                        foundTarget = true;


                        maxDistance = (target.Center - player.Center).Length();
                    }
                }
            }
            else
            {
                for (int k = 0; k < 200; k++)
                {
                    possibleTarget = Main.npc[k];
                    distance       = (possibleTarget.Center - player.Center).Length();
                    if (distance < maxDistance && possibleTarget.active && !possibleTarget.dontTakeDamage && !possibleTarget.friendly && possibleTarget.lifeMax > 5 && !possibleTarget.immortal)
                    {
                        target      = Main.npc[k];
                        foundTarget = true;


                        maxDistance = (target.Center - player.Center).Length();
                    }
                }
            }
            if (runOnce)
            {
                Beam    = Main.projectile[Projectile.NewProjectile(projectile.Center, Vector2.Zero, mod.ProjectileType("MiniBeam"), projectile.damage, projectile.knockBack, projectile.owner, projectile.whoAmI, 0)];
                runOnce = false;
            }
            if (prismCount != 0)
            {
                projectile.ai[0] = 40f;
                if (foundTarget)
                {
                    flyTo = target.Center + QwertyMethods.PolarVector(maxDistance / 2f, (player.Center - target.Center).ToRotation() + (.5f * (float)Math.PI * (identity + 1)) / (prismCount + 1) - (float)Math.PI * .25f);

                    Beam.ai[1] = target.whoAmI;
                }
                else
                {
                    Beam.ai[1] = -1;
                    flyTo      = player.Center + QwertyMethods.PolarVector(projectile.ai[0], modPlayer.mythrilPrismRotation + (2f * (float)Math.PI * identity) / prismCount);
                }
                projectile.velocity = (flyTo - projectile.Center) * .1f;
                //Main.NewText(projectile.Center);/
                //projectile.Center = flyTo;
            }



            identity    = 0;
            maxDistance = beamRange * 2;
            foundTarget = false;
        }
Пример #20
0
        public override void AI()
        {
            bool spinAttack = false;

            bladeLength = 24 + 16 + 14 * projectile.minionSlots;
            counter++;
            if (counter % projectile.localNPCHitCooldown == 0)
            {
                turnOffset *= -1;
            }
            yetAnotherTrigCounter += (float)Math.PI / 120;
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (modPlayer.SwordMinion)
            {
                projectile.timeLeft = 2;
            }
            if ((player.Center - projectile.Center).Length() > 1000)
            {
                returningToPlayer = true;
            }
            if ((player.Center - projectile.Center).Length() < 300)
            {
                returningToPlayer = false;
            }
            Vector2 flyTo  = player.Center + new Vector2(-50 * player.direction, -50 - 14 * projectile.minionSlots) + Vector2.UnitY * (float)Math.Sin(yetAnotherTrigCounter) * 20;
            float   turnTo = (float)Math.PI / 2;
            float   speed  = 10f;

            if (returningToPlayer)
            {
                speed = (player.Center - projectile.Center).Length() / 30f;
            }
            if (QwertyMethods.ClosestNPC(ref target, 800, projectile.Center, false, player.MinionAttackTargetNPC) && !returningToPlayer)
            {
                Vector2 difference2 = projectile.Center - target.Center;
                flyTo  = target.Center + QwertyMethods.PolarVector(bladeLength / 2, difference2.ToRotation());
                turnTo = (target.Center - projectile.Center).ToRotation();
                int nerabyEnemies = 0;
                foreach (NPC npc in Main.npc)
                {
                    if (npc.active && npc.chaseable && !npc.dontTakeDamage && !npc.friendly && npc.lifeMax > 5 && !npc.immortal && (npc.Center - projectile.Center).Length() < bladeLength)
                    {
                        nerabyEnemies++;
                    }
                }
                if (nerabyEnemies > 2)
                {
                    spinAttack = true;
                }
                if (difference2.Length() < bladeLength)
                {
                    turnTo += turnOffset;
                }
            }
            Vector2 difference = flyTo - projectile.Center;

            if (difference.Length() < speed)
            {
                projectile.Center   = flyTo;
                projectile.velocity = Vector2.Zero;
            }
            else
            {
                projectile.velocity = difference.SafeNormalize(Vector2.UnitY) * speed;
            }
            if (spinAttack)
            {
                projectile.rotation += (float)Math.PI / 15;
            }
            else
            {
                projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, turnTo, 6);
            }
        }
        public override void AI()
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod);

            if (modPlayer.AncientMinion)
            {
                projectile.timeLeft = 2;
            }


            if (runOnce)
            {
                //Main.PlaySound(SoundID.Item8);

                if (Main.netMode != 2)
                {
                    moveTo.X             = projectile.Center.X;
                    moveTo.Y             = projectile.Center.Y;
                    projectile.netUpdate = true;
                }
                runOnce = false;
            }

            if (QwertyMethods.ClosestNPC(ref target, maxDistance, player.Center, true, player.MinionAttackTargetNPC))
            {
                timer++;
                if (timer > waitTime + chargeTime)
                {
                    for (int k = 0; k < 200; k++)
                    {
                        projectile.localNPCImmunity[k] = 0;
                    }
                    for (int i = 0; i < minionRingDustQty; i++)
                    {
                        float theta = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI);

                        Dust dust = Dust.NewDustPerfect(projectile.Center + QwertyMethods.PolarVector(minionRingRadius, theta), mod.DustType("AncientGlow"), QwertyMethods.PolarVector(-minionRingRadius / 10, theta));
                        dust.noGravity = true;
                    }
                    if (Main.netMode != 2)
                    {
                        projectile.ai[1]     = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI);
                        projectile.netUpdate = true;
                    }
                    moveTo = new Vector2(target.Center.X + (float)Math.Cos(projectile.ai[1]) * 100, target.Center.Y + (float)Math.Sin(projectile.ai[1]) * 100);
                    if (Main.netMode != 2)
                    {
                        projectile.netUpdate = true;
                    }
                    justTeleported = true;
                    timer          = 0;
                    noTargetTimer  = 0;
                }
                else if (timer > waitTime)
                {
                    charging = true;
                }
                else
                {
                    if (timer == 2)
                    {
                        Main.PlaySound(SoundID.Item8);
                        for (int i = 0; i < minionRingDustQty; i++)
                        {
                            float theta = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI);
                            Dust  dust  = Dust.NewDustPerfect(projectile.Center, mod.DustType("AncientGlow"), QwertyMethods.PolarVector(minionRingRadius / 10, theta));
                            dust.noGravity = true;
                        }
                    }
                    charging = false;
                }
                if (charging)
                {
                    projectile.velocity = new Vector2((float)Math.Cos(projectile.rotation) * chargeSpeed, (float)Math.Sin(projectile.rotation) * chargeSpeed);
                }
                else
                {
                    projectile.Center   = new Vector2(moveTo.X, moveTo.Y);
                    projectile.velocity = new Vector2(0, 0);
                    float targetAngle = new Vector2(target.Center.X - projectile.Center.X, target.Center.Y - projectile.Center.Y).ToRotation();
                    projectile.rotation = targetAngle;
                }
            }
            else
            {
                noTargetTimer++;
                if (noTargetTimer == 2)
                {
                    Main.PlaySound(SoundID.Item8);
                    for (int i = 0; i < minionRingDustQty; i++)
                    {
                        float theta = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI);
                        Dust  dust  = Dust.NewDustPerfect(projectile.Center, mod.DustType("AncientGlow"), QwertyMethods.PolarVector(minionRingRadius / 10, theta));
                        dust.noGravity = true;
                    }
                }
                if ((projectile.Center - player.Center).Length() > 300)
                {
                    if (Main.netMode != 2)
                    {
                        projectile.ai[1]     = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI);
                        projectile.netUpdate = true;
                    }
                    for (int i = 0; i < minionRingDustQty; i++)
                    {
                        float theta = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI);

                        Dust dust = Dust.NewDustPerfect(projectile.Center + QwertyMethods.PolarVector(minionRingRadius, theta), mod.DustType("AncientGlow"), QwertyMethods.PolarVector(-minionRingRadius / 10, theta));
                        dust.noGravity = true;
                    }
                    noTargetTimer  = 0;
                    moveTo         = new Vector2(player.Center.X + (float)Math.Cos(projectile.ai[1]) * 100, player.Center.Y + (float)Math.Sin(projectile.ai[1]) * 100);
                    justTeleported = true;
                }

                projectile.Center = moveTo;

                float targetAngle = new Vector2(player.Center.X - projectile.Center.X, player.Center.Y - projectile.Center.Y).ToRotation();
                projectile.rotation = targetAngle;
            }
            if (justTeleported)
            {
                justTeleported = false;
            }

            projectile.frameCounter++;
        }
        public override void AI()
        {
            parent = Main.projectile[(int)projectile.ai[0]];
            Player player = Main.player[projectile.owner];

            if (runOnce)
            {
                projectile.rotation = projectile.velocity.ToRotation();
                runOnce             = false;
            }
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (!parent.active)
            {
                projectile.Kill();
            }
            fighterTimer++;
            if (returnToParent)
            {
                swimDirection = (parent.Center - projectile.Center).ToRotation();
                if (Collision.CheckAABBvAABBCollision(projectile.position, new Vector2(projectile.width, projectile.height), parent.position, new Vector2(parent.width, parent.height)))
                {
                    Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/Ur-Quan/UrQuan-Recover").WithVolume(.8f));
                    projectile.Kill();
                }
            }
            else if (fighterTimer > 600)
            {
                returnToParent = true;
            }
            if (fighterTimer > 10)
            {
                //  Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 24);
                if (!returnToParent)
                {
                    if (player.MinionAttackTargetNPC != -1)
                    {
                        prey          = Main.npc[player.MinionAttackTargetNPC];
                        foundTarget   = true;
                        swimDirection = (prey.Center - projectile.Center).ToRotation();
                        maxDistance   = (prey.Center - projectile.Center).Length();
                    }
                    else
                    {
                        for (int k = 0; k < 200; k++)
                        {
                            possiblePrey   = Main.npc[k];
                            distance       = (possiblePrey.Center - projectile.Center).Length();
                            distFromPlayer = (possiblePrey.Center - player.Center).Length();
                            if (distance < maxDistance && possiblePrey.active && !possiblePrey.dontTakeDamage && !possiblePrey.friendly && possiblePrey.lifeMax > 5 && !possiblePrey.immortal && distFromPlayer < 800)
                            {
                                prey        = Main.npc[k];
                                foundTarget = true;

                                swimDirection = (prey.Center - projectile.Center).ToRotation();
                                maxDistance   = (prey.Center - projectile.Center).Length();
                                if (maxDistance + prey.width / 2 < 50)
                                {
                                    close = true;
                                }
                                else
                                {
                                    close = true;
                                }
                            }
                        }
                    }
                }

                if (!foundTarget)
                {
                    returnToParent = true;
                }
                else
                {
                }



                swimDirection = new Vector2((float)Math.Cos(swimDirection), (float)Math.Sin(swimDirection)).ToRotation();

                actDirection = swimDirection;

                actDirection = new Vector2((float)Math.Cos(actDirection), (float)Math.Sin(actDirection)).ToRotation();
                if (foundTarget)
                {
                    if (maxDistance < 50)
                    {
                        varTime++;
                        if (varTime >= 15)
                        {
                            drawLaser = true;
                        }
                        else if (varTime >= 5)
                        {
                            drawLaser = false;
                        }
                        if (varTime >= 20)
                        {
                            Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/Ur-Quan/UrQuan-Fighter").WithVolume(.2f));
                            Projectile.NewProjectile(prey.Center, new Vector2(0, 0), mod.ProjectileType("FighterShot"), projectile.damage, projectile.knockBack, Main.myPlayer, 0f, 0f);

                            varTime = 0;
                        }
                        projectile.velocity.X = prey.velocity.X;
                        projectile.velocity.Y = prey.velocity.Y;
                    }
                    else
                    {
                        drawLaser             = false;
                        projectile.velocity.X = (float)Math.Cos(actDirection) * swimSpeed;
                        projectile.velocity.Y = (float)Math.Sin(actDirection) * swimSpeed;
                    }
                    for (int k = 0; k < 200; k++)
                    {
                        if (Main.projectile[k].type == mod.ProjectileType("Fighter") && k != projectile.whoAmI)
                        {
                            if (Collision.CheckAABBvAABBCollision(projectile.position, new Vector2(projectile.width, projectile.height), Main.projectile[k].position, new Vector2(Main.projectile[k].width, Main.projectile[k].height)))
                            {
                                projectile.velocity += new Vector2((float)Math.Cos((projectile.Center - Main.projectile[k].Center).ToRotation()) * 3, (float)Math.Sin((projectile.Center - Main.projectile[k].Center).ToRotation()) * 3);
                            }
                        }
                    }
                }
                else
                {
                    drawLaser = false;

                    projectile.velocity.X = (float)Math.Cos(actDirection) * swimSpeed;
                    projectile.velocity.Y = (float)Math.Sin(actDirection) * swimSpeed;
                }

                projectile.rotation = actDirection;


                foundTarget = false;
                maxDistance = 10000f;

                /*
                 * debugTimer++;
                 * if(debugTimer %10==0)
                 * {
                 *  CombatText.NewText(player.getRect(), new Color(38, 126, 126), (int)MathHelper.ToDegrees(swimDirection), true, false);
                 *  CombatText.NewText(projectile.getRect(), new Color(38, 126, 126), (int)MathHelper.ToDegrees(actDirection), true, false);
                 * }
                 */
                close = false;
            }
        }
        public override void AI()
        {
            Player player = Main.player[projectile.owner];

            // Main.NewText(player.MinionAttackTargetNPC);
            if (runOnce)
            {
                projectile.ai[0] = 6;
                noTargetwander   = new Vector2(Main.rand.Next(-200, 200), Main.rand.Next(-200, 200));
                runOnce          = false;
            }
            if ((projectile.Center - player.Center).Length() > 2000)
            {
                projectile.position = player.Center;
            }
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (modPlayer.Dreadnought)
            {
                projectile.timeLeft = 2;
            }


            //  Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 24);
            if (player.MinionAttackTargetNPC != -1)
            {
                prey          = Main.npc[player.MinionAttackTargetNPC];
                foundTarget   = true;
                swimDirection = (prey.Center - projectile.Center).ToRotation();
                maxDistance   = (prey.Center - projectile.Center).Length();
            }
            else
            {
                for (int k = 0; k < 200; k++)
                {
                    possiblePrey   = Main.npc[k];
                    distance       = (possiblePrey.Center - projectile.Center).Length();
                    distFromPlayer = (possiblePrey.Center - player.Center).Length();
                    if (distance < maxDistance && possiblePrey.active && !possiblePrey.dontTakeDamage && !possiblePrey.friendly && possiblePrey.lifeMax > 5 && !possiblePrey.immortal && distFromPlayer < 800)
                    {
                        prey        = Main.npc[k];
                        foundTarget = true;

                        swimDirection = (prey.Center - projectile.Center).ToRotation();
                        maxDistance   = (prey.Center - projectile.Center).Length();
                    }
                }
            }



            if (!foundTarget)
            {
                targetwanderTimer++;
                if (targetwanderTimer % 120 == 0 && Main.netMode != 2 && Main.myPlayer == projectile.owner)
                {
                    noTargetwander       = new Vector2(Main.rand.Next(-200, 200), Main.rand.Next(-200, 200));
                    projectile.netUpdate = true;
                }

                swimDirection = (noTargetwander + player.Center - projectile.Center).ToRotation();
            }
            else
            {
                fighterTimer++;
                if (fighterTimer % 60 == 0)
                {
                    if (projectile.ai[0] > 0)
                    {
                        Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/Ur-Quan/UrQuan-Launch").WithVolume(.8f));
                        Projectile.NewProjectile(((float)Math.Cos(actDirection + (float)Math.PI) * projectile.width / 2) + projectile.Center.X, ((float)Math.Sin(actDirection + (float)Math.PI) * projectile.height / 2) + projectile.Center.Y, (float)Math.Cos(actDirection + (float)Math.PI + (float)Math.PI / 4) * shotSpeed, (float)Math.Sin(actDirection + (float)Math.PI + (float)Math.PI / 4) * shotSpeed, mod.ProjectileType("Fighter"), projectile.damage / 6, projectile.knockBack, Main.myPlayer, projectile.whoAmI, 0f);
                        projectile.ai[0]--;
                    }
                    if (projectile.ai[0] > 0)
                    {
                        Projectile.NewProjectile(((float)Math.Cos(actDirection + (float)Math.PI) * projectile.width / 2) + projectile.Center.X, ((float)Math.Sin(actDirection + (float)Math.PI) * projectile.height / 2) + projectile.Center.Y, (float)Math.Cos(actDirection + (float)Math.PI - (float)Math.PI / 4) * shotSpeed, (float)Math.Sin(actDirection + (float)Math.PI - (float)Math.PI / 4) * shotSpeed, mod.ProjectileType("Fighter"), projectile.damage / 6, projectile.knockBack, Main.myPlayer, projectile.whoAmI, 0f);
                        projectile.ai[0]--;
                    }
                }
            }


            if (Math.Abs(actDirection - swimDirection) > Math.PI)
            {
                f = -1;
            }
            else
            {
                f = 1;
            }

            swimDirection = new Vector2((float)Math.Cos(swimDirection), (float)Math.Sin(swimDirection)).ToRotation();
            if (actDirection <= swimDirection + MathHelper.ToRadians(4) && actDirection >= swimDirection - MathHelper.ToRadians(4))
            {
                actDirection = swimDirection;
            }
            else if (actDirection <= swimDirection)
            {
                actDirection += MathHelper.ToRadians(2) * f;
            }
            else if (actDirection >= swimDirection)
            {
                actDirection -= MathHelper.ToRadians(2) * f;
            }
            actDirection = new Vector2((float)Math.Cos(actDirection), (float)Math.Sin(actDirection)).ToRotation();
            if (foundTarget)
            {
                if (maxDistance < 300)
                {
                    varTime++;
                    if (varTime >= 45)
                    {
                        Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/Ur-Quan/UrQuan-Fusion").WithVolume(.8f));
                        Projectile.NewProjectile(((float)Math.Cos(actDirection) * projectile.width / 2) + projectile.Center.X, ((float)Math.Sin(actDirection) * projectile.height / 2) + projectile.Center.Y, (float)Math.Cos(actDirection) * shotSpeed, (float)Math.Sin(actDirection) * shotSpeed, mod.ProjectileType("Fusion"), projectile.damage, projectile.knockBack, Main.myPlayer, 0f, 0f);
                        varTime = 0;
                    }
                    projectile.velocity.X = 0;
                    projectile.velocity.Y = 0;
                }
                else
                {
                    projectile.velocity.X = (float)Math.Cos(actDirection) * swimSpeed;
                    projectile.velocity.Y = (float)Math.Sin(actDirection) * swimSpeed;
                }
                for (int k = 0; k < 200; k++)
                {
                    if (Main.projectile[k].type == mod.ProjectileType("Dreadnought") && k != projectile.whoAmI)
                    {
                        if (Collision.CheckAABBvAABBCollision(projectile.position + new Vector2(projectile.width / 4, projectile.height / 4), new Vector2(projectile.width / 2, projectile.height / 2), Main.projectile[k].position + new Vector2(Main.projectile[k].width / 4, Main.projectile[k].height / 4), new Vector2(Main.projectile[k].width / 2, Main.projectile[k].height / 2)))
                        {
                            projectile.velocity += new Vector2((float)Math.Cos((projectile.Center - Main.projectile[k].Center).ToRotation()) * 10, (float)Math.Sin((projectile.Center - Main.projectile[k].Center).ToRotation()) * 10);
                        }
                    }
                }
            }
            else
            {
                projectile.velocity.X = (float)Math.Cos(actDirection) * swimSpeed;
                projectile.velocity.Y = (float)Math.Sin(actDirection) * swimSpeed;
            }

            projectile.rotation = actDirection;


            foundTarget = false;
            maxDistance = 10000f;
            close       = false;

            /*
             * debugTimer++;
             * if(debugTimer %10==0)
             * {
             *  CombatText.NewText(player.getRect(), new Color(38, 126, 126), (int)MathHelper.ToDegrees(swimDirection), true, false);
             *  CombatText.NewText(projectile.getRect(), new Color(38, 126, 126), (int)MathHelper.ToDegrees(actDirection), true, false);
             * }
             */
        }
Пример #24
0
        public override void AI()
        {
            Player player = Main.player[projectile.owner];

            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            shotCounter++;
            if (modPlayer.SpaceFighter)
            {
                projectile.timeLeft = 2;
            }
            if (QwertyMethods.ClosestNPC(ref target, 1000, projectile.Center, false, player.MinionAttackTargetNPC) && (player.Center - projectile.Center).Length() < 1000)
            {
                projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, (target.Center - projectile.Center).ToRotation(), 6);
                if ((target.Center - projectile.Center).Length() < 300)
                {
                    if (shotCounter >= 20)
                    {
                        shotCounter = 0;
                        Projectile l = Main.projectile[Projectile.NewProjectile(projectile.Center, QwertyMethods.PolarVector(12f, projectile.rotation), ProjectileID.GreenLaser, projectile.damage, projectile.knockBack, projectile.owner)];
                        l.magic  = false;
                        l.minion = true;
                        //l.scale = .5f;
                        l.penetrate = 1;
                        //l.alpha = 0;
                        if (Main.netMode == 1)
                        {
                            QwertysRandomContent.UpdateProjectileClass(l);
                        }
                        Main.PlaySound(SoundID.Item12, projectile.position);
                    }
                }
                else
                {
                    Thrust();
                }
            }
            else
            {
                projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, (player.Center - projectile.Center).ToRotation(), 6);
                if ((player.Center - projectile.Center).Length() < 300)
                {
                }
                else
                {
                    Thrust();
                }
            }
            for (int k = 0; k < 1000; k++)
            {
                if (Main.projectile[k].type == projectile.type && k != projectile.whoAmI)
                {
                    if (Collision.CheckAABBvAABBCollision(projectile.position + new Vector2(projectile.width / 4, projectile.height / 4), new Vector2(projectile.width / 2, projectile.height / 2), Main.projectile[k].position + new Vector2(Main.projectile[k].width / 4, Main.projectile[k].height / 4), new Vector2(Main.projectile[k].width / 2, Main.projectile[k].height / 2)))
                    {
                        projectile.velocity += new Vector2((float)Math.Cos((projectile.Center - Main.projectile[k].Center).ToRotation()) * .1f, (float)Math.Sin((projectile.Center - Main.projectile[k].Center).ToRotation()) * .1f);
                    }
                }
            }
            if (projectile.velocity.Length() > maxSpeed)
            {
                projectile.velocity = projectile.velocity.SafeNormalize(-Vector2.UnitY) * maxSpeed;
            }
        }
        public override void AI()
        {
            if (projectile.alpha > 0)
            {
                projectile.alpha -= 255 / 5;
            }
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (modPlayer.AncientMinion)
            {
                projectile.timeLeft = 2;
            }
            if (player.MinionAttackTargetNPC != -1)
            {
                target      = Main.npc[player.MinionAttackTargetNPC];
                foundTarget = true;
            }
            else
            {
                for (int k = 0; k < 200; k++)
                {
                    possibleTarget = Main.npc[k];
                    distance       = (possibleTarget.Center - player.Center).Length();
                    if (distance < maxDistance && possibleTarget.active && !possibleTarget.dontTakeDamage && !possibleTarget.friendly && possibleTarget.lifeMax > 5 && !possibleTarget.immortal)
                    {
                        target      = Main.npc[k];
                        foundTarget = true;


                        maxDistance = (target.Center - player.Center).Length();
                    }
                }
            }
            maxDistance = 1000f;
            if (runOnce)
            {
                //Main.PlaySound(SoundID.Item8);

                if (Main.netMode != 2)
                {
                    moveTo.X             = projectile.Center.X;
                    moveTo.Y             = projectile.Center.Y;
                    projectile.netUpdate = true;
                }
                runOnce = false;
            }

            if (foundTarget)
            {
                timer++;
                if (timer > waitTime + chargeTime)
                {
                    for (int k = 0; k < 200; k++)
                    {
                        projectile.localNPCImmunity[k] = 0;
                    }
                    for (int i = 0; i < 100; i++)
                    {
                        Dust.NewDust(projectile.position, projectile.width, projectile.height, mod.DustType("LeechRuneDeath"));
                    }
                    if (Main.netMode != 2)
                    {
                        projectile.ai[1]     = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI);
                        projectile.netUpdate = true;
                    }
                    moveTo = new Vector2(target.Center.X + (float)Math.Cos(projectile.ai[1]) * 100, target.Center.Y + (float)Math.Sin(projectile.ai[1]) * 100);
                    if (Main.netMode != 2)
                    {
                        projectile.netUpdate = true;
                    }
                    justTeleported = true;
                    timer          = 0;
                }
                else if (timer > waitTime)
                {
                    charging = true;
                }
                else
                {
                    charging = false;
                }
                if (charging)
                {
                    projectile.rotation += MathHelper.ToRadians(3);
                    projectile.velocity  = new Vector2((float)Math.Cos(targetAngle) * chargeSpeed, (float)Math.Sin(targetAngle) * chargeSpeed);
                }
                else
                {
                    projectile.Center   = new Vector2(moveTo.X, moveTo.Y);
                    projectile.velocity = new Vector2(0, 0);
                    targetAngle         = new Vector2(target.Center.X - projectile.Center.X, target.Center.Y - projectile.Center.Y).ToRotation();
                    //projectile.rotation = targetAngle;
                }
            }
            else
            {
                if ((projectile.Center - player.Center).Length() > 300)
                {
                    if (Main.netMode != 2)
                    {
                        projectile.ai[1]     = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI);
                        projectile.netUpdate = true;
                    }
                    for (int d = 0; d < 300; d++)
                    {
                        Dust.NewDust(projectile.position, projectile.width, projectile.height, mod.DustType("LeechRuneDeath"));
                    }
                    moveTo         = new Vector2(player.Center.X + (float)Math.Cos(projectile.ai[1]) * 100, player.Center.Y + (float)Math.Sin(projectile.ai[1]) * 100);
                    justTeleported = true;
                }

                projectile.Center = moveTo;

                targetAngle = new Vector2(player.Center.X - projectile.Center.X, player.Center.Y - projectile.Center.Y).ToRotation();
                //projectile.rotation = targetAngle;
            }
            if (justTeleported)
            {
                projectile.alpha = 255;
                Main.PlaySound(SoundID.Item8, projectile.position);
                for (int d = 0; d < 300; d++)
                {
                    Dust.NewDust(projectile.position, projectile.width, projectile.height, mod.DustType("LeechRuneDeath"));
                }
                justTeleported = false;
            }
            foundTarget = false;
        }
Пример #26
0
        public override void AI()
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (modPlayer.ShieldMinion)
            {
                projectile.timeLeft = 2;
            }
            for (int p = 0; p < 1000; p++)
            {
                if (Main.projectile[p].type == mod.ProjectileType("ShieldMinion") && Main.projectile[p].active && Main.projectile[p].owner == projectile.owner && Main.projectile[p].ai[1] == projectile.ai[1])
                {
                    ShieldCount++;
                }
            }

            for (int p = 0; p < 1000; p++)
            {
                if (Main.projectile[p].type == mod.ProjectileType("ShieldMinion") && Main.projectile[p].active && Main.projectile[p].owner == projectile.owner && Main.projectile[p].ai[1] == projectile.ai[1])
                {
                    if (p == projectile.whoAmI)
                    {
                        break;
                    }
                    else
                    {
                        identity++;
                    }
                }
            }
            projectile.friendly = (projectile.ai[1] == charging);
            if (projectile.ai[1] != charging)
            {
                if (player.velocity.Length() > .1f)
                {
                    LatestValidVelocity = player.velocity;
                }

                float myOffset = (((float)Math.PI / 2) * (float)(identity + 1)) / (ShieldCount + 1) - (float)Math.PI / 4;
                flyTo = player.Center + QwertyMethods.PolarVector(projectile.ai[1] == guarding ? 120 : -50, (QwertysRandomContent.LocalCursor[projectile.owner] - player.Center).ToRotation() + myOffset);

                if (flyTo != null && flyTo != Vector2.Zero)
                {
                    projectile.velocity = (flyTo - projectile.Center) * .1f;
                }
            }
            switch ((int)projectile.ai[1])
            {
            case guarding:
                projectile.frame = 0;
                foreach (Projectile OtherProjectile in Main.projectile)
                {
                    if (OtherProjectile.hostile && OtherProjectile.active && OtherProjectile.velocity != Vector2.Zero && OtherProjectile.damage > 0 && Collision.CheckAABBvAABBCollision(projectile.position, projectile.Size, OtherProjectile.position, OtherProjectile.Size))
                    {
                        if (OtherProjectile.damage * 2 * (Main.expertMode ? 2 : 1) < projectile.damage)
                        {
                            OtherProjectile.Kill();
                        }
                        projectile.ai[1] = cooling;
                        chargeTimer      = -300;
                        break;
                    }
                }
                if (QwertyMethods.ClosestNPC(ref target, 1000, player.Center, true, player.MinionAttackTargetNPC))
                {
                    eyeOffset    = (target.Center - projectile.Center).SafeNormalize(-Vector2.UnitY);
                    eyeOffset.X *= horizontalEyeMultiploer;
                    eyeOffset.Y *= verticalEyeMultiplier;
                    if ((target.Center - projectile.Center).Length() < 120)
                    {
                        projectile.velocity = QwertyMethods.PolarVector(24, (target.Center - projectile.Center).ToRotation());
                        projectile.ai[1]    = charging;
                        chargeTimer         = 10;
                        break;
                    }
                }
                else
                {
                    eyeOffset = Vector2.Zero;
                }

                break;

            case charging:
                projectile.frame = 0;
                chargeTimer--;
                if (chargeTimer <= 0)
                {
                    projectile.ai[1] = cooling;
                    chargeTimer      = -300;
                }
                break;

            case cooling:
                projectile.frame = 1;
                chargeTimer++;
                if (chargeTimer >= 0)
                {
                    projectile.ai[1] = guarding;
                }
                break;
            }


            identity    = 0;
            ShieldCount = 0;
        }
Пример #27
0
        public override void AI()
        {
            Player player = Main.player[projectile.owner];

            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod);

            drifterCount = player.ownedProjectileCounts[mod.ProjectileType("OrichalcumDrifter")];
            if (modPlayer.OrichalcumDrifter)
            {
                projectile.timeLeft = 2;
            }
            for (int p = 0; p < 1000; p++)
            {
                if (Main.projectile[p].type == mod.ProjectileType("OrichalcumDrifter"))
                {
                    if (p == projectile.whoAmI)
                    {
                        break;
                    }
                    else
                    {
                        identity++;
                    }
                }
            }
            if ((player.Center - projectile.Center).Length() > 750 || flyBack)
            {
                flyTo = player.Center;

                if (Collision.CheckAABBvAABBCollision(player.position, player.Size, projectile.position, projectile.Size))
                {
                    flyBack   = false;
                    speed     = 3;
                    turnSpeed = 2;
                }
                else
                {
                    flyBack   = true;
                    speed     = 12;
                    turnSpeed = 20;
                }
            }
            else
            {
                if (QwertyMethods.ClosestNPC(ref target, maxDistance, projectile.Center, false, player.MinionAttackTargetNPC))
                {
                    flyTo = target.Center;
                }
                else
                {
                    if (drifterCount != 0)
                    {
                        projectile.ai[0] = 40f;
                        flyTo            = player.Center + QwertyMethods.PolarVector(projectile.ai[0], (2f * (float)Math.PI * identity) / drifterCount);
                    }
                    else
                    {
                        flyTo = player.Center;
                    }
                }
                speed     = 3;
                turnSpeed = 2;
            }
            flyDirection = QwertyMethods.SlowRotation(flyDirection, (flyTo - projectile.Center).ToRotation(), turnSpeed);

            projectile.velocity  = QwertyMethods.PolarVector(speed, flyDirection);
            driftTimer          += (float)Math.PI / 120;
            driftVariance        = (float)Math.Cos(driftTimer);
            projectile.velocity += QwertyMethods.PolarVector(driftVariance, flyDirection + (float)Math.PI / 2);
            projectile.rotation  = projectile.velocity.ToRotation();
            // Main.NewText((player.Center - projectile.Center).Length());
        }
Пример #28
0
        public override void AI()
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            if (modPlayer.miniTank)
            {
                projectile.timeLeft = 2;
            }
            tankCount = player.ownedProjectileCounts[mod.ProjectileType("MiniTank")];
            identity  = 0;
            for (int p = 0; p < 1000; p++)
            {
                if (Main.projectile[p].type == mod.ProjectileType("MiniTank") && Main.projectile[p].active)
                {
                    if (p == projectile.whoAmI)
                    {
                        break;
                    }
                    else
                    {
                        identity++;
                    }
                }
            }
            if (returnToPlayer)
            {
                projectile.velocity = (player.Top - projectile.Center) * .1f;
                if ((player.Top - projectile.Center).Length() < 200)
                {
                    returnToPlayer = false;
                }
                projectile.tileCollide = false;
            }
            else
            {
                if ((player.Center - projectile.Center).Length() > 1500)
                {
                    returnToPlayer = true;
                }
                projectile.tileCollide = true;


                if (projectile.velocity.Y < terminalVelocity)
                {
                    projectile.velocity.Y += garvityAcceleration;
                }
                gotoX = player.Center.X + -player.direction * (player.width / 2 + spacing + (identity * spacing));
                projectile.velocity.X = (gotoX - projectile.Center.X) * .1f;
                if (Math.Abs(projectile.velocity.X) > maxSpeedX)
                {
                    projectile.velocity.X = projectile.velocity.X > 0 ? maxSpeedX : -maxSpeedX;
                }

                projectile.spriteDirection = projectile.velocity.X > 0 ? 1 : -1;
                if (QwertyMethods.ClosestNPC(ref target, 1000, projectile.Top, false, player.MinionAttackTargetNPC))
                {
                    if (target.Center.Y > projectile.Top.Y)
                    {
                        if (target.Center.X > projectile.Top.X)
                        {
                            aim = 0;
                        }
                        else
                        {
                            aim = (float)Math.PI;
                        }
                    }
                    else
                    {
                        aim = (target.Center - projectile.Top).ToRotation();
                    }
                    if (shootCounter >= 60)
                    {
                        shootCounter = 0;
                        Projectile.NewProjectile(projectile.Top + QwertyMethods.PolarVector(30, gunRotation), QwertyMethods.PolarVector(10, gunRotation), mod.ProjectileType("MiniTankCannonBallFreindly"), projectile.damage, projectile.knockBack, player.whoAmI);
                    }
                }
                else
                {
                    aim = projectile.spriteDirection == 1 ? 0 : (float)Math.PI;
                }
                shootCounter++;
                gunRotation = QwertyMethods.SlowRotation(gunRotation, aim, 3);
                if (gunRotation > 0)
                {
                    if (gunRotation > (float)Math.PI / 2)
                    {
                        gunRotation = (float)Math.PI;
                    }
                    else
                    {
                        gunRotation = 0;
                    }
                }
                //projectile.velocity = Collision.TileCollision(projectile.position, projectile.velocity, projectile.width, projectile.height, player.Center.Y > projectile.Bottom.Y, player.Center.Y > projectile.Bottom.Y);
            }
        }
        public override void AI()
        {
            Player player = Main.player[projectile.owner];
            //Main.NewText(moveTo);
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod);

            if (modPlayer.PlatinumDagger)
            {
                projectile.timeLeft = 2;
            }
            distanceFromPlayer = (player.Center - projectile.Center).Length();
            timer++;
            switch (AttackMode)
            {
            case idle:
                projectile.tileCollide = true;
                attackTimer++;
                if (timer > 60)
                {
                    if (Main.netMode != 2 && projectile.owner == Main.myPlayer)
                    {
                        projectile.ai[0] = Main.rand.Next(0, 80);
                        projectile.ai[1] = Main.rand.Next(-80, 80);
                        if (Main.netMode == 1)
                        {
                            QwertysRandomContent.ProjectileAIUpdate(projectile);
                        }
                        projectile.netUpdate = true;
                    }
                    timer = 0;
                }
                moveTo = new Vector2(player.Center.X + projectile.ai[1], player.Center.Y - projectile.ai[0]);
                if (attackTimer > attackCooldown)
                {
                    if (QwertyMethods.ClosestNPC(ref target, targetMaxDistanceFromPlayer, player.Center, false, player.MinionAttackTargetNPC))
                    {
                        chargeTime = (int)((targetMaxDistanceFromPlayer + 100) / chargeSpeed);
                        for (int k = 0; k < 200; k++)
                        {
                            projectile.localNPCImmunity[k] = 0;
                        }
                        projectile.velocity = (target.Center - projectile.Center).SafeNormalize(-Vector2.UnitY) * chargeSpeed;
                        attackTimer         = 0;
                        AttackMode          = charging;
                    }
                }
                if (distanceFromPlayer > maxDistanceFromPlayer)
                {
                    AttackMode = returning;
                }
                break;

            case charging:
                projectile.tileCollide = true;
                attackTimer++;
                if (attackTimer > chargeTime)
                {
                    AttackMode  = returning;
                    attackTimer = 0;
                    //projectile.velocity = Vector2.Zero;
                }
                break;

            case returning:
                projectile.tileCollide = false;
                moveTo = player.Center;
                if (Collision.CheckAABBvAABBCollision(player.position, player.Size, projectile.position, projectile.Size))
                {
                    AttackMode = idle;
                }
                break;
            }
            if (AttackMode == charging)
            {
                projectile.friendly = true;
                projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2;
            }
            else
            {
                projectile.friendly  = false;
                projectile.velocity += (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * acceleration;
                if (projectile.velocity.Length() > maxSpeed)
                {
                    projectile.velocity = (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * maxSpeed;
                }
                projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, projectile.velocity.ToRotation() + (float)Math.PI / 2, 3);
            }

            //projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2;
        }
        public override void AI()
        {
            Player player = Main.player[projectile.owner];
            //Main.NewText(moveTo);
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();



            distanceFromPlayer = (player.Center - projectile.Center).Length();
            timer++;
            switch (AttackMode)
            {
            case idle:
                projectile.timeLeft = 120;
                attackTimer++;
                if (timer > 60)
                {
                    if (Main.netMode != 2 && projectile.owner == Main.myPlayer)
                    {
                        projectile.ai[0] = Main.rand.Next(0, 80);
                        projectile.ai[1] = Main.rand.Next(-80, 80);
                        if (Main.netMode == 1)
                        {
                            QwertysRandomContent.ProjectileAIUpdate(projectile);
                        }
                        projectile.netUpdate = true;
                    }
                    timer = 0;
                }
                moveTo = new Vector2(player.Center.X + projectile.ai[1], player.Center.Y - projectile.ai[0]);
                if (Main.mouseRight && Main.myPlayer == projectile.owner)
                {
                    projectile.velocity = (Main.MouseWorld - projectile.Center).SafeNormalize(-Vector2.UnitY) * chargeSpeed;
                    attackTimer         = 0;
                    AttackMode          = charging;
                }

                break;

            case charging:

                attackTimer++;

                break;
            }
            if (AttackMode == charging)
            {
                projectile.friendly = true;
                projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2;
            }
            else
            {
                projectile.friendly  = false;
                projectile.velocity += (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * acceleration;
                if (projectile.velocity.Length() > maxSpeed)
                {
                    projectile.velocity = (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * maxSpeed;
                }
                projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, projectile.velocity.ToRotation() + (float)Math.PI / 2, 3);
            }
            targetMaxDistanceFromPlayer = 400;
            foundTarget = false;
            //projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2;
        }