Beispiel #1
0
    public Island(int x, int z, int islandID, Material mat)
    {
        ID            = islandID;
        xCord         = x;
        zCord         = z;
        IslandsNextTo = 0;
        material      = mat;
        fileName      = "/island" + ID;

        //Always starts with no island next to it
        northIsland = -1;
        eastIsland  = -1;
        southIsland = -1;
        westIsland  = -1;

        //algorithm for placing the tiles

        xOffSet = Random.Range(-100, 100);
        zOffSet = Random.Range(-100, 100);

        if (!File.Exists(Application.persistentDataPath + "/island" + ID))
        {
            float[,] dataArray = PerlinNoise.GetPerlinNoise(Const.size, Const.size, ID, Const.islandGradient);
            IslandSaveManager.SaveIsland(dataArray, fileName);
        }
    }
Beispiel #2
0
    private void Update()
    {
        //Debug only
        if (Input.GetKeyDown(KeyCode.Q) && Application.platform == RuntimePlatform.WindowsEditor)
        {
            Debug.Log("Deleting island saves");
            foreach (Island ile in iles)
            {
                IslandSaveManager.DeleteMapSave(ile.fileName);
            }
        }

        //Only check if there needs to be an update to rendering if the camera has moved
        if (_prevCamPos != _camera.transform.position)
        {
            //Save new camera position
            _prevCamPos = _camera.transform.position;

            List <int> newRenders = new List <int>();
            List <int> deRenders  = new List <int>();

            //Check every rendered island if they are outside render distance
            foreach (int id in renderedIslands)
            {
                if (!(iles[id].xCord * Const.islandDistance > _camera.transform.position.x - distance) || !(iles[id].xCord * Const.islandDistance < _camera.transform.position.x + distance) ||
                    !(iles[id].zCord * Const.islandDistance > _camera.transform.position.z - distance) || !(iles[id].zCord * Const.islandDistance < _camera.transform.position.z + distance))
                {
                    //Add the islands to a list for those that are being rendered
                    iles[id].EndRender();
                    deRenders.Add(id);
                }
            }

            //Check every unrendered island if they are insinde render distance
            foreach (int id in unrenderedIslands)
            {
                if (iles[id].xCord * Const.islandDistance > _camera.transform.position.x - distance && iles[id].xCord * Const.islandDistance <_camera.transform.position.x + distance &&
                                                                                                                                              iles[id].zCord *Const.islandDistance> _camera.transform.position.z - distance && iles[id].zCord * Const.islandDistance < _camera.transform.position.z + distance)
                {
                    //Add the islands to a list for those that are being derendered
                    iles[id].StartRender();
                    newRenders.Add(id);
                }
            }

            foreach (int id in newRenders)
            {
                unrenderedIslands.Remove(id);
                renderedIslands.Add(id);
            }

            foreach (int id in deRenders)
            {
                renderedIslands.Remove(id);
                unrenderedIslands.Add(id);
            }
        }
    }
Beispiel #3
0
    public void StartRender()
    {
        TerrainData _terrainData = new TerrainData();

        float[,] dataArray = IslandSaveManager.LoadIsland(fileName, ID);
        _terrainData.size  = new Vector3(Const.size, Const.islandHeight, Const.size);
        _terrainData.heightmapResolution = Const.size - 1;            //Set how tall the resolution for the height of the terrain is
        _terrainData.SetHeights(0, 0, dataArray);                     //Set the heights for the terrain
        terrain = Terrain.CreateTerrainGameObject(_terrainData);
        terrain.GetComponent <Terrain>().materialTemplate = material; //Set the material on the terrain
        terrain.transform.position = new Vector3(xCord * Const.islandDistance + xOffSet, -0.3f, zCord * Const.islandDistance + xOffSet);
        terrain.AddComponent <IslandOwner>().setStats(ID, "");
    }
Beispiel #4
0
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("Loading Island");
        ID             = PlayerPrefs.GetInt("ISLANDID");
        islandFileName = "/island" + ID;

        Debug.Log(Application.persistentDataPath);

        float[,] map = IslandSaveManager.LoadIsland(islandFileName, ID);
        data         = new TerrainData {
            size = new Vector3(Const.size, Const.islandHeight, Const.size),
            heightmapResolution = Const.size - 1
        };
        data.SetHeights(0, 0, map);

        island = Terrain.CreateTerrainGameObject(data);
        island.transform.position = new Vector3((-Const.size * 8) / 2, 0, (-Const.size * 8) / 2);
        island.GetComponent <Terrain>().materialTemplate = _islandMaterial;

        generated.Invoke();
        Debug.Log("Loading Island Done");
    }