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; } }
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); }
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); }