private ST_PuzzleTile_diva CheckIfWeCanMove(int Xpos, int Ypos, ST_PuzzleTile_diva thisTile) { // 움직일 방향 설정 if (CheckMoveLeft(Xpos, Ypos, thisTile) != thisTile) { return(CheckMoveLeft(Xpos, Ypos, thisTile)); } if (CheckMoveRight(Xpos, Ypos, thisTile) != thisTile) { return(CheckMoveRight(Xpos, Ypos, thisTile)); } if (CheckMoveDown(Xpos, Ypos, thisTile) != thisTile) { return(CheckMoveDown(Xpos, Ypos, thisTile)); } if (CheckMoveUp(Xpos, Ypos, thisTile) != thisTile) { return(CheckMoveUp(Xpos, Ypos, thisTile)); } return(thisTile); }
private ST_PuzzleTile_diva CheckMoveUp(int Xpos, int Ypos, ST_PuzzleTile_diva thisTile) { if ((Ypos + 1) < Height) { return(GetTileAtThisGridLocation(Xpos, Ypos + 1, thisTile)); } return(thisTile); }
private ST_PuzzleTile_diva CheckMoveDown(int Xpos, int Ypos, ST_PuzzleTile_diva thisTile) { if ((Ypos - 1) >= 0) { return(GetTileAtThisGridLocation(Xpos, Ypos - 1, thisTile)); } return(thisTile); }
private ST_PuzzleTile_diva CheckMoveRight(int Xpos, int Ypos, ST_PuzzleTile_diva thisTile) { if ((Xpos + 1) < Width) { return(GetTileAtThisGridLocation(Xpos + 1, Ypos, thisTile)); } return(thisTile); }
private ST_PuzzleTile_diva CheckMoveLeft(int Xpos, int Ypos, ST_PuzzleTile_diva thisTile) { // 왼쪽 체크 if ((Xpos - 1) >= 0) { // 왼쪽으로 움직일수 있으면 return(GetTileAtThisGridLocation(Xpos - 1, Ypos, thisTile)); } return(thisTile); }
private void CreatePuzzleTiles() { // 배열 생성 TileDisplayArray = new GameObject[Width, Height]; // 크기와 위치 설정 Scale = new Vector3(1.0f / Width, 1.0f, 1.0f / Height); Tile.transform.localScale = Scale; // 타일에 번호값 설정 int TileValue = 0; // 타일 생성 for (int j = Height - 1; j >= 0; j--) { for (int i = 0; i < Width; i++) { // 위치 설정 Position = new Vector3(((Scale.x * (i + 0.5f)) - (Scale.x * (Width / 2.0f))) * (10.0f + SeperationBetweenTiles), 0.0f, ((Scale.z * (j + 0.5f)) - (Scale.z * (Height / 2.0f))) * (10.0f + SeperationBetweenTiles)); // 위치 설정 DisplayPositions.Add(Position); // 타일 생성 TileDisplayArray[i, j] = Instantiate(Tile, PuzzlePosition, Quaternion.Euler(90.0f, -180.0f, 0.0f)) as GameObject; TileDisplayArray[i, j].gameObject.transform.parent = this.transform; // 카운드 세팅과 증가 ST_PuzzleTile_diva thisTile = TileDisplayArray[i, j].GetComponent <ST_PuzzleTile_diva>(); thisTile.ArrayLocation = new Vector2(i, j); thisTile.GridLocation = new Vector2(i, j); thisTile.LaunchPositionCoroutine(Position); TileValue++; // Material 생성 Material thisTileMaterial = new Material(PuzzleShader); // 퍼즐 이미지 저장 thisTileMaterial.mainTexture = PuzzleImage; // material값 저장 thisTileMaterial.mainTextureOffset = new Vector2(1.0f / Width * i, 1.0f / Height * j); thisTileMaterial.mainTextureScale = new Vector2(1.0f / Width, 1.0f / Height); // 해당 타일을 위한 새로운 material 생성 TileDisplayArray[i, j].GetComponent <Renderer>().material = thisTileMaterial; } } }
private ST_PuzzleTile_diva GetTileAtThisGridLocation(int x, int y, ST_PuzzleTile_diva thisTile) { // 퍼즐의 위치가 맞게 들어갔는지 왼쪽 상단부터 확인 for (int j = Height - 1; j >= 0; j--) { for (int i = 0; i < Width; i++) { if ((TileDisplayArray[i, j].GetComponent <ST_PuzzleTile_diva>().GridLocation.x == x) && (TileDisplayArray[i, j].GetComponent <ST_PuzzleTile_diva>().GridLocation.y == y)) { // 비활성화 시킨 타일을 발견하면 해당 타일을 반환 if (TileDisplayArray[i, j].GetComponent <ST_PuzzleTile_diva>().Active == false) { return(TileDisplayArray[i, j].GetComponent <ST_PuzzleTile_diva>()); } } } } return(thisTile); }
private void CompletePuzzleTiles() { // 크기 저장 Scale = new Vector3(1.0f / Width, 1.0f, 1.0f / Height); Tile.transform.localScale = Scale; // 위치 설정 Position = new Vector3(((Scale.x * 0.5f) - (Scale.x * (Width / 2.0f))) * (10.0f + SeperationBetweenTiles), 0.0f, ((Scale.z * 0.5f) - (Scale.z * (Height / 2.0f))) * (10.0f + SeperationBetweenTiles)); // 위치 설정 DisplayPositions.Add(Position); // 타일 생성 LastDisplayTile = Instantiate(Tile, gameObject.transform.position, Quaternion.Euler(90.0f, -180.0f, 0.0f)) as GameObject; LastDisplayTile.gameObject.transform.parent = this.transform; // 타일 세팅 ST_PuzzleTile_diva thisTile = LastDisplayTile.GetComponent <ST_PuzzleTile_diva>(); thisTile.ArrayLocation = new Vector2(0, 0); thisTile.GridLocation = new Vector2(0, 0); thisTile.LaunchPositionCoroutine(Position); // Material 생성 Material thisTileMaterial = new Material(PuzzleShader); // 퍼즐 이미지 저장 thisTileMaterial.mainTexture = PuzzleImage; // material값 저장 thisTileMaterial.mainTextureOffset = new Vector2(0, 0); thisTileMaterial.mainTextureScale = new Vector2(1.0f / Width, 1.0f / Height); // 해당 타일을 위한 새로운 material 생성 LastDisplayTile.GetComponent <Renderer>().material = thisTileMaterial; }
public Vector3 GetTargetLocation(ST_PuzzleTile_diva thisTile) { // 움직일 수 있는지 확인하고 목적지 정보 확인 ST_PuzzleTile_diva MoveTo = CheckIfWeCanMove((int)thisTile.GridLocation.x, (int)thisTile.GridLocation.y, thisTile); if (MoveTo != thisTile) { // 새로운 타일의 목적지 정보를 저장 Vector3 TargetPos = MoveTo.TargetPosition; Vector2 GridLocation = thisTile.GridLocation; thisTile.GridLocation = MoveTo.GridLocation; // 빈 타일의 위치로 옮김 MoveTo.LaunchPositionCoroutine(thisTile.TargetPosition); MoveTo.GridLocation = GridLocation; // 새로운 위치 정보 반환 return(TargetPos); } // 현재 위치 그대로 반환 return(thisTile.TargetPosition); }