public void VacateArea(RectInt area, string areaName) { foreach (Minion minion in minions) { if (!minion.hasWork && area.Contains(minion.pos)) { JobTransient.AssignWork(minion, "MapVacate", new TaskGoTo(this, $"Vacating {areaName}.", PathCfg.Vacate(area))); } } }
public Vec2I[] GetPath(Vec2I start, PathCfg cfg) => map.nav.GetPath(start, cfg);
private IEnumerable <Task> WanderTasks(Vec2I pos) { yield return(new TaskGoTo(game, "Wandering.", PathCfg.Point(pos))); yield return(new TaskWaitDuration(game, "Wandering.", 1f)); }
public IEnumerable <Task> GetHaulTasks() { var itemClaim = query.TaskClaim(haulRemaining); yield return(itemClaim); var haulClaim = new TaskClaim(game, (work) => { BB.AssertNotNull(itemClaim.claim); ItemClaim item = itemClaim.claim; if (item.amt > haulRemaining) { return(null); } amtClaimed += item.amt; return(new ClaimLambda(() => amtClaimed -= item.amt)); }); yield return(haulClaim); yield return(new TaskGoTo(game, taskDesc, PathCfg.Point(itemClaim.claim.pos))); yield return(new TaskPickupItem(itemClaim)); yield return(new TaskGoTo(game, taskDesc, dst)); yield return(new TaskLambda(game, "dropoff item", (work) => { if (!work.agent.carryingItem) { return false; } work.Unclaim(haulClaim); Item item = work.agent.RemoveItem(); // Should never happen int haulAmt = itemClaim.claim.amt; if (haulAmt > haulRemaining) { haulAmt = haulRemaining; } if (item.info.amt > haulAmt) { game.DropItems( game.Tile(work.agent.pos), item.info.WithAmount(item.info.amt - haulAmt).Enumerate()); } // Also should never happen else if (item.info.amt < haulAmt) { haulAmt = item.info.amt; } item.Destroy(); amtStored += haulAmt; return true; })); }
public TaskGoTo(Game game, string description, PathCfg cfg) : base(game, description, cfg) { }
public ItemQueryCfg(ItemDef def, int amt, PathCfg dst) : this(new ItemFilter(def), amt, dst) { }
public ItemQueryCfg(ItemFilter filter, int amt, PathCfg dst) { this.filter = filter; this.amt = amt; this.dst = dst; }