public ElFeroCactae(Vector2 scroll, String[] flags) : base(scroll) { //Source sprite sRect = new Rectangle(0, 0, 512, 512); Scale = new Vector2(1.3f, 1.3f); location = new Vector2(TGPAContext.Instance.TitleSafeArea.Right - this.dRect.Width, TGPAContext.Instance.ScreenHeight + 1); etat = CactusStateBoss.Attack; frametime = 400; ttl = InfiniteTimeToLive; //Stats wpn = new ElFeroCactaeWPN1(); wpn2 = new ElFeroCactaeWPN2(); wpn3 = new ElFeroCactaeWPN3(); wpn4 = new ElFeroCactaeWPN4(); attackDuration = 0.0f; hp = basicHP; maxLifebarValue = hp; speed = new Vector2(0f, 70.0f); Pattern = new MovePattern(); Pattern.AddPoint((int)location.X + dRect.Width / 2, 0); frametime = 0f; points = 125000; go = false; deltaX = -1; attacks = AttackBoss2.Circluar; this.hitbox = new EmptyHitbox(this); this.flagsOnDeath = flags; panel = new BackgroundActiveElement.ElFeroPanel(new Vector2(150, TGPAContext.Instance.ScreenHeight + 1)); TGPAContext.Instance.AddEnemy(panel); this.DrawLifebar = true; this.DrawWarning = true; }
public override void Update(GameTime gameTime) { attackDuration -= gameTime.ElapsedGameTime.TotalMilliseconds; if (attackDuration < 0) attackDuration = 0; if (frametime != 0) { frametime -= gameTime.ElapsedGameTime.TotalMilliseconds; if (frametime < 0) { frametime = 0; etat = CactusStateBoss.Attack; } } if ((IsHit) && (attacks != AttackBoss2.Grow)) { int oldWidth = this.dRect.Width; Vector2 newScale = this.Scale; newScale.X -= 0.003f; newScale.Y -= 0.003f; this.Scale = newScale; this.location.X += (oldWidth - this.dRect.Width) / 2; this.location.Y = TGPAContext.Instance.ScreenHeight - this.dRect.Height; } if (this.Scale.X < 0.35f) { attacks = AttackBoss2.Grow; attackDuration = 10000f; this.hitbox = new EmptyHitbox(this); } switch (etat) { case CactusStateBoss.Hit: sRect.Y = 512; dRect = ComputeDstRect(sRect); break; case CactusStateBoss.Attack: sRect.Y = 0; dRect = ComputeDstRect(sRect); break; } //Behavior //First thing : boss go to the middle of the screen if ((location.Y < (TGPAContext.Instance.ScreenHeight - dRect.Height)) && !go) { go = true; Background = true; speed = Vector2.Zero; Pattern = null; this.hitbox = new SquareHitbox(this, new Vector2(0.5f, 0f)); oldHitbox = (SquareHitbox)this.hitbox; } else if (!go) { Vector2 loc = panel.Location; loc.Y = this.location.Y; if (loc.Y < TGPAContext.Instance.ScreenHeight / 2) { loc.Y = TGPAContext.Instance.ScreenHeight / 2; } this.location.X = 450; loc.X += deltaX; panel.Location = loc; this.location.X += deltaX; deltaX = -deltaX; for (int i = 1; i <= 15; i++) { Vector2 smokeLoc = new Vector2(i * TGPAContext.Instance.ScreenWidth / 15, TGPAContext.Instance.ScreenHeight); TGPAContext.Instance.ParticleManager.AddParticle(new Smoke(smokeLoc, RandomMachine.GetRandomVector2(-5f, 5f, -10f, 10f), 0.70f, 0.70f, 0.70f, 1f, RandomMachine.GetRandomFloat(0.5f, 2.0f), RandomMachine.GetRandomInt(0, 4)), true); } TGPAContext.Instance.Player1.SetRumble(new Vector2(1.0f, 1.0f)); if (TGPAContext.Instance.Player2 != null) { TGPAContext.Instance.Player2.SetRumble(new Vector2(1.0f, 1.0f)); } } base.Update(gameTime); }
public override void Update(GameTime gameTime) { attackDuration -= gameTime.ElapsedGameTime.TotalMilliseconds; if (attackDuration < 0) { attackDuration = 0; } if (frametime != 0) { frametime -= gameTime.ElapsedGameTime.TotalMilliseconds; if (frametime < 0) { frametime = 0; etat = CactusStateBoss.Attack; } } if ((IsHit) && (attacks != AttackBoss2.Grow)) { int oldWidth = this.dRect.Width; Vector2 newScale = this.Scale; newScale.X -= 0.003f; newScale.Y -= 0.003f; this.Scale = newScale; this.location.X += (oldWidth - this.dRect.Width) / 2; this.location.Y = TGPAContext.Instance.ScreenHeight - this.dRect.Height; } if (this.Scale.X < 0.35f) { attacks = AttackBoss2.Grow; attackDuration = 10000f; this.hitbox = new EmptyHitbox(this); } switch (etat) { case CactusStateBoss.Hit: sRect.Y = 512; dRect = ComputeDstRect(sRect); break; case CactusStateBoss.Attack: sRect.Y = 0; dRect = ComputeDstRect(sRect); break; } //Behavior //First thing : boss go to the middle of the screen if ((location.Y < (TGPAContext.Instance.ScreenHeight - dRect.Height)) && !go) { go = true; Background = true; speed = Vector2.Zero; Pattern = null; this.hitbox = new SquareHitbox(this, new Vector2(0.5f, 0f)); oldHitbox = (SquareHitbox)this.hitbox; } else if (!go) { Vector2 loc = panel.Location; loc.Y = this.location.Y; if (loc.Y < TGPAContext.Instance.ScreenHeight / 2) { loc.Y = TGPAContext.Instance.ScreenHeight / 2; } this.location.X = 450; loc.X += deltaX; panel.Location = loc; this.location.X += deltaX; deltaX = -deltaX; for (int i = 1; i <= 15; i++) { Vector2 smokeLoc = new Vector2(i * TGPAContext.Instance.ScreenWidth / 15, TGPAContext.Instance.ScreenHeight); TGPAContext.Instance.ParticleManager.AddParticle(new Smoke(smokeLoc, RandomMachine.GetRandomVector2(-5f, 5f, -10f, 10f), 0.70f, 0.70f, 0.70f, 1f, RandomMachine.GetRandomFloat(0.5f, 2.0f), RandomMachine.GetRandomInt(0, 4)), true); } TGPAContext.Instance.Player1.SetRumble(new Vector2(1.0f, 1.0f)); if (TGPAContext.Instance.Player2 != null) { TGPAContext.Instance.Player2.SetRumble(new Vector2(1.0f, 1.0f)); } } base.Update(gameTime); }