Ejemplo n.º 1
0
        public void HellionPortals(Player P, ref Vector2 PWhere, ref Vector2 DrakenWhere, ref Vector2 FlyTo, ref Vector2 FlySpeed, ref Vector2 FlyFriction)
        {
            for (int rotz = 0; rotz < 360; rotz += 360 / 3)
            {
                Vector2 where = npc.Center;
                Vector2 wheretogo2 = new Vector2(96f, rotz);
                Vector2 where2     = P.Center - npc.Center;
                where2.Normalize();
                Vector2 wheretogoxxx = new Vector2(0.40f, 0f);
                Func <Vector2, Vector2, float, float, float> projectilefacing = delegate(Vector2 playerpos, Vector2 projpos, float time, float current)
                {
                    Vector2 wheretogoxxx2 = new Vector2(wheretogoxxx.X, wheretogoxxx.Y);
                    float   val           = current;
                    val = current.AngleLerp((playerpos - projpos).ToRotation(), wheretogoxxx2.X);

                    return(val);
                };
                Func <Vector2, Vector2, float, Vector2, Vector2> projectilemoving = delegate(Vector2 playerpos, Vector2 projpos, float time, Vector2 current)
                {
                    Vector2 wheretogo = new Vector2(wheretogo2.X, wheretogo2.Y);
                    float   angle     = MathHelper.ToRadians(((wheretogo.Y + time * 2f)));
                    Vector2 instore   = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)) * wheretogo.X;

                    if (TrueDraken.GetDraken() != null)
                    {
                        Vector2 gothere   = TrueDraken.GetDraken().npc.Center + instore;
                        Vector2 slideover = gothere - projpos;
                        current = slideover / 2f;
                    }

                    current /= 1.125f;

                    Vector2 speedz = current;
                    float   spzzed = speedz.Length();
                    speedz.Normalize();
                    if (spzzed > 50f)
                    {
                        current = (speedz * spzzed);
                    }

                    return(current);
                };
                Func <float, bool> projectilepattern = (time) => (time > 60 && time % 200 == 0);

                int ize2 = ParadoxMirror.SummonMirror(where, Vector2.Zero, 100, 1100, (npc.Center - where).ToRotation(), ProjectileID.EmeraldBolt, projectilepattern, 15f, 200);
                (Main.projectile[ize2].modProjectile as ParadoxMirror).projectilefacing = projectilefacing;
                (Main.projectile[ize2].modProjectile as ParadoxMirror).projectilemoving = projectilemoving;
                Main.PlaySound(SoundID.Item, (int)Main.projectile[ize2].position.X, (int)Main.projectile[ize2].position.Y, 33, 0.25f, 0.5f);
                Main.projectile[ize2].netUpdate = true;
            }
        }
