//保存进度 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); }
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); } }