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); } }
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); } } }
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, ""); }
// 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"); }