Exemplo n.º 1
0
    public void FirstGeneration(AnimalSettings _animalSettings)
    {
        animalSettings = _animalSettings;
        GenerateAnimal(animalSettings);

        AddLODs();
    }
Exemplo n.º 2
0
    public static void Spawn(MapGraph mapGraph, Transform container, AnimalSettings settings, int seed)
    {
        AnimalSpawner.mapGraph = mapGraph;
        AnimalSpawner.prng     = new System.Random(seed);

        var spawner = new PrefabSpawner(container);

        settings.speciesSettings.ForEach(s => SpawnSpecies(spawner, s));
    }
Exemplo n.º 3
0
    private void SpawnAnimals(AnimalType animal, int spawnCount)
    {
        AnimalSettings animalSettings = animalsSettings.Find(animSett => animSett.AnimalType == animal);

        if (animalSettings.SpawnType == SpawnType.Group && spawnCount >= animalSettings.MinCountInGroup)
        {
            List <int> groupCounts = new List <int>();

            int i = spawnCount;
            while (i >= animalSettings.MinCountInGroup)
            {
                int newCount;
                if (i < 2 * animalSettings.MinCountInGroup)
                {
                    newCount = i;
                }
                else
                {
                    int maxCountPossible = Math.Min(i, animalSettings.MaxCountInGroup);

                    if (animalSettings.MaxCountInGroup + animalSettings.MinCountInGroup > i)
                    {
                        newCount = animalSettings.MinCountInGroup;
                    }
                    else
                    {
                        newCount = rand.Next(maxCountPossible - animalSettings.MinCountInGroup) + animalSettings.MinCountInGroup;
                    }
                }

                groupCounts.Add(newCount);
                i -= newCount;
            }

            List <Vector2> positionsOfNewGroups = GetRandomFreePoints(groupCounts.Count);

            for (int j = 0; j < groupCounts.Count; j++)
            {
                GameObject spawnedGroup = animalSettings.GroupPrefabs.Find(grPr => grPr.AnimalCount == groupCounts[j]).Prefab;
                foreach (Animal animalPrefab in spawnedGroup.GetComponentsInChildren <Animal>())
                {
                    InstantiateAnimal(positionsOfNewGroups[j] + (Vector2)animalPrefab.transform.position, animalPrefab, animalSettings.AnimalType);
                }
            }

            return;
        }

        List <Vector2> positionsOfNewAnimals = GetRandomFreePoints(spawnCount);

        foreach (Vector2 position in positionsOfNewAnimals)
        {
            InstantiateAnimal(position, animalSettings.Prefab, animalSettings.AnimalType);
        }
    }
Exemplo n.º 4
0
    void Start()
    {
        Debug.Log("New species arrived!");

        animalType = (AnimalSettings.AnimalType)Mathf.RoundToInt(Random.Range(0f, 1f));
        AnimalSettings animalSettings = new AnimalSettings(animalType, Random.Range(1, 4), new Vector3(1, 1, Random.Range(1.5f, 3.5f)));

        for (int i = 0; i < 5; i++)
        {
            CreateNewAnimal(animalSettings);
        }
    }
Exemplo n.º 5
0
    protected void GenerateAnimal(AnimalSettings _animalSettings)
    {
        animalSettings = _animalSettings;

        switch (animalSettings.animalType)
        {
        case AnimalSettings.AnimalType.Land:
            GenerateLandAnimal();
            break;

        case AnimalSettings.AnimalType.Air:
            GenerateSkyAnimal();
            break;

        default:
            break;
        }
    }
Exemplo n.º 6
0
    void CreateNewAnimal(AnimalSettings animalSettings)
    {
        Animal animalPrefabToSpawn = null;

        switch (animalSettings.animalType)
        {
        case AnimalSettings.AnimalType.Land:
            animalPrefabToSpawn = AnimalsManager.instance.landAnimalPrefab;
            break;

        case AnimalSettings.AnimalType.Air:
            animalPrefabToSpawn = AnimalsManager.instance.airAnimalPrefab;
            break;

        default:
            break;
        }

        GameObject   newAnimal   = Instantiate(animalPrefabToSpawn.gameObject);
        NavMeshAgent animalAgent = newAnimal.GetComponent <NavMeshAgent>();

        if (animalAgent)
        {
            animalAgent.Warp(transform.position + new Vector3(0, 1, 0));
        }
        else
        {
            newAnimal.transform.position = transform.position;
        }
        newAnimal.transform.SetParent(TerrainGenerator.instance.transform.parent);
        newAnimal.transform.localScale *= WorldGenerator.GetScaleMultiplier();
        Animal animal = newAnimal.GetComponent <Animal>();

        animal.FirstGeneration(animalSettings);
        animal.SetNest(this);
        animals.Add(animal);
    }