Пример #1
0
    public void DumpDetailPrototypes()
    {
        foliage = new FoliageType[t.terrainData.detailPrototypes.Length];

        for (int i = 0; i < foliage.Length; i++)
        {
            foliage [i] = new FoliageType();
            if (!t.terrainData.detailPrototypes [i].usePrototypeMesh)
            {
                foliage [i].foliageMesh  = defaultFoliageMesh;
                foliage [i].baseMaterial = defaultMaterial;
                foliage [i].textures     = new FoliageTexture[1];
                foliage [i].textures [0] = new FoliageTexture("_MainTex", t.terrainData.detailPrototypes [i].prototypeTexture);
            }

            foliage [i].minSize = new Vector3(t.terrainData.detailPrototypes [i].minWidth, t.terrainData.detailPrototypes [i].minHeight, t.terrainData.detailPrototypes [i].minWidth);
            foliage [i].maxSize = new Vector3(t.terrainData.detailPrototypes [i].maxWidth, t.terrainData.detailPrototypes [i].maxHeight, t.terrainData.detailPrototypes [i].maxWidth);
        }
    }
Пример #2
0
        private bool GeneratePositions(QuadTree quadTree)
        {
            var maximum = 32767;

            FoliageArray = new FoliageType[FoliageCount];

            var random = new Random((int)DateTime.Now.Ticks);

            for (int i = 0; i < FoliageCount; ++i)
            {
                var testX = (float)random.Next(maximum) / maximum * 256.0f;
                var testZ = (float)random.Next(maximum) / maximum * 256.0f;
                FoliageArray[i].x = testX;
                quadTree.GetHeightAtPosition(testX, testZ, out FoliageArray[i].y);
                FoliageArray[i].z = testZ;

                var red   = (float)random.Next(maximum) / maximum;
                var green = (float)random.Next(maximum) / maximum;
                FoliageArray[i].r = red + 1.0f;
                FoliageArray[i].g = green + 0.5f;
            }

            return(true);
        }
    public void Initialize()
    {
        anim = GetComponent <Animator>();
        RaycastHit outHit = new RaycastHit();

        //UP LEFT
        if (Physics.Raycast(transform.position, Vector3.forward + Vector3.left, out outHit, 5.0f))
        {
            if (outHit.collider.GetComponent <GameTile> () != null)
            {
                tiles[(int)Direction.UpLeft] = outHit.collider.GetComponent <GameTile> ();
            }
        }

        //UP
        if (Physics.Raycast(transform.position, Vector3.forward, out outHit, 5.0f))
        {
            if (outHit.collider.GetComponent <GameTile> () != null)
            {
                tiles[(int)Direction.Up] = outHit.collider.GetComponent <GameTile> ();
            }
        }

        //UP Right
        if (Physics.Raycast(transform.position, Vector3.forward + Vector3.right, out outHit, 5.0f))
        {
            if (outHit.collider.GetComponent <GameTile> () != null)
            {
                tiles[(int)Direction.UpRight] = outHit.collider.GetComponent <GameTile> ();
            }
        }

        //RIGHT
        if (Physics.Raycast(transform.position, Vector3.right, out outHit, 5.0f))
        {
            if (outHit.collider.GetComponent <GameTile> () != null)
            {
                tiles[(int)Direction.Right] = outHit.collider.GetComponent <GameTile> ();
            }
        }

        //DOWN RIGHT
        if (Physics.Raycast(transform.position, Vector3.back + Vector3.right, out outHit, 5.0f))
        {
            if (outHit.collider.GetComponent <GameTile> () != null)
            {
                tiles[(int)Direction.DownRight] = outHit.collider.GetComponent <GameTile> ();
            }
        }

        //DOWN
        if (Physics.Raycast(transform.position, Vector3.back, out outHit, 5.0f))
        {
            if (outHit.collider.GetComponent <GameTile> () != null)
            {
                tiles[(int)Direction.Down] = outHit.collider.GetComponent <GameTile> ();
            }
        }

        //DOWN LEFT
        if (Physics.Raycast(transform.position, Vector3.back + Vector3.left, out outHit, 5.0f))
        {
            if (outHit.collider.GetComponent <GameTile> () != null)
            {
                tiles[(int)Direction.DownLeft] = outHit.collider.GetComponent <GameTile> ();
            }
        }

        //LEFT
        if (Physics.Raycast(transform.position, Vector3.left, out outHit, 5.0f))
        {
            if (outHit.collider.GetComponent <GameTile> () != null)
            {
                tiles[(int)Direction.Left] = outHit.collider.GetComponent <GameTile> ();
            }
        }

        if (tiles[(int)Direction.Left] == null || tiles[(int)Direction.Right] == null || tiles[(int)Direction.Up] == null || tiles[(int)Direction.Down] == null)
        {
            foliageType = FoliageType.Sand;
        }
        else
        {
            int random = Random.Range(0, 3);
            if (random == 0)
            {
                foliageType = FoliageType.Grass;
            }
            else if (random == 1)
            {
                foliageType = FoliageType.Rock;
            }
            else
            {
                foliageType = FoliageType.Sand;
            }
        }

        GameObject spawnTile = GameTileManager.instance.GetRandomTilePrefabFromType(foliageType);

        spawnTile = Instantiate(spawnTile, transform);
        spawnTile.transform.rotation = Quaternion.Euler(new Vector3(0, (float)GameTileManager.instance.RandomRotationAngle(), 0));

        if (GameTileManager.instance.baseTilePrefabs [(int)foliageType].foliagePrefabs.Count > 0)
        {
            Instantiate(GameTileManager.instance.baseTilePrefabs [(int)foliageType].foliagePrefabs [Random.Range(0, GameTileManager.instance.baseTilePrefabs [(int)foliageType].foliagePrefabs.Count)], transform);
        }
        endRot   = new Vector3(rotationStops[1], transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z);
        startRot = new Vector3(rotationStops[0], transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z);
    }
Пример #4
0
 public void SyncOptions()
 {
     _type = Foliage.GetFoliageType(SelectedFoliageTypeIndex);
 }