示例#1
0
        public override void Update(float dt)
        {
            base.Update(dt);

            if (Target == null)
            {
                return;
            }

            t += dt;

            if (t >= FireRate)
            {
                t = 0;

                var pp = new ProjectilePattern(CircleProjectilePattern.Make(8f, 5))
                {
                    Position = Center
                };

                for (var j = 0; j < 5; j++)
                {
                    var b = Projectile.Make(this, "small");
                    pp.Add(b);
                    b.AddLight(32f, Projectile.RedLight);
                }

                pp.Launch(AngleTo(Target), 30);
                Area.Add(pp);
            }
        }
示例#2
0
            public override void Init()
            {
                base.Init();

                var a = Self.GetComponent <ZAnimationComponent>();

                a.SetAutoStop(true);


                Self.GetComponent <AudioEmitterComponent>().EmitRandomized("mob_oldking_land");

                Tween.To(1.8f, a.Scale.X, x => a.Scale.X = x, 0.1f);
                Tween.To(0.2f, a.Scale.Y, x => a.Scale.Y = x, 0.1f).OnEnd = () => {
                    Tween.To(1, a.Scale.X, x => a.Scale.X = x, 0.3f);
                    Tween.To(1, a.Scale.Y, x => a.Scale.Y = x, 0.3f);
                };

                Self.GetComponent <RectBodyComponent>().Velocity = Vector2.Zero;

                for (var i = 0; i < SmallCount; i++)
                {
                    var an = (float)(((float)i) / SmallCount * Math.PI * 2);

                    var pp = new ProjectilePattern(CircleProjectilePattern.Make(4.5f, 10 * (i % 2 == 0 ? 1 : -1)))
                    {
                        Position = Self.BottomCenter
                    };

                    for (var j = 0; j < 2; j++)
                    {
                        var b = Projectile.Make(Self, "small");
                        pp.Add(b);
                        b.AddLight(32f, Projectile.RedLight);
                        b.CanBeReflected = false;
                        b.CanBeBroken    = false;
                    }

                    pp.Launch(an, 40);
                    Self.Area.Add(pp);
                }

                var aa = Self.AngleTo(Self.Target);

                for (var i = 0; i < InnerCount; i++)
                {
                    var s = Rnd.Chance(40);
                    var b = Projectile.Make(Self, "small", aa + Rnd.Float(-0.3f, 0.3f), Rnd.Float(2, 12), true, 1, null, Rnd.Float(0.5f, 1f));

                    b.Color          = ProjectileColor.Green;
                    b.Center         = Self.BottomCenter;
                    b.CanBeReflected = false;
                    b.CanBeBroken    = false;
                    b.AddLight(s ? 16f : 32f, Projectile.GreenLight);
                }
            }
示例#3
0
        public override void Update(float dt)
        {
            base.Update(dt);

            if ((count + 1) * Delay <= T)
            {
                count++;

                if (count == 4)
                {
                    Self.SelectAttack();
                    return;
                }

                var m = new Missile(Self, Self.Target);
                m.AddLight(32f, Projectile.RedLight);

                m.OnDeath += (p, e, t) => {
                    for (var i = 0; i < SmallCount; i++)
                    {
                        var an = (float)(((float)i) / SmallCount * Math.PI * 2);

                        var pp = new ProjectilePattern(CircleProjectilePattern.Make(4.5f, 10 * (i % 2 == 0 ? 1 : -1)))
                        {
                            Position = p.Center
                        };

                        for (var j = 0; j < 2; j++)
                        {
                            var b = Projectile.Make(Self, "small");
                            pp.Add(b);
                            b.Range = 2f;
                            b.AddLight(32f, Projectile.RedLight);
                        }

                        pp.Launch(an, 40);
                        Self.Area.Add(pp);
                    }

                    var a = p.AngleTo(Self.Target);

                    for (var i = 0; i < InnerCount; i++)
                    {
                        var s = Rnd.Chance(40);
                        var b = Projectile.Make(Self, s ? "green_tiny" : "green_small", a + Rnd.Float(-0.3f, 0.3f), Rnd.Float(2, 12), true, 1, p);

                        b.Center = p.Center;
                        b.AddLight(s ? 16f : 32f, Projectile.GreenLight);
                    }
                };
            }
        }
