private void layTile(Block block, List<Direction> directionList) { // 通路プレハブのインスタンス生成 GameObject aisleFloor = (GameObject)Resources.Load("Prehabs/Floor1"); // 通路の目的地 int aisleDestinationX = 0; int aisleDestinationY = 0; // 通路の幅の一時保存 int tmpAislePostion = 0; // 通路の幅設定(1~2) AisleWidth = Random.Range(1, 1); Debug.Log("今から通路を各部屋はx: " + block.GetNumberX() + "y: " + block.GetNumberY()); for (int i = 0; i < directionList.Count; i++) { Debug.Log("方向の数" + directionList.Count); if (i == (directionList.Count - 1)) { // 目的地をエリアの終端に設定 Debug.Log("目的地を部屋の終端に設定"); getEndDestination(ref aisleDestinationX, ref aisleDestinationY, directionList[i]); } else { // 目的地をランダムに設定する Debug.Log("目的地を部屋の適当に設定"); getDestination(ref aisleDestinationX, ref aisleDestinationY, directionList[i]); } Debug.Log("目的地はx:" + aisleDestinationX + " y:" + aisleDestinationY); switch (directionList[i]) { case Block.Direction.Up: aisleDestinationX = AisleWidth + AislePositionX; tmpAislePostion = AislePositionX; while (AislePositionY < aisleDestinationY) { while (AislePositionX < aisleDestinationX) { generateTile(aisleFloor, block, AislePositionX, AislePositionY); AislePositionX++; } AislePositionX = tmpAislePostion; AislePositionY++; } if (i == (directionList.Count - 1)) { // 次のエリアへ通路の位置を教える Debug.Log("書き終わる前だよ"); AislePositionY = 0; } break; case Block.Direction.Down: aisleDestinationX = AisleWidth + AislePositionX; tmpAislePostion = AislePositionX; while (AislePositionY >= aisleDestinationY) { while (AislePositionX < aisleDestinationX) { generateTile(aisleFloor, block, AislePositionX, AislePositionY); AislePositionX++; } AislePositionX = tmpAislePostion; AislePositionY--; } if (i == (directionList.Count - 1)) { // 次のエリアへ通路の位置を教える Debug.Log("書き終わる前だよ"); AislePositionY = BlockHeight - 1; } break; case Block.Direction.Right: aisleDestinationY = AisleWidth + AislePositionY; tmpAislePostion = AislePositionY; while (AislePositionX < aisleDestinationX) { while (AislePositionY < aisleDestinationY) { generateTile(aisleFloor, block, AislePositionX, AislePositionY); AislePositionY++; } AislePositionY = tmpAislePostion; AislePositionX++; } if (i == (directionList.Count - 1)) { // 次のエリアへ通路の位置を教える Debug.Log("書き終わる前だよ"); AislePositionX = 0; } break; case Block.Direction.Left: aisleDestinationY = AisleWidth + AislePositionY; tmpAislePostion = AislePositionY; while (AislePositionX >= aisleDestinationX) { while (AislePositionY < aisleDestinationY) { generateTile(aisleFloor, block, AislePositionX, AislePositionY); AislePositionY++; } AislePositionY = tmpAislePostion; AislePositionX--; } if (i == (directionList.Count - 1)) { // 次のエリアへ通路の位置を教える Debug.Log("書き終わる前だよ"); AislePositionX = BlockWidth - 1; } break; } } }
private void generateTile(GameObject gameObject, Block area,int x,int y) { Instantiate(gameObject, new Vector3(area.GetNumberX() * 50 + x * 5, area.GetNumberY() * 50 + y * 5), Quaternion.identity); area.Tile.SetNormalTile(x, y); Debug.Log("通路の生成 部屋の位置 x:" + area.GetNumberX() + " y:" + area.GetNumberY() + "通路の位置 x:" + x + " y:" + y); }
/// <summary> /// 指定されたエリアの右方向のエリアを取得する /// </summary> /// <param name="area"></param> /// <returns></returns> public Block getAroundRightArea(Block area) { return getAreaGroup(area.GetNumberX() + 1, area.GetNumberY()); }
/// <summary> /// 指定されたエリアの上方向のエリアを取得する /// </summary> /// <param name="area"></param> /// <returns></returns> public Block getAroundUpArea(Block area) { return getAreaGroup(area.GetNumberX(), area.GetNumberY() + 1); }
/// <summary> /// 指定されたエリアの左方向のエリアを取得する /// </summary> /// <param name="area"></param> /// <returns></returns> public Block getAroundLeftArea(Block area) { return getAreaGroup(area.GetNumberX() - 1, area.GetNumberY()); }