Exemple #1
0
    //保存进度
    private void SaveProcess()
    {
        PuzzleSaveData data = new PuzzleSaveData();

        for (int i = 0; i < wordRow; i++)
        {
            List <bool> show = new List <bool> ();
            for (int j = 0; j < wordCol; j++)
            {
                show.Add(cellGroup[i * wordCol + j].isShowing);
            }
            data.letterShow.Add(show);
        }
        for (int j = 0; j < notPlaceRightBlock.Count; j++)
        {
            data.HintBlock.Add(notPlaceRightBlock[j].blockNum);
        }
        for (int w = 0; w < place.Count; w++)
        {
            data.HintBlock.Add(place[w].blockNum);
        }

        for (int m = 0; m < blocks.Count; m++)
        {
            PuzzleBlockPosition pos = new PuzzleBlockPosition();
            float x = blocks[m].GetComponent <RectTransform> ().anchoredPosition.x;
            float y = blocks[m].GetComponent <RectTransform> ().anchoredPosition.y;
            pos.x = x.ToString();
            pos.y = y.ToString();
            data.blockPosition.Add(pos);

            if (blocks[m].cells.Count != 0)
            {
                data.blockNum.Add(blocks[m].blockNum);
                List <int> index = new List <int> ();
                for (int n = 0; n < blocks[m].cells.Count; n++)
                {
                    index.Add(blocks[m].cells[n].transform.GetSiblingIndex());
                }
                data.blockPlaceCell.Add(index);
            }
        }
        TextManager.Instance.SaveProgress <PuzzleSaveData> ("PuzzleProgress.json", data);
    }
Exemple #2
0
    private void SetBlockInfo()
    {
        totalPlaceCount = data.puzzleInfo.Count;
        for (int i = 0; i < data.puzzleInfo.Count; i++)
        {
            BlockInfo  info   = data.puzzleInfo[i];
            GameObject parent = Instantiate(blockParent, blockParent.transform.parent);
            parent.name = info.blockNum.ToString();
            //设置方块的父物体
            Vector2 min = CalculateBlockPos(info.blockRect.min.y, info.blockRect.min.x);
            Vector2 max = CalculateBlockPos(info.blockRect.max.y, info.blockRect.max.x);
            parent.GetComponent <RectTransform> ().anchoredPosition = CalculateCenter(min, max);


            //计算对应单词的中心点
            Vector2 wordMin    = CalculateWordPos(info.wordRect.min.y, info.wordRect.min.x);
            Vector2 wordMax    = CalculateWordPos(info.wordRect.max.y, info.wordRect.max.x);
            Vector2 wordCenter = CalculateCenter(wordMin, wordMax);
            //设置父物体的信息
            int   row    = info.blockRect.max.x - info.blockRect.min.x;
            int   col    = info.blockRect.max.y - info.blockRect.min.y;
            float width  = Mathf.Abs((max.x - min.x) / 2) == 0 ? 0 : Mathf.Abs((max.x - min.x) / 2);
            float height = Mathf.Abs((max.y - min.y) / 2) == 0 ? 0 : Mathf.Abs((max.y - min.y) / 2);
            BlockParentManager manager = parent.GetComponent <BlockParentManager> ();
            manager.blockNum = info.blockNum;
            manager.SetBlockInfo(wordCenter, width + minSize / 2, height + minSize / 2, row, col, info.blockRect.min);
            manager.SetRightCells(AddCorrectCells(info.wordPos));
            for (int j = 0; j < info.blockPos.Count; j++)
            {
                int         x    = info.blockPos[j].pos.x;
                int         y    = info.blockPos[j].pos.y;
                PuzzleBlock cell = Instantiate(block, blockGroup);
                cell.GetComponent <RectTransform> ().anchoredPosition = CalculateBlockPos(y, x);
                cell.pos.x = x;
                cell.pos.y = y;
                cell.SetSize(minSize);
                cell.SetBlockInfo(info.blockPos[j].letter, colors[info.blockNum], parent.transform);
                cell.gameObject.SetActive(true);
                manager.SetPos(x, y);
                manager.AddBlock(cell);
            }
            //读取进度
            if (saveData != null)
            {
                PuzzleBlockPosition pos = saveData.blockPosition[i];
                parent.GetComponent <RectTransform> ().anchoredPosition = new Vector2(float.Parse(pos.x), float.Parse(pos.y));
                if (saveData.HintBlock.Contains(info.blockNum))
                {
                    notPlaceRightBlock.Add(manager);
                }
                for (int m = 0; m < saveData.blockNum.Count; m++)
                {
                    if (saveData.blockNum[m] == info.blockNum)
                    {
                        List <PuzzleLetterCell> letters = new List <PuzzleLetterCell> ();
                        for (int n = 0; n < saveData.blockPlaceCell[m].Count; n++)
                        {
                            letters.Add(cellGroup[saveData.blockPlaceCell[m][n]]);
                        }
                        manager.cells = letters;
                        saveData.blockNum.RemoveAt(m);
                        break;
                    }
                }
                for (int k = 0; k < saveData.placeBlock.Count; k++)
                {
                    if (saveData.placeBlock[k] == info.blockNum)
                    {
                        place.Add(manager);
                        place.RemoveAt(k);
                        break;
                    }
                }
            }
            else
            {
                notPlaceRightBlock.Add(manager);
            }
            blocks.Add(manager);
        }
    }