コード例 #1
0
    //IEnumerator SpawnTerrainType(int terrainCount, GameObject[] terrainShapes, Transform[] spawnBoxes){
    void SpawnTerrainType(int terrainCount, GameObject[] terrainShapes, ISpawnGenerator spawnGenerator)
    {
        // generate spawn points
        var spawnPoints = spawnGenerator.Generate(terrainCount);

        for (int i = 0; i < terrainCount; i++)
        {
            GameObject tempGO        = GameObject.Instantiate(terrainShapes [Random.Range(0, terrainShapes.Length)]);
            var        spawnLocation = spawnPoints[i];
            // pick seed for each deformation
            var seed = Random.Range(1, 1 << 24);
            tdManager.ApplyDeform(tempGO.GetComponent <TerrainDeformer>(), spawnLocation, seed);
        }
    }
コード例 #2
0
    public void ServerSpawnN(int n)
    {
        // only spawn up to max loot boxes
        n = Mathf.Min(maxLootBoxes - activeLootBoxes, n);
        if (n <= 0)
        {
            return;
        }

        // generate spawn locations
        var locations = locationGenerator.Generate(n);

        // iterate through spawn locations
        foreach (var location in locations)
        {
            // check exclusions
            var excluded = false;
            foreach (var exclusion in exclusions)
            {
                if (exclusion.ExcludeSpawn(location))
                {
                    excluded = true;
                    break;
                }
            }
            if (excluded)
            {
                // too close
                // Debug.Log("spawn excluded, too close to player");
                continue;
            }

            // get final ground position
            var finalPosition = GroundPosition(location) + new Vector3(0, 1, 0);

            // spawn lootbox
            var        lootboxPrefab = PrefabRegistry.singleton.GetPrefab <SpawnKind>(SpawnKind.lootbox);
            GameObject lootboxGo     = Instantiate(lootboxPrefab, finalPosition, Quaternion.identity) as GameObject;
            NetworkServer.Spawn(lootboxGo);

            // actually assign loot
            ProjectileKind ammoKind;
            while (true)
            {
                ammoKind = FindAmmoKind();
                if (!excludedProjectiles.Contains(ammoKind))
                {
                    break;
                }
            }
            var ammoAmount = UnityEngine.Random.Range(minAmmoCount, maxAmmoCount + 1);
            switch (ammoKind)
            {
            case ProjectileKind.beetMissile:
            case ProjectileKind.pillarShot:
                ammoAmount = 1;
                break;

            case ProjectileKind.mushboom:
                mushboomCount++;
                ammoAmount = 1;
                break;
            }
            lootboxGo.GetComponent <LootBoxController>().AssignLoot(ammoKind, ammoAmount);
            var health = lootboxGo.GetComponent <Health>();
            if (health != null)
            {
                health.onDeathEvent.AddListener(OnLootBoxDestroy);
            }

            // increment # of active loot boxes that are tracked
            activeLootBoxes++;
        }
        if (minMushbooms < maxMushbooms)
        {
            minMushbooms += 2;
        }
    }