Beispiel #1
0
        public void AddOutlines(float radius, Grid.HexOrientation orientation)
        {
            LineRenderer lines = GetComponent <LineRenderer>();

            lines.lightProbeUsage   = UnityEngine.Rendering.LightProbeUsage.Off;
            lines.receiveShadows    = false;
            lines.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;

            lines.startWidth = 0.1f;
            lines.endWidth   = 0.1f;
            lines.startColor = Color.cyan;
            lines.endColor   = Color.blue;

            //lines.material = lineMaterial;
            lines.useWorldSpace = false;

            lines.material      = new Material(Shader.Find("Particles/Additive"));
            lines.positionCount = 7;

            for (int vert = 0; vert <= 6; vert++)
            {
                Vector3 pos      = Tile.Corner(Vector3.zero, radius, vert, orientation);
                Vector3 worldPos = transform.TransformPoint(pos);
                float   y        = grid.SampleHeight(worldPos);
                Vector3 localPos = transform.InverseTransformPoint(new Vector3(worldPos.x, y, worldPos.z));
                lines.SetPosition(vert, localPos);
            }
        }
Beispiel #2
0
        public void AddHexMesh(float radius, Grid.HexOrientation orientation)
        {
            Mesh mesh = new Mesh();

            List <Vector3> verts = new List <Vector3>();
            List <int>     tris  = new List <int>();
            List <Vector2> uvs   = new List <Vector2>();

            for (int i = 0; i < 6; i++)
            {
                Vector3 pos      = Corner(Vector3.zero, radius, i, orientation);
                Vector3 worldPos = transform.TransformPoint(pos);
                float   y        = grid.SampleHeight(worldPos);
                Vector3 localPos = transform.InverseTransformPoint(new Vector3(worldPos.x, y, worldPos.z));
                verts.Add(localPos);
            }

            tris.Add(0);
            tris.Add(2);
            tris.Add(1);

            tris.Add(0);
            tris.Add(5);
            tris.Add(2);

            tris.Add(2);
            tris.Add(5);
            tris.Add(3);

            tris.Add(3);
            tris.Add(5);
            tris.Add(4);

            //UVs are wrong, I need to find an equation for calucalting them
            uvs.Add(new Vector2(0.5f, 1f));
            uvs.Add(new Vector2(1, 0.75f));
            uvs.Add(new Vector2(1, 0.25f));
            uvs.Add(new Vector2(0.5f, 0));
            uvs.Add(new Vector2(0, 0.25f));
            uvs.Add(new Vector2(0, 0.75f));

            mesh.vertices  = verts.ToArray();
            mesh.triangles = tris.ToArray();
            mesh.uv        = uvs.ToArray();

            mesh.name = "Hexagonal Plane";

            mesh.RecalculateNormals();

            if (GetComponent <MeshFilter>() == null)
            {
                gameObject.AddComponent <MeshFilter>();
            }
            GetComponent <MeshFilter>().mesh = mesh;
        }
Beispiel #3
0
        public static Vector3 Corner(Vector3 origin, float radius, int corner, Grid.HexOrientation orientation)
        {
            float angle = 60 * corner;

            if (orientation == Grid.HexOrientation.Pointy)
            {
                angle += 30;
            }
            angle *= Mathf.PI / 180;
            return(new Vector3(origin.x + radius * Mathf.Cos(angle), origin.y, origin.z + radius * Mathf.Sin(angle)));
        }