public override void OnInspectorGUI() { DrawDefaultInspector(); MeatFoodSource mfs = (MeatFoodSource)target; if (GUILayout.Button("Creature To Meat")) { try { mfs.CreatureToMeat(); } catch (System.Exception e) { Debug.LogError(e); } } }
IEnumerator EatMeat(MeatFoodSource meat) { if (dietType == DietType.Carnivore) { CreatureDebug("starting meat"); } if (meat == null) { yield break; } chaseCoroutine = StartCoroutine(GoToObject(meat.gameObject)); chaseTimer.Reset(); chaseTimer.Start(); while (!Physics.OverlapSphere(transform.position, 1.5f).Contains(meat.GetComponent <Collider>())) { if (chaseTimer.ElapsedMilliseconds > 15000f) { chaseTimer.Stop(); chaseTimer.Reset(); yield break; } yield return(new WaitForSeconds(0.1f)); } if (meat.GetComponent <Creature>() != null) { Creature meatCreature = meat.GetComponent <Creature>(); if (dietType == DietType.Carnivore) { CreatureDebug("attacking " + meatCreature.ID + " (" + meatCreature.Health + ")"); } while (meatCreature.Health > Mathf.Lerp(0.2f, 2f, ability[Genotype.Strength]) * Mathf.Lerp(1.5f, 0.5f, meatCreature.ability[Genotype.Resistance])) { meatCreature.Health -= Mathf.Lerp(0.2f, 2f, ability[Genotype.Strength]) * Mathf.Lerp(1.5f, 0.5f, meatCreature.ability[Genotype.Resistance]); yield return(new WaitForSeconds(Mathf.Lerp(1.2f, 0.1f, ability[Genotype.Speed]))); } meat.GetComponent <Creature>().Die(DeathCause.Injury); if (dietType == DietType.Carnivore) { CreatureDebug("killed. meat time."); } } while (Nutrition < maxNutrition && meat.remainingNutrition != 0) { if (meat.remainingNutrition < 0.05f) { Nutrition += meat.remainingNutrition; meat.remainingNutrition = 0; } else { Nutrition += 0.05f; meat.remainingNutrition -= 0.05f; yield return(null); } } if (meat != null && meat.remainingNutrition != 0) { PreviousFood.Add(meat, Time.time); } activity = CreatureActivity.Idle; yield break; }