public IEnumerator placeSavedRessource() { Vector2 viewerPos = InfiniteTerrain._viewerPos; clearRessource(); InfiniteTerrain terrainManager = FindObjectOfType <InfiniteTerrain> (); for (int i = 0; terrainManager == null && i < 10; i++) { yield return(new WaitForSeconds(1f)); terrainManager = FindObjectOfType <InfiniteTerrain> (); } Debug.Log($"list save {listSavedRessource.Count}"); foreach (var item in listSavedRessource) { InfiniteTerrain.TerrainChunk chunk = terrainManager.getChunkOfPoint(item.pos); for (int i = 0; chunk == null && i < 10; i++) { yield return(new WaitForSeconds(.1f)); chunk = terrainManager.getChunkOfPoint(item.pos); } if (savableRessourceOfChunk.ContainsKey(chunk)) { savableRessourceOfChunk[chunk].Enqueue(item); } else { savableRessourceOfChunk.Add(chunk, new Queue <SavableRessource> ()); savableRessourceOfChunk[chunk].Enqueue(item); chunk.subscribeRequestCollider(onColliderRecived); } } }
public void onColliderRecived(bool immediateCall, InfiniteTerrain.TerrainChunk chunk) { StartCoroutine(onColliderRecivedCoroutine(chunk)); if (!immediateCall) { chunk.unsubscribleRequestCollider(onColliderRecived); } }
// Update is called once per frame void Update() { RawImage image = gameObject.GetComponent<RawImage>(); InfiniteTerrain.TerrainChunk chunk = terrainGenerator.getCurrentChunk(); if (chunk == null || !chunk.mapReceived) { return; } MapData map = chunk.map; Texture2D texture = TextureGenerator.generateNoiseTexture(map.heightMap); Vector2 viewerPos = terrainGenerator.viewerPos; Vector2 chunkPos = chunk.pos; Vector2 topLeftChunkPos = new Vector2(chunkPos.x + (map.heightMap.GetLength(0) / 2), chunkPos.y - (map.heightMap.GetLength(0) / 2)); Vector2 viewerPosOnChunk = new Vector2(viewerPos.x + topLeftChunkPos.x, viewerPos.y - topLeftChunkPos.y); texture.SetPixel(Mathf.RoundToInt(viewerPosOnChunk.x), Mathf.RoundToInt(viewerPosOnChunk.y), Color.red); texture.Apply(); image.texture = texture; }
public IEnumerator onColliderRecivedCoroutine(InfiniteTerrain.TerrainChunk chunk) { while (savableRessourceOfChunk[chunk].Count > 0) { SavableRessource ressource = savableRessourceOfChunk[chunk].Dequeue(); Ray ray = new Ray(new Vector3(ressource.pos.x, 100, ressource.pos.y), Vector3.down); RaycastHit[] hitList = Physics.RaycastAll(ray, 100); Debug.DrawRay(ray.origin, ray.direction * 100, Color.blue, 10); for (int i = 0; hitList.Length == 0 && i < 10; i++) { yield return(new WaitForSeconds(.1f)); hitList = Physics.RaycastAll(ray, 100); Debug.DrawRay(ray.origin, ray.direction * 100, Color.blue, 10); } foreach (var hit in hitList) { if (hit.collider.CompareTag("Chunk")) { GameObject placed = placeRessource(hit.point, RessourceFactory.Instance.MakeRessource(ressource)); switch (ressource.type) { case RessourceData.RessourceType.PlantType: if (placed != null) { placed.GetComponent <Plant> ().CurrentGrowth = ressource.plantData.currentGrowth; } break; default: break; } break; } } } savableRessourceOfChunk.Remove(chunk); }