Advertisement
leomovskii

Cat

Oct 26th, 2024 (edited)
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.68 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. public class Cat : MonoBehaviour {
  4.  
  5.     // Рівень насичення їжею
  6.     [Range(0f, 100f)] public float Feed = 50;
  7.  
  8.     // Трата їжі за 1 секунду
  9.     public float FeedLostInSecond = 0.1f;
  10.  
  11.     // Мінімальний рівень ієі, коли кішка стає голодною
  12.     public float HungerLevel = 40;
  13.  
  14.     // Швидкість руху кішки
  15.     public float moveSpeed = 5f;
  16.  
  17.     // миска, до якої кішка йде
  18.     FoodBowl currentBowl;
  19.  
  20.     // Таймер активності кішки
  21.     float timer;
  22.  
  23.     private void Update() {
  24.         // Тут ми рахуємо таймер голоду
  25.         if (timer >= 0) {
  26.             timer -= Time.deltaTime;
  27.             if (timer < 0) {
  28.                 timer = 1f;
  29.  
  30.                 // Вираховуємо скільки їжі повинно залишитись
  31.                 // Але не менше 0 та не більше 100
  32.                 Feed = Mathf.Clamp(Feed - FeedLostInSecond, 0, 100);
  33.             }
  34.         }
  35.  
  36.         // Якщо кішка хоче їсти
  37.         if (Feed <= HungerLevel) {
  38.             // Якщо вона ще не знайшла собі миску з їжею
  39.             // Або обрана миска вже пуста
  40.             if (currentBowl == null || currentBowl.AmountOfFood == 0) {
  41.                 currentBowl = null;
  42.                 // Вона перевіряє всі миски на мапі
  43.                 FoodBowl[] bowls = FindObjectsOfType<FoodBowl>();
  44.                 for (int i = 0; i < bowls.Length; i++) {
  45.                     // У кожної дивиться чи є там їжа
  46.                     if (bowls[i].AmountOfFood > 0) {
  47.                         // Як знаходить, обирає цю миску
  48.                         currentBowl = bowls[i];
  49.                         break;
  50.                     }
  51.                 }
  52.             }
  53.  
  54.             // Якщо у неї є миска з їжею
  55.             if (currentBowl != null) {
  56.                 // Якщо вона ще не дійшла до миски
  57.                 if (Vector3.Distance(transform.position, currentBowl.Waypoint.position) > 0.2f) {
  58.                     // Йде до миски
  59.                     transform.position = Vector3.MoveTowards(transform.position,
  60.                         currentBowl.Waypoint.position, moveSpeed * Time.deltaTime);
  61.  
  62.                 } else { // Дійшла до миски
  63.                     // Вона дивиться скільки хоче з'їсти
  64.                     int wantToEatCount = 100 - (int) Feed;
  65.                     // Та скільки миска може дати
  66.                     int canGiveFoodCount = currentBowl.AmountOfFood;
  67.                     // Рахує скільки зможе з'їсти
  68.                     int countToEat = Mathf.Min(wantToEatCount, canGiveFoodCount);
  69.                     // Їсть
  70.                     Feed += countToEat;
  71.                     // З миски їжа теж зникає
  72.                     currentBowl.TakeFood(countToEat);
  73.                     // Кішка губить інтерес до цієї миски
  74.                     currentBowl = null;
  75.                 }
  76.             }
  77.         }
  78.     }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement