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);
    }
Пример #2
0
    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
 }