Beispiel #1
0
        protected virtual void CreateTile(GameMapDataLevel std, int x, int y, int layer, int[][] layerData, int height,
                                          DataTerrain invisible)
        {
            int oTerrain = std.At(new Vector3Int(x, y, layer));

            if (oTerrain == -1)
            {
                layerData[height - y - 1][x] = -1;
                return;
            }

            DataTerrain org = L.b.terrains[oTerrain];

            //has element?
            try
            {
                if (mapGeneration.terrains.ContainsKey(org.id))
                {
                    layerData[height - y - 1][x] = L.b.terrains[mapGeneration.terrains[org.id]].defaultTile;
                }
                else if (layer == 0)
                {
                    layerData[height - y - 1][x] = invisible.defaultTile;
                }
                else
                {
                    layerData[height - y - 1][x] = -1;
                }
            }
            catch (Exception e)
            {
                Debug.Log($"{y}/{height - y - 1}/{height},{x}/{GameMgmt.Get().data.map.width}");
                throw e;
            }
        }
Beispiel #2
0
        protected override void CreateTile(GameMapDataLevel std, int x, int y, int layer, int[][] layerData, int height,
                                           DataTerrain invisible)
        {
            int oTerrain = std.At(new Vector3Int(x, y, layer));

            if (oTerrain == -1 && Random.Range(0, 10) <= 7) // 70%
            {
                layerData[height - y - 1][x] = L.b.terrains["deepWall"].defaultTile;
                return;
            }

            base.CreateTile(std, x, y, layer, layerData, height, invisible);
        }
Beispiel #3
0
        public IEnumerator AddLayer(int layer)
        {
            TileMapConfig16 t   = CreateNewLayer($"{layer} {layers.Count}", layer);
            TileMapConfig16 w   = CreateNewLayer($"W{layer} {layers.Count}", layer).GetComponent <TileMapConfig16>();
            string          max = "/" + mapData.width + "/" + layers.Count;

            for (int x = 0; x < mapData.width; x++)
            {
                for (int y = 0; y < mapData.height; y++)
                {
                    Vector3Int v = new Vector3Int(x, y, layer);
                    int        d = dataLevel.At(v);
                    //skip?
                    if (d == -1)
                    {
                        continue;
                    }

                    try
                    {
                        t.SetTile(dataLevel, v, L.b.terrains[d], false, Color.white);
                        int q = dataLevel.At(v, true);
                        w.SetTile(dataLevel, v, L.b.terrains[q], true, Color.white);
                    }
                    catch (Exception e)
                    {
                        Debug.Log(d + " " + L.b.terrains.Values().Count(terr => terr.defaultTile == d));
                        Debug.Log($"{x}/{dataLevel.Width()}/{mapData.width},{y}/{dataLevel.Height()}/{mapData.height}");
                        Debug.LogException(new InvalidDataException($"Field type {d} does not exist", e));
                        break;
                    }
                }
                yield return(GameMgmt.Get().load.ShowSubMessage($"Loading {layer} {x}{max}"));
            }

            layers.Add(t);
            layersWinter.Add(w);
            w.gameObject.SetActive(false);
        }