void SetProvNames() { foreach (var reg in regions) { reg.Text = Instantiate(Text, Names); Vector3 pos = MapMetrics.GetCellPosition(reg.Capital, true); reg.Text.transform.position = pos; reg.Text.layer = 8; } }
void CreateTerrain() { TerrainMaskArray = new Texture2DArray(w, h, 4, TerrainMask[0].format, TerrainMask[0].mipmapCount > 0); TerrainNormalMaskArray = new Texture2DArray(w, h, 4, TerrainNormalMask[0].format, TerrainNormalMask[0].mipmapCount > 0); for (int i = 0; i < 4; i++) { for (int j = 0; j < TerrainMask[i].mipmapCount; j++) { Graphics.CopyTexture(TerrainMask[i], 0, j, TerrainMaskArray, i, j); Graphics.CopyTexture(TerrainNormalMask[i], 0, j, TerrainNormalMaskArray, i, j); } } TerrainMaskArray.Apply(); TerrainNormalMaskArray.Apply(); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { int t = terrainIndexes[i * w + j] & 31; if (t == (int)TerrainType.ForestLeaf || t == (int)TerrainType.ForestSpire) { GameObject tree = Instantiate(terrainItem[t - (int)TerrainType.ForestLeaf], Trees); tree.transform.position = MapMetrics.GetCellPosition(i, j); } } } foreach (var list in River) { GameObject r = MapMesh.AddRiver(list); r.transform.SetParent(WorldBorders.transform); r.GetComponent <MeshRenderer>().sharedMaterial = riverMat; } terrainMat.SetTexture("_TerrainNormTex", TerrainNormalMaskArray); terrainMat.SetTexture("_TerrainTex", TerrainMaskArray); }
public void SetName() { Vector2Int left, center, right; List <Vector2Int> ter = new List <Vector2Int>(); for (int i = 0; i < regions.Count; i++) { ter.Add(regions[i].Capital); } MapMetrics.CalculLCR(ter, out left, out center, out right); Vector3 l = MapMetrics.GetCellPosition(left, true); Vector3 c = MapMetrics.GetCellPosition(center, true); Vector3 r = MapMetrics.GetCellPosition(right, true); l -= c; r -= c; l = new Vector3(l.x, l.z, l.y); r = new Vector3(r.x, r.z, r.y); left -= center; right -= center; float maxd = left.magnitude + right.magnitude; float maxS = maxd * 2.4f / name.Length; int S = Mathf.RoundToInt(regions.Count * 0.6f); if (maxS < 1 || S < 1) { Text.SetActive(false); return; } int fontSize = (int)Mathf.Clamp((4 + Mathf.Clamp(S, 0, 10)), 3, maxS); Text.transform.position = c; Text.transform.SetParent(Main.instance.Names); Text.GetComponent <CurvedText>().SetProperies(name, l, r, fontSize); }
public static GameObject AddRiver(List <Vector2Int> point) { List <int> triangles = ListPool <int> .Get(); List <Vector3> vertices = ListPool <Vector3> .Get(); List <Vector2> uvs = ListPool <Vector2> .Get(); List <Vector3> bord = ListPool <Vector3> .Get(); Vector2Int d1, d2; d1 = point[1] - point[0]; bord.Add(MapMetrics.GetCellPosition(point[0])); bord.Add(0.5f * (bord[0] + MapMetrics.GetCellPosition(point[1]))); for (int i = 1; i < point.Count - 1; i++) { d2 = point[i + 1] - point[i]; bord.Add(MapMetrics.GetCellPosition(point[i])); if (d1.x * d2.x + d1.y * d2.y == 0) { d1 = d2 - d1; bord[bord.Count - 1] += 0.25f * new Vector3(d1.x, 0, d1.y); } bord.Add(0.5f * (MapMetrics.GetCellPosition(point[i]) + MapMetrics.GetCellPosition(point[i + 1]))); d1 = d2; } for (int i = 0; i < bord.Count; i++) { bord[i] += Vector3.up * 0.1f; } Vector3 dir1, dir2, norm = Vector3.zero; float width = 0.1f; vertices.Add(bord[0] + norm * width); vertices.Add(bord[0] - norm * width); uvs.Add(new Vector2(0, 0)); uvs.Add(new Vector2(0, 1)); for (int i = 1; i < bord.Count; i++) { if (i < bord.Count - 1) { dir1 = bord[i] - bord[i - 1]; dir2 = bord[i + 1] - bord[i]; norm = (Vector3.Cross(dir1, Vector3.up) + Vector3.Cross(dir2, Vector3.up)).normalized; } vertices.Add(bord[i] + norm * width); vertices.Add(bord[i] - norm * width); uvs.Add(new Vector2(i, 0)); uvs.Add(new Vector2(i, 1)); triangles.Add(i * 2); triangles.Add(i * 2 - 1); triangles.Add(i * 2 - 2); triangles.Add(i * 2 + 1); triangles.Add(i * 2 - 1); triangles.Add(i * 2); } Mesh mesh; GameObject river = new GameObject(); river.AddComponent <MeshRenderer>(); river.AddComponent <MeshFilter>().mesh = mesh = new Mesh(); mesh.SetVertices(vertices); mesh.SetUVs(0, uvs); mesh.SetTriangles(triangles, 0); mesh.RecalculateNormals(); mesh.RecalculateBounds(); ListPool <Vector3> .Add(vertices); ListPool <int> .Add(triangles); ListPool <Vector2> .Add(uvs); ListPool <Vector2Int> .Add(point); ListPool <Vector3> .Add(bord); return(river); }