public void CreateDoors(RoomInstance room) { Vector2 spawnPosition = new Vector2(room.gridPos.x + room.roomSizeInTiles.x, room.gridPos.y + room.roomSizeInTiles.y * 2); PlaceDoor(spawnPosition, room.doorU, room.roomTop, Orientation.North, room); spawnPosition = new Vector2(room.gridPos.x + room.roomSizeInTiles.x, room.gridPos.y - 1); PlaceDoor(spawnPosition, room.doorD, room.roomBot, Orientation.South, room); spawnPosition = new Vector2(room.gridPos.x + room.roomSizeInTiles.x * 2, room.gridPos.y + room.roomSizeInTiles.y); PlaceDoor(spawnPosition, room.dooR, room.roomRight, Orientation.East, room); spawnPosition = new Vector2(room.gridPos.x - 1, room.gridPos.y + room.roomSizeInTiles.y); PlaceDoor(spawnPosition, room.doorL, room.roomLeft, Orientation.West, room); }
void PlaceDoor(Vector2 spawnPosition, GameObject door, RoomInstance linkedRoom, Orientation orientation, RoomInstance OwnerRoom) { if (linkedRoom != null) { Vector3Int currentCell = GameObject.FindGameObjectWithTag("Interactive").GetComponent <Tilemap>().WorldToCell(spawnPosition); GameObject.FindGameObjectWithTag("Interactive").GetComponent <Tilemap>().SetTile(new Vector3Int(currentCell.x, currentCell.y, currentCell.z), DoorTile); Vector3 spawnPos = new Vector3(0, 0, 0); switch (orientation) { case Orientation.North: spawnPos = new Vector3(spawnPosition.x, spawnPosition.y, 0); break; case Orientation.South: spawnPos = new Vector3(spawnPosition.x, spawnPosition.y - 1f, 0); break; case Orientation.East: spawnPos = new Vector3(spawnPosition.x + 1f, spawnPosition.y - 1f, 0); break; case Orientation.West: spawnPos = new Vector3(spawnPosition.x, spawnPosition.y - 1f, 0); break; } door = (GameObject)Instantiate(Resources.Load("Prefabs/Interactive/Activable/Door"), spawnPos, Quaternion.identity); door.transform.parent = GameObject.Find("Room " + OwnerRoom.gridPos.x / 100 + ", " + OwnerRoom.gridPos.y / 100 + " - " + OwnerRoom.RoomType).transform; Door doorScript = door.GetComponent(typeof(Door)) as Door; doorScript.LinkRoom = linkedRoom; doorScript.Orientation = orientation; doorScript.OwnerRoom = OwnerRoom; door.name = "Door " + OwnerRoom.gridPos.x / 100 + ", " + OwnerRoom.gridPos.y / 100 + "- " + orientation; switch (orientation) { case Orientation.North: OwnerRoom.doorU = door; break; case Orientation.South: OwnerRoom.doorD = door; break; case Orientation.East: OwnerRoom.dooR = door; break; case Orientation.West: OwnerRoom.doorL = door; break; } switch (linkedRoom.RoomType) { case RoomType.SecretRoom: doorScript.DoorType = DoorType.secretDoor; break; case RoomType.BossRoom: doorScript.DoorType = DoorType.bossDoor; break; default: doorScript.DoorType = DoorType.normalDoor; break; } } }
void CreateRoomsInstances() { // Convert all room to roomInstance foreach (var room in roomList) { // Create gameobject RoomInstance GameObject roomObject = new GameObject(); roomObject.name = "Room " + room.gridPos.x + ", " + room.gridPos.y + " - " + room.RoomType; roomObject.transform.parent = GameObject.Find("Rooms").transform; RoomInstance roomSriptInstance = roomObject.AddComponent(typeof(RoomInstance)) as RoomInstance; roomSriptInstance.gridPos = room.gridPos * 100; roomSriptInstance.RoomType = room.RoomType; roomSriptInstance.DoorTile = DoorTile; roomSriptInstance.Mapper = room.Mapper; switch (room.RoomType) { case RoomType.NormalRoom: roomSriptInstance.WallTile = NormalWallTile; roomSriptInstance.FloorTile = NormalFloorTile; break; case RoomType.BossRoom: roomSriptInstance.WallTile = BossWallTile; roomSriptInstance.FloorTile = BossFloorTile; break; case RoomType.TreasureRoom: roomSriptInstance.WallTile = TreasureWallTile; roomSriptInstance.FloorTile = TreasureFloorTile; break; case RoomType.SecretRoom: roomSriptInstance.WallTile = TreasureWallTile; roomSriptInstance.FloorTile = TreasureFloorTile; break; case RoomType.SpawnRoom: roomSriptInstance.WallTile = NormalWallTile; roomSriptInstance.FloorTile = NormalFloorTile; break; default: roomSriptInstance.WallTile = NormalWallTile; roomSriptInstance.FloorTile = NormalFloorTile; break; } roomSriptInstance.Invoke("GenerateRoomTiles", 0); roomInstanceList.Add(roomObject.GetComponent(typeof(RoomInstance)) as RoomInstance); } // Adding connected room to each room for (int i = 0; i < roomList.Count; i++) { var roomInstance = roomInstanceList[i]; if (roomList[i].roomBot != null) { roomInstance.roomBot = roomInstanceList[roomList.IndexOf(roomList[i].roomBot)]; } if (roomList[i].roomTop != null) { roomInstance.roomTop = roomInstanceList[roomList.IndexOf(roomList[i].roomTop)]; } if (roomList[i].roomLeft != null) { roomInstance.roomLeft = roomInstanceList[roomList.IndexOf(roomList[i].roomLeft)]; } if (roomList[i].roomRight != null) { roomInstance.roomRight = roomInstanceList[roomList.IndexOf(roomList[i].roomRight)]; } } // Create doors foreach (var room in roomInstanceList) { CreateDoors(room); room.Mapper.transform.parent = GameObject.Find("Room " + room.gridPos.x / 100 + ", " + room.gridPos.y / 100 + " - " + room.RoomType).transform; } roomInstanceList[0].isRoomVisited = true; }
public void SetRoomLeft(RoomInstance _RoomLeft) { roomLeft = _RoomLeft; }