TerrainChunkObject LoadChunk(ChunkPos cp, bool instant) { if (chunks.ContainsKey(cp)) { return(chunks[cp]); } TerrainChunk chunk = TerrainChunkGenerator.request(cp, instant); if (chunk == null) { return(null); } int xPos = cp.x; int zPos = cp.z; GameObject chunkGO = Instantiate(terrainChunkPrefab, new Vector3(xPos, 0, zPos), Quaternion.identity); TerrainChunkObject chunkObject = chunkGO.GetComponent <TerrainChunkObject>(); chunkObject.transform.parent = transform; chunkObject.name = "Chunk:" + cp; chunkObject.BuildMesh(chunk); WaterChunk wat = chunkObject.transform.GetComponentInChildren <WaterChunk>(); wat.SetLocs(chunk.blocks, chunkObject.Chunk); wat.BuildMesh(); chunks.Add(cp, chunkObject); return(chunkObject); }
public void GenerateBlock(Vector3 position) { TerrainChunkGenerator currentGenerator = currentChunk.GetComponent <TerrainChunkGenerator>(); Vector3 adjustedPosition = new Vector3(position.x - currentGenerator.startX, position.y, position.z - currentGenerator.startZ); currentGenerator.GenerateBlock(adjustedPosition); }
void LoadChunks(int chunkDist, bool instant = false) { Vector3 offset = AntiFloatPointOrigin.Instance.offset; //the current chunk the player is in int curChunkPosX = Mathf.FloorToInt((player.position.x + offset.x) / 16) * 16; int curChunkPosZ = Mathf.FloorToInt((player.position.z + offset.z) / 16) * 16; Camera camera = player.GetComponentInChildren <Camera>(); List <ChunkPos> highPri = new List <ChunkPos>(); List <ChunkPos> lowPri = new List <ChunkPos>(); for (int i = curChunkPosX - 16 * chunkDist; i <= curChunkPosX + 16 * chunkDist; i += 16) { for (int j = curChunkPosZ - 16 * chunkDist; j <= curChunkPosZ + 16 * chunkDist; j += 16) { ChunkPos cp = new ChunkPos(i, j); if (chunks.ContainsKey(cp)) { continue; } if (camera != null) { var point = camera.WorldToViewportPoint(new Vector3(cp.x, 32, cp.z)) + offset; if (point.z > 0 && point.x >= 0 && point.x <= 1 && point.y >= 0 && point.y <= 1) { highPri.Add(cp); } else { lowPri.Add(cp); } } else { highPri.Add(cp); } } } foreach (var cp in highPri) { if (TerrainChunkGenerator.getRequestSize() < 5 || instant) { LoadChunk(cp, instant); } } foreach (var cp in lowPri) { if (TerrainChunkGenerator.getRequestSize() < 5 || instant) { LoadChunk(cp, instant); } } }
public override void OnInspectorGUI() { TerrainChunkGenerator chunkGenerator = (TerrainChunkGenerator)target; base.OnInspectorGUI(); if (chunkGenerator.animateCubeMarching) { GUILayout.BeginHorizontal(); // If the terrain generator is not current generating terrain, show the start button. if (!chunkGenerator.generatingTerrain) { if (GUILayout.Button("Start")) { chunkGenerator.StartMarchingCubes(); } } else { if (chunkGenerator.pauseGeneration) { if (GUILayout.Button("Resume")) { chunkGenerator.ToggleMarchingCubesPaused(false); } if (GUILayout.Button("Step Forward")) { chunkGenerator.StepMarchingCubes(true); } if (GUILayout.Button("Step Backward")) { chunkGenerator.StepMarchingCubes(false); } } else { if (GUILayout.Button("Pause")) { chunkGenerator.ToggleMarchingCubesPaused(true); } } if (GUILayout.Button("Reset")) { chunkGenerator.ResetMarchingCubes(); } } GUILayout.EndHorizontal(); } }
// Use this for initialization void Start() { TerrainChunkGenerator chunkGenerator = chunkPrefab.GetComponent <TerrainChunkGenerator>(); width = chunkGenerator.width; length = chunkGenerator.length; rnd = new System.Random(); int i = rnd.Next(30, 33); int j = rnd.Next(30, 33); chest_chunck = new Vector2(); chest_chunck.x = i; chest_chunck.y = j; updateChunks(); }
/// <summary> /// Initializes a new instance of the TerrainChunkLoader class. /// </summary> public TerrainChunkLoader() { this.serializer = new TerrainChunkSerializer(); this.generator = new TerrainChunkGenerator(); }
// Start is called before the first frame update void Start() { TerrainChunkGenerator.Start(); LoadChunks(1, true); }
// Start is called before the first frame update private void OnEnable() { TerrainChunkGenerator.Start(); LoadChunks(1, true); }