public override IEnumerable <Status> Run() { if (Zone == null) { Creature.DrawIndicator(IndicatorManager.StandardIndicators.Question); yield return(Status.Fail); yield break; } if (Resource.Count <= 0) { yield return(Status.Success); yield break; } List <GameComponent> createdItems = Creature.Inventory.RemoveAndCreate(Resource, Inventory.RestockType.RestockResource); if (createdItems.Count == 0) { yield return(Status.Success); } foreach (GameComponent b in createdItems) { if (Zone.AddItem(b)) { Creature.Stats.NumItemsGathered++; } else { Creature.Inventory.AddResource(new ResourceAmount(Resource.Type, 1), Inventory.RestockType.RestockResource); b.Delete(); } } Creature.NoiseMaker.MakeNoise("Stockpile", Creature.AI.Position); Creature.CurrentCharacterMode = Creature.Stats.CurrentClass.AttackMode; Creature.Sprite.ResetAnimations(Creature.Stats.CurrentClass.AttackMode); Creature.Sprite.PlayAnimations(Creature.Stats.CurrentClass.AttackMode); while (!Creature.Sprite.AnimPlayer.IsDone()) { yield return(Status.Running); } var resource = Library.GetResourceType(Resource.Type); if (resource.Tags.Contains(DwarfCorp.Resource.ResourceTags.Corpse)) { Creature.AddThought("I laid a friend to rest.", new TimeSpan(0, 8, 0, 0), 10.0f); } yield return(Status.Running); Creature.CurrentCharacterMode = CharacterMode.Idle; yield return(Status.Success); }
public override IEnumerable <Status> Run() { Creature.IsCloaked = false; if (Zone != null) { var resourcesToStock = Creature.Inventory.Resources.Where(a => a.MarkedForRestock && Zone is Stockpile && (Zone as Stockpile).IsAllowed(a.Resource)).ToList(); foreach (var resource in resourcesToStock) { List <GameComponent> createdItems = Creature.Inventory.RemoveAndCreate(new ResourceAmount(resource.Resource), Inventory.RestockType.RestockResource); foreach (GameComponent b in createdItems) { if (Zone.AddItem(b)) { Creature.NoiseMaker.MakeNoise("Stockpile", Creature.AI.Position); Creature.Stats.NumItemsGathered++; Creature.CurrentCharacterMode = Creature.Stats.CurrentClass.AttackMode; Creature.Sprite.ResetAnimations(Creature.Stats.CurrentClass.AttackMode); Creature.Sprite.PlayAnimations(Creature.Stats.CurrentClass.AttackMode); while (!Creature.Sprite.AnimPlayer.IsDone()) { yield return(Status.Running); } yield return(Status.Running); } else { Creature.Inventory.AddResource(new ResourceAmount(resource.Resource, 1), Inventory.RestockType.RestockResource); b.Delete(); } } } } Timer waitTimer = new Timer(1.0f, true); bool removed = Creature.World.RemoveResourcesWithToss(Resources, Agent.Position, Zone); if (!removed) { yield return(Status.Fail); } else { Agent.Creature.Inventory.AddResource(Resources.CloneResource(), Inventory.RestockType.None); Agent.Creature.Sprite.ResetAnimations(Creature.Stats.CurrentClass.AttackMode); while (!waitTimer.HasTriggered) { Agent.Creature.CurrentCharacterMode = Creature.Stats.CurrentClass.AttackMode; waitTimer.Update(DwarfTime.LastTime); yield return(Status.Running); } Agent.Creature.CurrentCharacterMode = CharacterMode.Idle; yield return(Status.Success); } }
public override IEnumerable <Status> Run() { Zone zone = Agent.Faction.GetNearestStockpile(Agent.Position, (s) => !s.IsFull() && Resources.All(resource => s.IsAllowed(resource.ResourceType))); if (zone != null) { var resourcesToStock = Creature.Inventory.Resources.Where(a => a.MarkedForRestock).ToList(); foreach (var resource in resourcesToStock) { List <Body> createdItems = Creature.Inventory.RemoveAndCreate(new ResourceAmount(resource.Resource), Inventory.RestockType.RestockResource); foreach (Body b in createdItems) { if (zone.AddItem(b)) { Creature.NoiseMaker.MakeNoise("Stockpile", Creature.AI.Position); Creature.Stats.NumItemsGathered++; Creature.CurrentCharacterMode = CharacterMode.Attacking; Creature.Sprite.ResetAnimations(CharacterMode.Attacking); Creature.Sprite.PlayAnimations(CharacterMode.Attacking); while (!Creature.Sprite.AnimPlayer.IsDone()) { yield return(Status.Running); } yield return(Status.Running); } } } } Timer waitTimer = new Timer(1.0f, true); bool removed = Agent.Faction.RemoveResources(Resources, Agent.Position); if (!removed) { yield return(Status.Fail); } else { foreach (ResourceAmount resource in Resources) { Agent.Creature.Inventory.AddResource(resource.CloneResource(), Inventory.RestockType.None); } while (!waitTimer.HasTriggered) { waitTimer.Update(DwarfTime.LastTime); yield return(Status.Running); } yield return(Status.Success); } }
public override IEnumerable <Status> Run() { if (Zone == null) { Creature.DrawIndicator(IndicatorManager.StandardIndicators.Question); yield return(Status.Fail); yield break; } if (Resource.NumResources <= 0) { yield return(Status.Success); yield break; } List <Body> createdItems = Creature.Inventory.RemoveAndCreate(Resource); if (createdItems.Count == 0) { Creature.DrawIndicator(IndicatorManager.StandardIndicators.Question); yield return(Status.Fail); } foreach (Body b in createdItems) { if (Zone.AddItem(b)) { Creature.NoiseMaker.MakeNoise("Hurt", Creature.AI.Position); Creature.Stats.NumItemsGathered++; Creature.AI.AddXP(1); Creature.CurrentCharacterMode = Creature.CharacterMode.Attacking; Creature.Sprite.ResetAnimations(Creature.CharacterMode.Attacking); Creature.Sprite.PlayAnimations(Creature.CharacterMode.Attacking); while (!Creature.Sprite.CurrentAnimation.IsDone()) { yield return(Status.Running); } yield return(Status.Running); } else { Creature.DrawIndicator(IndicatorManager.StandardIndicators.Question); Creature.CurrentCharacterMode = Creature.CharacterMode.Idle; yield return(Status.Fail); } } Creature.CurrentCharacterMode = Creature.CharacterMode.Idle; yield return(Status.Success); }
public override IEnumerable <Status> Run() { if (Zone == null) { Creature.DrawIndicator(IndicatorManager.StandardIndicators.Question); yield return(Status.Fail); yield break; } if (Resource.NumResources <= 0) { yield return(Status.Success); yield break; } List <Body> createdItems = Creature.Inventory.RemoveAndCreate(Resource, Inventory.RestockType.RestockResource); if (createdItems.Count == 0) { yield return(Status.Success); } foreach (Body b in createdItems) { if (Zone.AddItem(b)) { Creature.Stats.NumItemsGathered++; } } Creature.NoiseMaker.MakeNoise("Stockpile", Creature.AI.Position); Creature.CurrentCharacterMode = Creature.AttackMode; Creature.Sprite.ResetAnimations(Creature.AttackMode); Creature.Sprite.PlayAnimations(Creature.AttackMode); while (!Creature.Sprite.AnimPlayer.IsDone()) { yield return(Status.Running); } var resource = ResourceLibrary.GetResourceByName(Resource.ResourceType); if (resource.Tags.Contains(DwarfCorp.Resource.ResourceTags.Corpse)) { Creature.AddThought(Thought.ThoughtType.BuriedDead); } yield return(Status.Running); Creature.CurrentCharacterMode = CharacterMode.Idle; yield return(Status.Success); }
public override IEnumerable <Status> Run() { if (Zone == null) { Creature.DrawIndicator(IndicatorManager.StandardIndicators.Question); yield return(Status.Fail); yield break; } if (Resource.NumResources <= 0) { yield return(Status.Success); yield break; } List <Body> createdItems = Creature.Inventory.RemoveAndCreate(Resource); if (createdItems.Count == 0) { Creature.DrawIndicator(IndicatorManager.StandardIndicators.Question); yield return(Status.Fail); } foreach (Body b in createdItems) { if (Zone.AddItem(b)) { Creature.NoiseMaker.MakeNoise("Hurt", Creature.AI.Position); Creature.Stats.NumItemsGathered++; Creature.AI.AddXP(1); yield return(Status.Running); } else { Creature.DrawIndicator(IndicatorManager.StandardIndicators.Question); yield return(Status.Fail); } } yield return(Status.Success); }