예제 #1
0
    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);
            }
        }
    }
예제 #2
0
 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;
 }