예제 #1
0
    GameObject CreateTerrainTile(int x, int z)
    {
        float px = (x - tilesN / 2.0f) * tileWidth + tileWidth / 2.0f;
        float pz = (z - tilesN / 2.0f) * tileDepth + tileDepth / 2.0f;

        tiles[x, z] = Instantiate(terrainTile);
        tiles[x, z].transform.parent   = transform;
        tiles[x, z].transform.position = new Vector3(px, 0.0f, pz);
        S_TerrainTile tileScript = tiles[x, z].GetComponent <S_TerrainTile>();

        tileScript.SetPosition(x, z);
        tilesList.Add(tiles[x, z]);
        return(tiles[x, z]);
    }
예제 #2
0
    void CreateMountainRange(bool volcano = false, bool mountain = false)
    {
        int[] coords;
        if (volcano)
        {
            coords = GetRandomCoordinatesInsideRegion(Config.Volcano_Init_Region);
        }
        else
        {
            coords = GetRandomCoordinatesInsideRegion(Config.Mountain_Init_Region);
        }
        S_TerrainTile tileScript = tiles[coords[0], coords[1]].GetComponent <S_TerrainTile>();

        tileScript.SetHeight(2);
        if (volcano)
        {
            tileScript.CreateVolcano();
        }
        if (mountain)
        {
            tileScript.CreateMountain();
        }
        for (int ix = coords[0] - 2; ix <= coords[0] + 2; ix++)
        {
            for (int iz = coords[1] - 2; iz <= coords[1] + 2; iz++)
            {
                if (ix == coords[0] && iz == coords[1])
                {
                    continue;
                }
                if (CoordinateInside(ix, iz))
                {
                    if (Random.value < 0.5)
                    {
                        tileScript = tiles[ix, iz].GetComponent <S_TerrainTile>();
                        tileScript.SetHeight(1);
                    }
                }
            }
        }
    }
예제 #3
0
    void CreateRivers()
    {
        List <GameObject> mountains = tilesList.FindAll(t => t.GetComponent <S_TerrainTile>().GetHeight() == 2);

        foreach (GameObject mountain in mountains)
        {
            if (!mountain.GetComponent <S_TerrainTile>().HasTerrainObjectByTag("Volcano"))
            {
                int           riverLength = 0;
                int           tries       = 0;
                S_TerrainTile next;
                S_TerrainTile current = mountain.GetComponent <S_TerrainTile>();
                while (riverLength < 20 && tries < 1000)
                {
                    tries++;
                    current.SetAndLoadType(TERRAIN_TYPES["river"]);
                    if (current.x == 0 || current.z == 0 || current.x == tilesN - 1 || current.z == tilesN - 1)
                    {
                        break;
                    }
                    if (riverLength > 10)
                    {
                        break;
                    }
                    //next = GetRandomTileUntilDistance(current.x, current.z, 0.7f).GetComponent<S_TerrainTile>();
                    next = GetTile(current.x, current.z - 1).GetComponent <S_TerrainTile>();
                    if (next.GetTileType() == TERRAIN_TYPES["river"])
                    {
                        continue;
                    }
                    //if (next.GetHeight() > current.GetHeight())
                    //    continue;
                    current = next;
                    riverLength++;
                }
                break;
            }
        }
    }