private void DeleteAllAnimalKind(AnimalType animalType)
    {
        foreach (Animal animal in animalLists[animalType])
        {
            Destroy(animal.gameObject);
        }

        animalLists[animalType].Clear();
        OnAnimalCountChanged?.Invoke(this, new AnimalCountChangedEventArgs(animalType));
    }
    private void InstantiateAnimal(Vector2 position, Animal prefab, AnimalType animalType)
    {
        Animal spawnedAnimal = Instantiate(prefab);

        spawnedAnimal.transform.position = position;
        spawnedAnimal.transform.SetParent(animalsSpawnPivot, false);
        animalLists[animalType].Add(spawnedAnimal);
        spawnedAnimal.OnAnimalRemoved += (s, ea) =>
        {
            animalLists[animalType].Remove(ea.Animal);
            NeededCount[animalType]--;
            OnAnimalCountChanged?.Invoke(this, new AnimalCountChangedEventArgs(animalType));
        };
    }
    private void AdjustAnimalCount(AnimalType animal, int newAnimalCount)
    {
        if (newAnimalCount == animalLists[animal].Count)
        {
            return;
        }

        if (newAnimalCount < animalLists[animal].Count)
        {
            DeleteRandomAnimals(animalLists[animal], animalLists[animal].Count - newAnimalCount);
        }
        else
        {
            SpawnAnimals(animal, newAnimalCount - animalLists[animal].Count);
        }

        OnAnimalCountChanged?.Invoke(this, new AnimalCountChangedEventArgs(animal));
    }