public IEnumerable <Act.Status> SummonSkeletons() { while (true) { Skeletons.RemoveAll(skeleton => skeleton.IsDead); Creature.CurrentCharacterMode = CharacterMode.Idle; Creature.OverrideCharacterMode = false; SummonTimer.Update(DwarfTime.LastTime); if (SummonTimer.HasTriggered && Skeletons.Count < MaxSkeletons) { Creature.CurrentCharacterMode = Creature.Stats.CurrentClass.AttackMode; Creature.OverrideCharacterMode = true; Creature.Sprite.ReloopAnimations(Creature.Stats.CurrentClass.AttackMode); SoundManager.PlaySound(ContentPaths.Audio.Oscar.sfx_ic_necromancer_summon, Position, true); SummonTimer.Reset(SummonTimer.TargetTimeSeconds); for (int i = Skeletons.Count; i < MaxSkeletons; i += 2) { SummonSkeleton(); } yield return(Act.Status.Success); } else if (SummonTimer.HasTriggered) { yield return(Act.Status.Success); } GatherSkeletonsTimer.Update(DwarfTime.LastTime); if (GatherSkeletonsTimer.HasTriggered) { var wander = new WanderAct(this, GatherSkeletonsTimer.TargetTimeSeconds, 1.0f, 1.0f); foreach (var status in wander.Run()) { GatherSkeletons(); yield return(Act.Status.Running); } } AttackTimer.Update(DwarfTime.LastTime); if (AttackTimer.HasTriggered) { OrderSkeletonsToAttack(); } yield return(Act.Status.Running); } }
/// <summary> /// Updates a Monster /// </summary> public new void Update() { base.Update(); AttackTimer.Update(); MoveTimer.Update(); if (MoveTimer.ActionReady) { if (MoveToLowestWeight()) { return; } if (GameManager.Random.Next(0, 100) == 0) { RegenHealth(); MoveRandomOne(); } } }