private void ShuffleDoor(Room room) { for (int i = 0; i < room.doorList.Count; i++) { OffTile_Door var = room.doorList[i]; int ranNum = Random.Range(i, room.doorList.Count); room.doorList[i] = room.doorList[ranNum]; room.doorList[ranNum] = var; } }
private OffTile_Door FindRightDoor(OffTile_Door room1Door, Room room2) { Direction opposite = (Direction)(((int)room1Door.Dir + 2) % 4); for (int j = 0; j < room2.doorList.Count; j++) { if (room2.doorList[j].Dir == opposite && room2.doorList[j].TargetRoom == null) { return(room2.doorList[j]); } } return(null); }
//문을 통해서 이동 public void EnterRoom(OffTile_Door door) { if (currentRoom != null) { if (currentRoom.roomType == RoomType.START && GameManager.instance.CurrentMap.SaveTile != null) { GameManager.instance.CurrentMap.SaveTile.DestroyThis(); } } Vector2Int temp; if (currentRoom != null) { currentTile.OnTileObj = null; } //Spawn Position Set if (door.Dir == Direction.NORTH) { temp = door.ConnectedDoor.CurrentTile.pos + new Vector2Int(0, 1); } else if (door.Dir == Direction.EAST) { temp = door.ConnectedDoor.CurrentTile.pos + new Vector2Int(1, 0); } else if (door.Dir == Direction.WEST) { temp = door.ConnectedDoor.CurrentTile.pos + new Vector2Int(-1, 0); } else//_room == currentRoom.SouthRoom { temp = door.ConnectedDoor.CurrentTile.pos + new Vector2Int(0, -1); } SetRoom(door.TargetRoom, temp); GameManager.instance.OnPlayerEnterRoom(currentRoom); }
private bool ConnectRoom(Room room1, Room room2) { ShuffleDoor(room1); ShuffleDoor(room2); OffTile_Door room1Door = null; OffTile_Door room2Door = null; bool success = false; if (room2.RoomName.Contains("end") && room1.Distance < 3) //끝방 조건(시작방으로부터 일정거리 떨어져야 만들어짐!!!) { return(false); } for (int i = 0; i < room1.doorList.Count; i++) { if (room1.doorList[i].TargetRoom == null) { room1Door = room1.doorList[i]; room2Door = FindRightDoor(room1Door, room2); if (room2Door == null) { continue; } else { ///방배치 시작 Vector3 offset = room2.transform.position - room2Door.transform.position; switch (room1Door.Dir) { case Direction.NORTH: room2.transform.position = new Vector3(room1Door.transform.position.x + offset.x , room1.transform.position.y + room1.size.y + space); break; case Direction.EAST: room2.transform.position = new Vector3(room1.transform.position.x + room1.size.x + space , room1Door.transform.position.y + offset.y); break; case Direction.SOUTH: room2.transform.position = new Vector3(room1Door.transform.position.x + offset.x , room1.transform.position.y - room2.size.y - space); break; case Direction.WEST: room2.transform.position = new Vector3(room1.transform.position.x - room2.size.x - space , room1Door.transform.position.y + offset.y); break; } if (IsOverlapped(room2)) { room2.transform.position = new Vector3(-9999, -9999); continue; } else { room1Door.TargetRoom = room2; room1Door.ConnectedDoor = room2Door; room2Door.TargetRoom = room1; room2Door.ConnectedDoor = room1Door; room2.Distance = room1.Distance + 1; success = true; break; } } } } return(success); }