Пример #1
0
        public MatchingTile[,] Generate(int width, int height, MatchingTile[] prefabs, GameObject border, GameObject angle, BorderBall borderBall, Transform owner, ref Texture2D image)
        {
            var grid = new MatchingTile[width, height];

            var startingPosition = owner.transform.position;

            startingPosition.x = startingPosition.x - ((float)width / 2);
            startingPosition.y = startingPosition.y - ((float)height / 2);

            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    var prefab = prefabs[UnityEngine.Random.Range(0, prefabs.Length)];
                    var tile   = GameObject.Instantiate <MatchingTile>(prefab);
                    tile.name               = "MatchingTile [" + i + "," + j + "]";
                    tile.transform.parent   = owner;
                    tile.transform.position = new Vector3(startingPosition.x + i, startingPosition.y + j, startingPosition.z);
                    tile.GridPosition       = new Vector2(i, j);
                    tile.Owner              = owner.GetComponent <MatchingGame>().Grid;

                    grid[i, j] = tile;
                }
            }

            for (int i = 0; i < width; i++)
            {
                var b = GameObject.Instantiate(border);
                b.name               = "Border [" + i + ", 0]";
                b.transform.parent   = owner;
                b.transform.position = new Vector3(startingPosition.x + i, startingPosition.y - 0.75f, startingPosition.z);
            }

            for (int i = 0; i < width; i++)
            {
                var b = GameObject.Instantiate(border);
                b.name               = "Border [" + i + ", " + (height - 1) + "]";
                b.transform.parent   = owner;
                b.transform.position = new Vector3(startingPosition.x + i, startingPosition.y + (height - 1) + 0.75f, startingPosition.z);
            }

            for (int i = 0; i < height; i++)
            {
                var b = GameObject.Instantiate(border);
                b.name                  = "Border [0, " + i + "]";
                b.transform.parent      = owner;
                b.transform.position    = new Vector3(startingPosition.x - 0.75f, startingPosition.y + i, startingPosition.z);
                b.transform.eulerAngles = new Vector3(b.transform.eulerAngles.x, b.transform.eulerAngles.y, b.transform.eulerAngles.z + 90f);
            }

            for (int i = 0; i < height; i++)
            {
                var b = GameObject.Instantiate(border);
                b.name                  = "Border [" + (width - 1) + ", " + i + "]";
                b.transform.parent      = owner;
                b.transform.position    = new Vector3(startingPosition.x + (width - 1) + 0.75f, startingPosition.y + i, startingPosition.z);
                b.transform.eulerAngles = new Vector3(b.transform.eulerAngles.x, b.transform.eulerAngles.y, b.transform.eulerAngles.z + 90f);
            }

            var passingPoints = new List <Vector3>();

            var angle1 = GameObject.Instantiate(angle);

            angle1.name                  = "Angle [0, 0]";
            angle1.transform.parent      = owner;
            angle1.transform.position    = new Vector3(startingPosition.x - 0.75f, startingPosition.y - 0.75f, startingPosition.z);
            angle1.transform.eulerAngles = new Vector3(angle1.transform.eulerAngles.x, angle1.transform.eulerAngles.y, angle1.transform.eulerAngles.z);
            passingPoints.Add(angle1.transform.Find("AngleCenter").position);

            var angle2 = GameObject.Instantiate(angle);

            angle2.name                  = "Angle [0, " + (height - 1) + "]";
            angle2.transform.parent      = owner;
            angle2.transform.position    = new Vector3(startingPosition.x - 0.75f, startingPosition.y + (height - 1) + 0.75f, startingPosition.z);
            angle2.transform.eulerAngles = new Vector3(angle2.transform.eulerAngles.x, angle2.transform.eulerAngles.y, angle2.transform.eulerAngles.z + 90f);
            passingPoints.Add(angle2.transform.Find("AngleCenter").position);

            var angle3 = GameObject.Instantiate(angle);

            angle3.name                  = "Angle [" + (width - 1) + ", " + (height - 1) + "]";
            angle3.transform.parent      = owner;
            angle3.transform.position    = new Vector3(startingPosition.x + (width - 1) + 0.75f, startingPosition.y + (height - 1) + 0.75f, startingPosition.z);
            angle3.transform.eulerAngles = new Vector3(angle3.transform.eulerAngles.x, angle3.transform.eulerAngles.y, angle3.transform.eulerAngles.z + 180f);
            passingPoints.Add(angle3.transform.Find("AngleCenter").position);

            var angle4 = GameObject.Instantiate(angle);

            angle4.name                  = "Angle [" + (width - 1) + ", 0]";
            angle4.transform.parent      = owner;
            angle4.transform.position    = new Vector3(startingPosition.x + (width - 1) + 0.75f, startingPosition.y - 0.75f, startingPosition.z);
            angle4.transform.eulerAngles = new Vector3(angle4.transform.eulerAngles.x, angle4.transform.eulerAngles.y, angle4.transform.eulerAngles.z + 270f);
            passingPoints.Add(angle4.transform.Find("AngleCenter").position);

            var ball = GameObject.Instantiate(borderBall);

            ball.Points             = passingPoints;
            ball.transform.parent   = owner;
            ball.transform.position = angle1.transform.position;

            // Creates the quad
            var meshFilter = owner.gameObject.AddComponent <MeshFilter>();
            var mesh       = new Mesh();

            var vertices = new Vector3[4];

            vertices[0] = new Vector3(startingPosition.x - 0.5f, startingPosition.y - 0.5f, startingPosition.z);
            vertices[1] = new Vector3(startingPosition.x + (width - 1) + 0.5f, startingPosition.y - 0.5f, startingPosition.z);
            vertices[2] = new Vector3(startingPosition.x - 0.5f, startingPosition.y + (height - 1) + 0.5f, startingPosition.z);
            vertices[3] = new Vector3(startingPosition.x + (width - 1) + 0.5f, startingPosition.y + (height - 1) + 0.5f, startingPosition.z);

            var triangles = new int[6];

            triangles[0] = 0;
            triangles[1] = 2;
            triangles[2] = 1;
            triangles[3] = 1;
            triangles[4] = 2;
            triangles[5] = 3;

            var normals = new Vector3[4];

            normals[0] = -Vector3.forward;
            normals[1] = -Vector3.forward;
            normals[2] = -Vector3.forward;
            normals[3] = -Vector3.forward;

            var uvs = new Vector2[4];

            uvs[0] = new Vector2(0, 0);
            uvs[1] = new Vector2(1, 0);
            uvs[2] = new Vector2(0, 1);
            uvs[3] = new Vector2(1, 1);

            mesh.vertices  = vertices;
            mesh.triangles = triangles;
            mesh.normals   = normals;
            mesh.uv        = uvs;

            meshFilter.mesh = mesh;

            InitializeTextures(ref image);
            var renderer = owner.GetComponent <MeshRenderer>();

            renderer.material.mainTexture = image;

            return(grid);
        }
