// Start is called before the first frame update void Awake() { zone = FindObjectOfType <PuzzleZone>(); m_animator = GetComponent <Animator>(); Background = transform.Find("BlurBG").gameObject; m_animator.enabled = false; }
public void ClearInteractable() { puzzle = null; riddle = null; door = null; bookShelf = null; }
public PuzzleZone GetPuzzleZone() { if (m_puzzleZone == null) { m_puzzleZone = (PuzzleZone)FindObjectOfType(typeof(PuzzleZone)); } return(m_puzzleZone); }
public static PuzzleZone GetInstance() { if (!instance) { instance = (PuzzleZone)GameObject.FindObjectOfType(typeof(PuzzleZone)); if (!instance) { Debug.LogError("PuzzleZone 게임 오브젝트 찾을 수 없음."); } } return(instance); }
public void SetInteractable(PuzzleZone puzzleObject = null, RiddleZone riddleObject = null, Door doorObject = null, BookShelfZone bookshelfObject = null) { if (puzzleObject != null) { puzzle = puzzleObject; } else if (riddleObject != null) { riddle = riddleObject; } else if (doorObject != null) { door = doorObject; } else if (bookshelfObject != null) { bookShelf = bookshelfObject; } }
private void OnMouseDrag() { if ((PuzzleZone.GetInstance().GetState() == EGameState.eOnGame) && (PuzzleZone.GetInstance().m_bRotatable)) { if (m_bRotated == false) { m_pressedTime += 10 * Time.deltaTime; if (m_pressedTime > 4) { // lerp towards our target. PuzzleZone.GetInstance().AudioPlayPuzzleSpin(); float adjustedAngle = (float)Math.Round(transform.localEulerAngles.y); //.Log(adjustedAngle); TargetAngle = Quaternion.Euler(transform.localEulerAngles.x, adjustedAngle + 90.000f, transform.localEulerAngles.z); StartCoroutine(UpdateRotation(8.0f)); m_bRotated = true; } } } }
void OnMouseUp()//OnMouseDown() { //Debug.Log(m_pressedTime); if ((PuzzleZone.GetInstance().GetState() == EGameState.eOnGame)) { if (m_bRotated == true) { m_bRotated = false; } else { if (this.transform.parent.GetComponent <ST_PuzzleDisplay>().CanPuzzleMove(this.GetComponent <ST_PuzzleTile>())) { PuzzleZone.GetInstance().AudioPlayPuzzleMove(); PuzzleZone.GetInstance().IncreaseMoveCount(); // 이동 횟수 증가 // get the puzzle display and return the new target location from this tile. LaunchPositionCoroutine(this.transform.parent.GetComponent <ST_PuzzleDisplay>().GetTargetLocation(this.GetComponent <ST_PuzzleTile>()), 10.0f); } } m_pressedTime = 0; } }
public IEnumerator CheckForEnd() { while (Complete == false) { // iterate over all the tiles and check if they are in the correct position. Complete = true; for (int j = Height - 1; j >= 0; j--) { for (int i = 0; i < Width; i++) { // check if this tile has the correct grid display location. if ((TileDisplayArray[i, j].GetComponent <ST_PuzzleTile>().CorrectLocation == false) || (TileDisplayArray[i, j].GetComponent <ST_PuzzleTile>().IsCorrectRotation() == false)) { Complete = false; break; } } } yield return(null); } // if we are still complete then all the tiles are correct. if (Complete) { Debug.Log("Puzzle Complete!"); // 퍼즐 상태 완료 전환 PuzzleZone.GetInstance().SetState(EGameState.eComplete); TileDisplayArray[0, 0].GetComponent <Renderer>().enabled = true; } // yield return(null); }
private IEnumerator JugglePuzzle() { /* * 좌측하단 퍼즐 페이드아웃 * 나머지 퍼즐 사라진 후 즉시 섞인상태로 등장 */ yield return(new WaitForSeconds(2.0f)); // 퍼즐을 0,0 기준으로부터 랜덤하게 빈공간을 채워넣는다. // 0,0 위치와 인접한 퍼즐들의 객체에 접급한다. for (int i = 0; i < ShuffleComplexity; i++) { List <Vector2Int> moveList = new List <Vector2Int>(); //현재 빈공간의 인접한 방향에 대해 for (int d = 0; d < 4; d++) // 동/서/남/북 검사 { //단, 이전 빈공간위치가 아닌 인접한 퍼즐에 대해 Vector2Int checkPos = new Vector2Int(BlankPosition.x + Dir[d, 0], BlankPosition.y + Dir[d, 1]); if (checkPos.x >= 0 && checkPos.x < Width && checkPos.y >= 0 && checkPos.y < Height && PrevBlankPosition != checkPos) { moveList.Add(checkPos); Debug.Log("chk: " + checkPos.x + "," + checkPos); } } int r = Random.Range(0, moveList.Count); Vector2Int next = moveList[r]; //선택한 퍼즐을 빈 공간으로 위치시킨다.(swap 함수구현) ex) value<1,0>.position = <0,0> SwapPuzzle(BlankPosition, next); // next 위치의 퍼즐과 자리를 바꾼다. //전빈공간 위치 갱신 PrevBlankPosition = BlankPosition; //빈공간 위치 갱신 BlankPosition = next; } //섞인 위치로 실제 퍼즐을 이동시킨다. for (int j = 0; j < Height; j++) { for (int i = 0; i < Width; i++) { int start_grid_x = SuffledTilePosition[i, j].x; int start_grid_y = SuffledTilePosition[i, j].y; //1,0 -> 0,0 TileDisplayArray[start_grid_x, start_grid_y].GetComponent <ST_PuzzleTile>().GridLocation = new Vector2(i, j); // Tile 의 grid 포지션 갱신 TileDisplayArray[start_grid_x, start_grid_y].GetComponent <ST_PuzzleTile>().MoveToTarget(GridToPosMap[i, j], shuffleSpeed); // targetTile의 position으로 이동시킴 /**************************** **** 회전 가능한 스테이질 경우**** ****************************/ if (PuzzleZone.GetInstance().m_bRotatable&& (start_grid_x != 0 || start_grid_y != 0)) { int r = Random.Range(0, 4); TileDisplayArray[start_grid_x, start_grid_y].GetComponent <ST_PuzzleTile>().RotateToTarget(90.0000f * r, 10.0f); } yield return(new WaitForSeconds(0.1f)); } } // continually check for the correct answer. StartCoroutine(CheckForEnd()); yield return(null); }