protected override BGoapState GetPreconditionsFromGoal(BGoapState goalState, Settings settings) { BGoapState returnState = new BGoapState(); returnState.Set(WorldStates.STATE_FLOAT_SATURATION, Mathf.Max(goalState.Get(WorldStates.STATE_FLOAT_SATURATION) - RPGHunger.GetSingleItemFoodLevel(), 0)); //require less saturation - will be increased returnState.Set(WorldStateMinItemCategory.GetStateForItem(foodCategory), goalState.Get(WorldStateMinItemCategory.GetStateForItem(foodCategory)) + 1); //require one more food item return(returnState); }
public override void UpdateSensor() { base.UpdateSensor(); Dictionary <DBItem, int> itemCounts = new Dictionary <DBItem, int>(); Dictionary <DBItemCategory, int> categoryCounts = new Dictionary <DBItemCategory, int>(); var worldState = GetMemory().GetWorldState(); foreach (var item in items) { if (!itemCounts.ContainsKey(item.sourceItem)) { itemCounts.Add(item.sourceItem, 1); } else { itemCounts.Add(item.sourceItem, itemCounts[item.sourceItem] + 1); } foreach (var category in item.sourceItem.categories) { if (!categoryCounts.ContainsKey(category)) { categoryCounts.Add(category, 1); } else { categoryCounts.Add(category, categoryCounts[category] + 1); } } } foreach (var pair in itemCounts) { worldState.Set(WorldStateMinItem.GetStateForItem(pair.Key), pair.Value); } foreach (var pair in categoryCounts) { worldState.Set(WorldStateMinItemCategory.GetStateForItem(pair.Key), pair.Value); } }
protected override void InitializePreconditionsAndEffects(BGoapState staticEffects, ref BGoapState parametrizedEffects, BGoapState staticPreconditions) { parametrizedEffects.Set(WorldStates.STATE_FLOAT_SATURATION, 0); //we know nothing about current saturation, so we can't promise anything parametrizedEffects.Set(WorldStateMinItemCategory.GetStateForItem(foodCategory), 0); //probably not required, set default to 0 }