Example #1
0
    public virtual void EatNearbyFood()
    {
        if (UnityEngine.Time.time < nextEatTime)
        {
            return;
        }
        float num = StaminaCoreFraction();

        nextEatTime = UnityEngine.Time.time + UnityEngine.Random.Range(2f, 3f) + Mathf.InverseLerp(0.5f, 1f, num) * 4f;
        if (num >= 1f)
        {
            return;
        }
        List <BaseEntity> obj = Facepunch.Pool.GetList <BaseEntity>();

        Vis.Entities(base.transform.position + base.transform.forward * 1.5f, 2f, obj, 67109377);
        obj.Sort((BaseEntity a, BaseEntity b) => (b is DroppedItem).CompareTo(a is DroppedItem));
        foreach (BaseEntity item in obj)
        {
            if (item.isClient)
            {
                continue;
            }
            DroppedItem droppedItem = item as DroppedItem;
            if ((bool)droppedItem && droppedItem.item != null && droppedItem.item.info.category == ItemCategory.Food)
            {
                ItemModConsumable component = droppedItem.item.info.GetComponent <ItemModConsumable>();
                if ((bool)component)
                {
                    ReplenishFromFood(component);
                    droppedItem.item.UseItem();
                    if (droppedItem.item.amount <= 0)
                    {
                        droppedItem.Kill();
                    }
                    break;
                }
            }
            CollectibleEntity collectibleEntity = item as CollectibleEntity;
            if ((bool)collectibleEntity && collectibleEntity.IsFood())
            {
                collectibleEntity.DoPickup(null);
                break;
            }
            GrowableEntity growableEntity = item as GrowableEntity;
            if ((bool)growableEntity && growableEntity.CanPick())
            {
                growableEntity.PickFruit(null);
                break;
            }
        }
        Facepunch.Pool.FreeList(ref obj);
    }
    public void EatNearbyFood()
    {
        if (Time.time < this.nextEatTime)
        {
            return;
        }
        float single = this.StaminaCoreFraction();

        this.nextEatTime = Time.time + UnityEngine.Random.Range(2f, 3f) + Mathf.InverseLerp(0.5f, 1f, single) * 4f;
        if (single >= 1f)
        {
            return;
        }
        List <BaseEntity> list = Pool.GetList <BaseEntity>();

        Vis.Entities <BaseEntity>(base.transform.position + (base.transform.forward * 1.5f), 2f, list, 67109377, QueryTriggerInteraction.Collide);
        list.Sort((BaseEntity a, BaseEntity b) => b is DroppedItem.CompareTo(a is DroppedItem));
        foreach (BaseEntity baseEntity in list)
        {
            if (baseEntity.isClient)
            {
                continue;
            }
            DroppedItem droppedItem = baseEntity as DroppedItem;
            if (droppedItem && droppedItem.item != null && droppedItem.item.info.category == ItemCategory.Food)
            {
                ItemModConsumable component = droppedItem.item.info.GetComponent <ItemModConsumable>();
                if (component)
                {
                    base.ClientRPC(null, "Eat");
                    this.lastEatTime = Time.time;
                    float ifType  = component.GetIfType(MetabolismAttribute.Type.Calories);
                    float ifType1 = component.GetIfType(MetabolismAttribute.Type.Hydration);
                    float single1 = component.GetIfType(MetabolismAttribute.Type.Health) + component.GetIfType(MetabolismAttribute.Type.HealthOverTime);
                    this.ReplenishStaminaCore(ifType, ifType1);
                    this.Heal(single1 * 2f);
                    droppedItem.item.UseItem(1);
                    if (droppedItem.item.amount > 0)
                    {
                        break;
                    }
                    droppedItem.Kill(BaseNetworkable.DestroyMode.None);
                    Pool.FreeList <BaseEntity>(ref list);
                    return;
                }
            }
            CollectibleEntity collectibleEntity = baseEntity as CollectibleEntity;
            if (!collectibleEntity || !collectibleEntity.IsFood())
            {
                PlantEntity plantEntity = baseEntity as PlantEntity;
                if (!plantEntity || !plantEntity.CanPick())
                {
                    continue;
                }
                plantEntity.PickFruit(null);
                Pool.FreeList <BaseEntity>(ref list);
                return;
            }
            else
            {
                collectibleEntity.DoPickup(null);
                Pool.FreeList <BaseEntity>(ref list);
                return;
            }
        }
        Pool.FreeList <BaseEntity>(ref list);
    }