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); } }
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); } }
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); } }; } }
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>(); } } }
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>(); } }
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; } }; } }