Пример #1
0
    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);
            }
        }
    }
Пример #2
0
 public void onColliderRecived(bool immediateCall, InfiniteTerrain.TerrainChunk chunk)
 {
     StartCoroutine(onColliderRecivedCoroutine(chunk));
     if (!immediateCall)
     {
         chunk.unsubscribleRequestCollider(onColliderRecived);
     }
 }
Пример #3
0
 // 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;
 }
Пример #4
0
    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);
    }