Пример #2
0
        public MatchingTile[,] Generate(int width, int height, MatchingTile[] prefabs, GameObject border, GameObject angle, BorderBall borderBall, Transform owner, ref Texture2D image)
        {
            var grid = new MatchingTile[width, height];

            var startingPosition = owner.transform.position;

            startingPosition.x = startingPosition.x - ((float)width / 2);
            startingPosition.y = startingPosition.y - ((float)height / 2);

            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    var index    = i * height + j;
                    var cellType = 0;

                    if (index < PuzzleManager.PuzzleData.puzzleField.Count)
                    {
                        // x->y model
                        //
                        // x,y ->->...
                        //     | | .
                        //     v v .
                        //

                        cellType = PuzzleManager.PuzzleData.puzzleField[index];
                    }
                    else
                    {
                        // todo: fix it
                        // error(), but continue because validation on hipr-restful
                        Debug.Log("Incorrect puzzle size puzzleId=" + PuzzleManager.PuzzleData.puzzleId + " " + index + " of " + PuzzleManager.PuzzleData.puzzleField.Count);
                        cellType = index;
                    }

                    if (cellType < 0 || cellType >= prefabs.Length)
                    {
                        // todo: fix it
                        // error(), but continue because validation on hipr-restful
                        Debug.Log("Incorrect puzzle value puzzleId=" + PuzzleManager.PuzzleData.puzzleId + " cellType=" + cellType);
                        cellType %= prefabs.Length;
                    }

                    //                    var cellType = UnityEngine.Random.Range(0, prefabs.Length);

                    var prefab = prefabs[cellType];
                    var tile   = GameObject.Instantiate <MatchingTile>(prefab);
                    tile.name               = "MatchingTile [" + i + "," + j + "]";
                    tile.transform.parent   = owner;
                    tile.transform.position = new Vector3(startingPosition.x + i, startingPosition.y + j, startingPosition.z);
                    tile.GridPosition       = new Vector2(i, j);
                    tile.Owner              = owner.GetComponent <MatchingGame>().Grid;

                    grid[i, j] = tile;
                }
            }

            for (int i = 0; i < width; i++)
            {
                var b = GameObject.Instantiate(border);
                b.name               = "Border [" + i + ", 0]";
                b.transform.parent   = owner;
                b.transform.position = new Vector3(startingPosition.x + i, startingPosition.y - 0.75f, startingPosition.z);
            }

            for (int i = 0; i < width; i++)
            {
                var b = GameObject.Instantiate(border);
                b.name               = "Border [" + i + ", " + (height - 1) + "]";
                b.transform.parent   = owner;
                b.transform.position = new Vector3(startingPosition.x + i, startingPosition.y + (height - 1) + 0.75f, startingPosition.z);
            }

            for (int i = 0; i < height; i++)
            {
                var b = GameObject.Instantiate(border);
                b.name                  = "Border [0, " + i + "]";
                b.transform.parent      = owner;
                b.transform.position    = new Vector3(startingPosition.x - 0.75f, startingPosition.y + i, startingPosition.z);
                b.transform.eulerAngles = new Vector3(b.transform.eulerAngles.x, b.transform.eulerAngles.y, b.transform.eulerAngles.z + 90f);
            }

            for (int i = 0; i < height; i++)
            {
                var b = GameObject.Instantiate(border);
                b.name                  = "Border [" + (width - 1) + ", " + i + "]";
                b.transform.parent      = owner;
                b.transform.position    = new Vector3(startingPosition.x + (width - 1) + 0.75f, startingPosition.y + i, startingPosition.z);
                b.transform.eulerAngles = new Vector3(b.transform.eulerAngles.x, b.transform.eulerAngles.y, b.transform.eulerAngles.z + 90f);
            }

            var passingPoints = new List <Vector3>();

            var angle1 = GameObject.Instantiate(angle);

            angle1.name                  = "Angle [0, 0]";
            angle1.transform.parent      = owner;
            angle1.transform.position    = new Vector3(startingPosition.x - 0.75f, startingPosition.y - 0.75f, startingPosition.z);
            angle1.transform.eulerAngles = new Vector3(angle1.transform.eulerAngles.x, angle1.transform.eulerAngles.y, angle1.transform.eulerAngles.z);
            passingPoints.Add(angle1.transform.Find("AngleCenter").position);

            var angle2 = GameObject.Instantiate(angle);

            angle2.name                  = "Angle [0, " + (height - 1) + "]";
            angle2.transform.parent      = owner;
            angle2.transform.position    = new Vector3(startingPosition.x - 0.75f, startingPosition.y + (height - 1) + 0.75f, startingPosition.z);
            angle2.transform.eulerAngles = new Vector3(angle2.transform.eulerAngles.x, angle2.transform.eulerAngles.y, angle2.transform.eulerAngles.z + 90f);
            passingPoints.Add(angle2.transform.Find("AngleCenter").position);

            var angle3 = GameObject.Instantiate(angle);

            angle3.name                  = "Angle [" + (width - 1) + ", " + (height - 1) + "]";
            angle3.transform.parent      = owner;
            angle3.transform.position    = new Vector3(startingPosition.x + (width - 1) + 0.75f, startingPosition.y + (height - 1) + 0.75f, startingPosition.z);
            angle3.transform.eulerAngles = new Vector3(angle3.transform.eulerAngles.x, angle3.transform.eulerAngles.y, angle3.transform.eulerAngles.z + 180f);
            passingPoints.Add(angle3.transform.Find("AngleCenter").position);

            var angle4 = GameObject.Instantiate(angle);

            angle4.name                  = "Angle [" + (width - 1) + ", 0]";
            angle4.transform.parent      = owner;
            angle4.transform.position    = new Vector3(startingPosition.x + (width - 1) + 0.75f, startingPosition.y - 0.75f, startingPosition.z);
            angle4.transform.eulerAngles = new Vector3(angle4.transform.eulerAngles.x, angle4.transform.eulerAngles.y, angle4.transform.eulerAngles.z + 270f);
            passingPoints.Add(angle4.transform.Find("AngleCenter").position);

            var ball = GameObject.Instantiate(borderBall);

            ball.Points             = passingPoints;
            ball.transform.parent   = owner;
            ball.transform.position = angle1.transform.position;

            // Creates the quad
            var meshFilter = owner.gameObject.AddComponent <MeshFilter>();
            var mesh       = new Mesh();

            var vertices = new Vector3[4];

            vertices[0] = new Vector3(startingPosition.x - 0.5f, startingPosition.y - 0.5f, startingPosition.z);
            vertices[1] = new Vector3(startingPosition.x + (width - 1) + 0.5f, startingPosition.y - 0.5f, startingPosition.z);
            vertices[2] = new Vector3(startingPosition.x - 0.5f, startingPosition.y + (height - 1) + 0.5f, startingPosition.z);
            vertices[3] = new Vector3(startingPosition.x + (width - 1) + 0.5f, startingPosition.y + (height - 1) + 0.5f, startingPosition.z);

            var triangles = new int[6];

            triangles[0] = 0;
            triangles[1] = 2;
            triangles[2] = 1;
            triangles[3] = 1;
            triangles[4] = 2;
            triangles[5] = 3;

            var normals = new Vector3[4];

            normals[0] = -Vector3.forward;
            normals[1] = -Vector3.forward;
            normals[2] = -Vector3.forward;
            normals[3] = -Vector3.forward;

            var uvs = new Vector2[4];

            uvs[0] = new Vector2(0, 0);
            uvs[1] = new Vector2(1, 0);
            uvs[2] = new Vector2(0, 1);
            uvs[3] = new Vector2(1, 1);

            mesh.vertices  = vertices;
            mesh.triangles = triangles;
            mesh.normals   = normals;
            mesh.uv        = uvs;

            meshFilter.mesh = mesh;

            InitializeTextures(ref image);
            var renderer = owner.GetComponent <MeshRenderer>();

            renderer.material.mainTexture = image;

            return(grid);
        }