Ejemplo n.º 2
0
        public override void Explode()
        {
            chargeup += 1;

            if (projectile.timeLeft == timeleftfirerate && projectile.ai[0] > 0)
            {
                Player owner = Main.player[projectile.owner];

                if (owner != null && !owner.dead && owner.channel)
                {
                    everyother += 1;
                    everyother %= 3;

                    Vector2 gotohere = new Vector2();
                    gotohere = projectile.velocity;                    //Main.MouseScreen - projectile.Center;
                    gotohere.Normalize();

                    float accuracy = Math.Max(0.005f, 1f - ((chargeup) / 500f));

                    Vector2 perturbedSpeed = new Vector2(gotohere.X, gotohere.Y).RotatedByRandom(MathHelper.ToRadians(0)) * projectile.velocity.Length();

                    for (int i = 2; i < 8; i += 1)
                    {
                        int proj = Projectile.NewProjectile(new Vector2(projectile.Center.X, projectile.Center.Y), (new Vector2(perturbedSpeed.X, perturbedSpeed.Y) * 2f).RotatedByRandom((MathHelper.ToRadians((i * 75))) * accuracy).RotatedByRandom(MathHelper.ToRadians(160f) * accuracy), mod.ProjectileType("RainbowBolt"), (int)((projectile.damage * 0.60f) * damagescale), projectile.knockBack / 10f, owner.whoAmI);
                        Main.projectile[proj].magic  = true;
                        Main.projectile[proj].minion = false;
                        IdgProjectile.Sync(proj);
                    }


                    if (everyother == 2)
                    {
                        Vector2 backthere = new Vector2(-100, 0).RotatedByRandom(MathHelper.ToRadians(80));

                        //int proj2 = Projectile.NewProjectile(backthere, gohere, mod.ProjectileType("ProjectilePortalRealityShaperHit"), (int)(projectile.damage * damagescale), projectile.knockBack / 10f, owner.whoAmI, mod.ProjectileType("HotRound"));

                        Func <Vector2, Vector2, float, float, Projectile, float> projectilefacingmore = delegate(Vector2 playerpos, Vector2 projpos, float time, float current, Projectile proj)
                        {
                            float val = current;
                            if (projectile.active)
                            {
                                if (time < 100)
                                {
                                    val = current.AngleLerp(projectile.velocity.ToRotation() + proj.ai[1], 0.15f);
                                }
                                else
                                {
                                    val = current.AngleLerp(projectile.velocity.ToRotation() + proj.ai[1], 0.05f);
                                }
                            }
                            return(val);
                        };
                        Func <Vector2, Vector2, float, Vector2, Projectile, Vector2> projectilemovingmore = delegate(Vector2 playerpos, Vector2 projpos, float time, Vector2 current, Projectile proj)
                        {
                            if (projectile.active)
                            {
                                Vector2 normspeed = projectile.velocity;
                                normspeed.Normalize();

                                Vector2 gothere333 = (playerpos + backthere.RotatedBy(projectile.velocity.ToRotation())) - normspeed * 128f;
                                Vector2 slideover  = gothere333 - projpos;
                                current = slideover / 2f;
                            }

                            current /= 1.125f;
                            if (projectile.active)
                            {
                                Vector2 speedz = current;
                                float   spzzed = speedz.Length();
                                speedz.Normalize();
                                if (spzzed > 100f)
                                {
                                    current = (speedz * spzzed);
                                }
                            }
                            else
                            {
                                proj.timeLeft = Math.Min(proj.timeLeft, 20);
                            }

                            return(current);
                        };

                        Func <float, bool> projectilepattern = (time) => (time == 20);

                        int ize2 = ParadoxMirror.SummonMirror(owner.Center, Vector2.Zero, (int)((projectile.damage * 3) * damagescale), 200, projectile.velocity.ToRotation(), mod.ProjectileType("HellionBeam"), projectilepattern, 2.5f, 145, true);
                        (Main.projectile[ize2].modProjectile as ParadoxMirror).projectilefacingmore = projectilefacingmore;
                        (Main.projectile[ize2].modProjectile as ParadoxMirror).projectilemovingmore = projectilemovingmore;
                        Main.PlaySound(SoundID.Item, (int)Main.projectile[ize2].position.X, (int)Main.projectile[ize2].position.Y, 33, 0.25f, 0.5f);
                        Main.projectile[ize2].owner                = projectile.owner;
                        Main.projectile[ize2].aiStyle              = -2;
                        Main.projectile[ize2].ai[1]                = Main.rand.NextFloat(-MathHelper.ToRadians(20), MathHelper.ToRadians(20));
                        Main.projectile[ize2].friendly             = true;
                        Main.projectile[ize2].hostile              = false;
                        Main.projectile[ize2].usesLocalNPCImmunity = true;
                        Main.projectile[ize2].localNPCHitCooldown  = 15;
                        Main.projectile[ize2].netUpdate            = true;


                        IdgProjectile.Sync(ize2);
                    }
                }
            }
        }