示例#4
0
            public override void Update(float dt)
            {
                base.Update(dt);

                if (T >= 1f)
                {
                    T = 0;
                    count++;

                    var a          = Self.AngleTo(Self.Target) + Rnd.Float(-0.1f, 0.1f) + (count == 1 ? 0 : Math.PI);
                    var projectile = Projectile.Make(Self, "square", a, 15f);
                    Self.Animate();

                    projectile.Color = ProjectileColor.Red;
                    projectile.AddLight(32f, projectile.Color);
                    projectile.Center        += MathUtils.CreateVector(a, 8);
                    projectile.CanBeBroken    = false;
                    projectile.CanBeReflected = false;

                    var tt = 0f;

                    projectile.Controller += (p, dtt) => {
                        tt += dtt;

                        if (tt >= 0.3f)
                        {
                            tt = 0;

                            var s = projectile.BodyComponent.Velocity.Length();

                            if (s < 3f)
                            {
                                return;
                            }

                            var z = Projectile.Make(Self, "small", a - Math.PI + Rnd.Float(-0.1f, 0.1f), s, scale: Rnd.Float(0.8f, 1.2f));
                            z.Center = projectile.Center;
                        }
                    };

                    projectile.Controller   += SlowdownProjectileController.Make();
                    projectile.Range         = 5f;
                    projectile.IndicateDeath = true;

                    projectile.OnDeath += (p, e, t) => {
                        for (var i = 0; i < SmallCount; i++)
                        {
                            var an = (float)(((float)i) / SmallCount * Math.PI * 2);

                            var pp = new ProjectilePattern(CircleProjectilePattern.Make(4.5f, 10 * (i % 2 == 0 ? 1 : -1)))
                            {
                                Position = p.Center
                            };

                            for (var j = 0; j < 4; j++)
                            {
                                var b = Projectile.Make(Self, "small");
                                pp.Add(b);
                                b.Color = ProjectileColor.Red;
                                b.AddLight(32f, b.Color);
                                b.CanBeReflected = false;
                            }

                            pp.Launch(an, 40);
                            Self.Area.Add(pp);
                        }

                        for (var i = 0; i < InnerCount; i++)
                        {
                            var b = Projectile.Make(Self, "snowflake", Rnd.AnglePI(), Rnd.Float(10, 40), true, 1, null, Rnd.Float(0.5f, 1f));

                            b.Color          = ProjectileColor.Cyan;
                            b.Center         = p.Center;
                            b.CanBeReflected = false;
                            b.Controller    += SlowdownProjectileController.Make(Rnd.Float(0.5f, 4f));
                        }
                    };

                    if (count == 2)
                    {
                        Become <IdleState>();
                    }
                }
            }
示例#5
0
            public override void Update(float dt)
            {
                base.Update(dt);

                sinceLast += dt;

                if (sinceLast >= 0.5f)
                {
                    sinceLast = 0;
                    var a      = Self.AngleTo(Self.Target);
                    var second = Self.InThirdPhase;

                    for (var i = 0; i < (second ? 1 : 3); i++)
                    {
                        var i1 = i;

                        Timer.Add(() => {
                            if (second)
                            {
                                var pp = new ProjectilePattern(CircleProjectilePattern.Make(9f, i1 % 2 == 0 ? -10 : 10))
                                {
                                    Position = Self.Center
                                };

                                for (var j = 0; j < 4; j++)
                                {
                                    var b = Projectile.Make(Self, j % 2 == 0 ? "circle" : "small");
                                    pp.Add(b);
                                    b.Color = j % 2 == 0 ? ProjectileColor.Orange : ProjectileColor.Red;
                                    b.AddLight(32f, b.Color);
                                }

                                pp.Launch(a, 80);
                                Self.Area.Add(pp);
                            }
                            else
                            {
                                var p   = Projectile.Make(Self, "circle", a + Rnd.Float(-0.1f, 0.1f), 30f, scale: Rnd.Float(0.8f, 1f));
                                p.Color = Rnd.Chance() ? ProjectileColor.Yellow : ProjectileColor.Orange;
                                p.AddLight(64f, p.Color);
                            }

                            Self.GetComponent <AudioEmitterComponent>().EmitRandomized("mob_bee_shot");
                        }, i * 0.15f);
                    }
                }

                var t = T + Math.PI * 0.5f;
                var r = Self.GetComponent <RoomComponent>().Room;

                var x = r.CenterX + (float)Math.Cos(t) * (r.Width * 0.4f);
                var y = r.CenterY - r.Height * 0.2f + (float)Math.Sin(t * 2) * (r.Height * 0.2f);


                var dx = x - Self.CenterX;
                var dy = y - Self.CenterY;

                var s = (dt * 10);

                Self.CenterX += dx * s;
                Self.CenterY += dy * s;
                Self.GraphicsComponent.Flipped = dx < 0;


                if (t >= Math.PI * 4.5f)
                {
                    Become <IdleState>();
                }
            }
示例#6
0
            public override void Update(float dt)
            {
                base.Update(dt);
                delay -= dt;

                if (delay <= 0)
                {
                    if (count >= 5f)
                    {
                        Become <IdleState>();
                        return;
                    }

                    delay = 3f;
                    count++;

                    Self.GetComponent <BkGraphicsComponent>().Animate();

                    var m = new Missile(Self, Self.Target);
                    Self.Area.Add(m);
                    m.AddLight(64f, Projectile.RedLight);

                    m.HurtOwner = false;
                    m.OnDeath  += (p, e, t) => {
                        for (var i = 0; i < SmallCount; i++)
                        {
                            var an = (float)(((float)i) / SmallCount * Math.PI * 2);

                            var pp = new ProjectilePattern(CircleProjectilePattern.Make(6.5f, 10 * (i % 2 == 0 ? 1 : -1)))
                            {
                                Position = p.Center
                            };

                            for (var j = 0; j < 5; j++)
                            {
                                var b = Projectile.Make(Self, "small");
                                pp.Add(b);
                                b.AddLight(32f, Projectile.RedLight);
                                b.CanBeReflected = false;
                                b.CanBeReflected = false;
                                b.CanBeBroken    = false;
                            }

                            pp.Launch(an, 40);
                            Self.Area.Add(pp);
                        }

                        var aa = Self.AngleTo(Self.Target);

                        for (var i = 0; i < InnerCount; i++)
                        {
                            var b = Projectile.Make(Self, "circle", aa + Rnd.Float(-0.3f, 0.3f), Rnd.Float(2, 12), true, 0, null, Rnd.Float(0.5f, 1f));

                            b.Color          = ProjectileColor.Orange;
                            b.Center         = p.Center;
                            b.CanBeReflected = false;
                            b.CanBeBroken    = false;
                        }
                    };
                }
            }