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); }