public BroodLord(LevelState parentWorld, Vector2 position) { this.parentWorld = parentWorld; this.position = position; this.dimensions = GlobalGameConstants.TileSize * 1.5f; this.velocity = Vector2.Zero; minions = new BroodLing[minionCount]; for (int i = 0; i < minionCount; i++) { minions[i] = new BroodLing(parentWorld, Vector2.Zero, this); parentWorld.EntityList.Add(minions[i]); } broodState = BroodLordState.Idle; enemy_life = 25; enemy_type = EnemyType.Alien; prob_item_drop = 0.45; number_drop_items = 4; anim = AnimationLib.loadNewAnimationSet("broodlord"); anim.Animation = anim.Skeleton.Data.FindAnimation("idle"); animation_time = 0; deadCushySoundTimer = 0; }
public override void knockBack(Vector2 direction, float magnitude, int damage, Entity attacker) { if (knockBackTimer > knockBackDuration) { parentWorld.Particles.pushBloodParticle(CenterPoint); parentWorld.Particles.pushBloodParticle(CenterPoint); parentWorld.Particles.pushBloodParticle(CenterPoint); parentWorld.Particles.pushBloodParticle(CenterPoint); parentWorld.Particles.pushBloodParticle(CenterPoint); parentWorld.Particles.pushBloodParticle(CenterPoint); parentWorld.Particles.pushBloodParticle(CenterPoint); parentWorld.Particles.pushBloodParticle(CenterPoint); parentWorld.Particles.pushBloodParticle(CenterPoint); enemy_life -= damage; if (deadCushySoundTimer > 500f) { AudioLib.playSoundEffect("fleshyKnockBack"); deadCushySoundTimer = 0; } if (enemy_life < 1) { broodState = BroodLordState.Dying; AudioLib.playSoundEffect("alienChaserDie"); for (int i = 0; i < 20; i++) { parentWorld.Particles.pushExplosiveGib(CenterPoint); } for (int i = 0; i < 10; i++) { parentWorld.Particles.pushGib(CenterPoint); } parentWorld.pushCoin(this); } knockBackTimer = 0; } }
public override void update(GameTime currentTime) { animation_time += currentTime.ElapsedGameTime.Milliseconds / 1000f; knockBackTimer += currentTime.ElapsedGameTime.Milliseconds; deadCushySoundTimer += currentTime.ElapsedGameTime.Milliseconds; if (broodState != BroodLordState.Dying && broodState != BroodLordState.Dead) { for (int i = 0; i < minionCount; i++) { if (minions[i].MinionState == BroodLing.BroodLingState.Dead) { float dir = (float)((Math.PI * 2 / minionCount) * i); minions[i].spawn(CenterPoint + (new Vector2((float)(Math.Cos(dir)), (float)(Math.Sin(dir))) * eggDistance)); } } } if (broodState == BroodLordState.Idle) { for (int i = 0; i < minionCount; i++) { float dir = (float)((Math.PI * 2 / minionCount) * i); minions[i].setTarget(CenterPoint + (new Vector2((float)(Math.Cos(dir)), (float)(Math.Sin(dir))) * eggDistance)); } foreach (Entity en in parentWorld.EntityList) { if (en is Player && Vector2.Distance(en.CenterPoint, CenterPoint) < 500) { broodState = BroodLordState.Aggro; } } } else if (broodState == BroodLordState.Aggro) { foreach (Entity en in parentWorld.EntityList) { if (en.Enemy_Type == EnemyType.Player || en.Enemy_Type == EnemyType.Prisoner || en.Enemy_Type == EnemyType.Guard) { if (Vector2.Distance(en.CenterPoint, CenterPoint) < 500) { if (hitTest(en)) { en.knockBack(en.CenterPoint - CenterPoint, 3.0f, 4); } } } if (en is Player && Vector2.Distance(en.CenterPoint, CenterPoint) < 500) { for (int i = 0; i < minionCount; i++) { minions[i].setTarget(en.CenterPoint - (i * en.Dimensions / 2)); } break; } else if (en is Player && Vector2.Distance(en.CenterPoint, CenterPoint) > 500) { broodState = BroodLordState.Idle; } } } else if (broodState == BroodLordState.Dying) { broodState = BroodLordState.Dead; } else if (broodState == BroodLordState.Dead) { position = new Vector2(float.MinValue, float.MaxValue); dimensions = Vector2.Zero; bool removeCheck = true; for (int i = 0; i < minionCount; i++) { removeCheck = (minions[i].MinionState == BroodLing.BroodLingState.Dead) && removeCheck; } remove_from_list = removeCheck; if (removeCheck) { for (int i = 0; i < minionCount; i++) { minions[i].delete(); } } } else { throw new Exception("Invalid Broodlord State"); } anim.Animation.Apply(anim.Skeleton, animation_time, true); }