private PuzzleBaseItemObj make_PuzzleItemObj(int x, int y) { int _type = Random.Range(0, m_itemList.Length); PuzzleBaseItemObj puzzleObj = PoolManager.instance.puzzlePool.Rent(); puzzleObj.transform.localPosition = new Vector3(x * DefineClass.PuzzleXSize, y * DefineClass.PuzzleYSize, 0); PuzzleBaseItemObj _itemObj = puzzleObj.GetComponent <PuzzleBaseItemObj>(); _itemObj.set_Item((PuzzleItemType)_type, x, y); _itemObj.BringIn(); return(_itemObj); }
protected virtual void PuzzleChangeAnim(PuzzleBaseItemObj _target) { Anime.Play(transform.localPosition, _target.GetPos(), Motion.Uniform(DefineClass.PuzzleItemChangeAnimVel)) .Subscribe(_ => { transform.localPosition = _; if (transform.localPosition == _target.transform.localPosition) { PuzzleManager.instance.DestroyPuzzleItem(); } }); }
private void CheckSamePuzzleItem(List <PuzzleBaseItemObj> _pList, PuzzleBaseItemObj _checkItem, CheckPuzzleDir dir) { int x = _checkItem.x; int y = _checkItem.y; PuzzleItemType type = _checkItem.puzzleType; if (dir == CheckPuzzleDir.NONE || dir == CheckPuzzleDir.Horizontal) { if (_checkItem.x > 0 && _checkItem.x < PuzzleWidth - 1) { if (type == puzzleArray[y, x + 1].puzzleType && type == puzzleArray[y, x - 1].puzzleType) { if (_pList.Contains(puzzleArray[y, x + 1]) == false) { if (y < PuzzleHeight - 1) { puzzleArray[y + 1, x + 1].MovePos.Value = puzzleArray[y, x + 1].GetPos(); } else { make_PuzzleItemObj(y + 1, x + 1).MovePos.Value = puzzleArray[y, x + 1].GetPos(); } _pList.Add(puzzleArray[y, x + 1]); CheckSamePuzzleItem(_pList, puzzleArray[y, x + 1], CheckPuzzleDir.Horizontal); } if (_pList.Contains(puzzleArray[y, x - 1]) == false) { if (y < PuzzleHeight - 1) { puzzleArray[y + 1, x - 1].MovePos.Value = puzzleArray[y, x - 1].GetPos(); } else { make_PuzzleItemObj(y + 1, x - 1).MovePos.Value = puzzleArray[y, x - 1].GetPos(); } _pList.Add(puzzleArray[y, x - 1]); CheckSamePuzzleItem(_pList, puzzleArray[y, x - 1], CheckPuzzleDir.Horizontal); } } } } if (dir == CheckPuzzleDir.NONE || dir == CheckPuzzleDir.Vertical) { if (_checkItem.y > 0 && _checkItem.y < PuzzleHeight - 1) { if (type == puzzleArray[y + 1, x].puzzleType && type == puzzleArray[y - 1, x].puzzleType) { bool bAdd = false; if (_pList.Contains(puzzleArray[y - 1, x]) == false) { if (y + 2 < PuzzleHeight - 1) { bAdd = true; puzzleArray[y + 2, x].MovePos.Value = puzzleArray[y - 1, x].GetPos(); } else { make_PuzzleItemObj(y + 2, x).MovePos.Value = puzzleArray[y - 1, x].GetPos(); } _pList.Add(puzzleArray[y - 1, x]); CheckSamePuzzleItem(_pList, puzzleArray[y - 1, x], CheckPuzzleDir.Vertical); } if (_pList.Contains(puzzleArray[y + 1, x]) == false) { if (y + (bAdd ? 3 : 2) < PuzzleHeight - 1) { puzzleArray[y + (bAdd ? 3 : 2), x].MovePos.Value = puzzleArray[y + 1, x].GetPos(); } else { make_PuzzleItemObj(y + (bAdd ? 3 : 2), x).MovePos.Value = puzzleArray[y + 1, x].GetPos(); } _pList.Add(puzzleArray[y + 1, x]); CheckSamePuzzleItem(_pList, puzzleArray[y + 1, x], CheckPuzzleDir.Vertical); } } } } }