protected override IAssignment PrepareNextAssignment()
{
IAssignment assignment;
switch (m_state)
{
case State.MoveToItem:
assignment = new MoveAssignment(this, this.Item.Environment, this.Item.Location, DirectionSet.Exact);
break;
case State.CarryItem:
assignment = new CarryItemAssignment(this, this.Item);
break;
case State.HaulToStockpile:
if (!m_stockpile.Area.Contains(this.Worker.Location))
{
assignment = new HaulToAreaAssignment(this, m_stockpile.Environment, m_stockpile.Area.ToIntGrid3(), DirectionSet.Exact, this.Item);
}
else
{
bool ok;
var l = m_stockpile.FindEmptyLocation(out ok);
if (!ok)
{
throw new Exception();
}
assignment = new HaulAssignment(this, m_stockpile.Environment, l, DirectionSet.Exact, this.Item);
}
break;
case State.DropItem:
assignment = new DropItemAssignment(this, this.Item);
break;
default:
throw new Exception();
}
return(assignment);
}