Пример #1
0
 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;
     }
 }
Пример #2
0
    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);
    }
Пример #3
0
    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);
    }
Пример #4
0
    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);
    }