/// <summary> /// Generates desires. /// </summary> public void Options() { Desires.Clear(); foreach (var b in Beliefs) { if (b.Name == TypesBelief.PotentialWaterSpots) { var waterPos = b.Predicate as List <Tuple <int, int> >; waterPos.Sort(delegate(Tuple <int, int> tupleA, Tuple <int, int> tupleB) { var distA = ManhattanDistance(tupleA, new Tuple <int, int>(X, Y)); var distB = ManhattanDistance(tupleB, new Tuple <int, int>(X, Y)); if (distA < distB) { return(1); } if (distA > distB) { return(-1); } return(0); }); foreach (var wPos in waterPos) { Desires.Enqueue(new Desire(TypesDesire.FindWater, new Desire(TypesDesire.GotoLocation, new Desire(TypesDesire.Dig, wPos)))); } } } }