void Awake() { int randStartingPos = UnityEngine.Random.Range(0, 3); InitDictionaryRooms(); transform.position = startingPositions[0].position;//ToDo Random previousRoomDirection = 3; nextRoomDirection = 1; //ToDo:Carga dinamica currentLevelParameters.Add(new LevelParameters(EnumTypeRoom.Secundary, false)); currentLevelParameters.Add(new LevelParameters(EnumTypeRoom.Secret, false)); currentLevelParameters.Add(new LevelParameters(EnumTypeRoom.Secundary, false)); //set tipo habitacion ListRoomsCreated[transform.position].TypeRoom = EnumTypeRoom.Main; ListRoomsCreated[transform.position].RoomGenerated = true; ListRoomsCreated[transform.position].SetDoorTypeByDirection((doorDirection)GetDoorDirectionByInt(nextRoomDirection), EnumTypeDoor.entrance); BoardRoom initialBoardRoom = GameManager.instance.boardScript.BoardSetup(transform.position, null, nextDirectionDoor);// TODO: arreglar que no inicie en estatico la primera habitacion //ListRoomsCreated.Add(transform.position, currentRoomParam); rooms.Add(initialBoardRoom); UpdateCurrentRoomParameters(ListRoomsCreated); GameManager.instance.SetCurrentRoomBoard(initialBoardRoom); }
public void InitRoomsDungeonLevel(BoardRoom[] listRooms) { foreach (var room in listRooms) { InitRoom(room); room.PauseRoom(); } // asignar la primera habitacion como inicial currentRoom = listRooms[0]; currentRoom.ReStartRoom(); }
private void SetSpawnEnemies(BoardRoom currentRoom) { //var typesMonster = Assembly.GetAssembly(typeof(EnumTypeEnemies)).GetTypes().Where(currentType => currentType.IsSubclassOf(typeof(EnumTypeEnemies))); //asignar cantidad de enemigos SetQtyEnemies(); enemies.Clear(); //recorrer bucle por tipo de enemigo foreach (var typeEnemy in Enum.GetNames(typeof(EnumTypeEnemies))) { if (typeEnemy != "none") { //el metodo será general pasandole la cantidad de enemigos a generar y el tipo de enemigos SpawnTypeEnemies(typeEnemy); } } //primero elegir la cantidad de enemigos en la formula y luego buscar el array de posiciones que coincida con esa cantidad y sus variantes currentRoom.InvokeEnemies(currentInitPositionsEnemy, enemies);//ToDo: gestionar cantidad de enemigos y el array de posiciones previamente e incluso el tipo de enemigos }
/// <summary> /// Se inicializa una habitacion /// </summary> private void InitRoom(BoardRoom currentRoom) { currentInitPositionsEnemy = Utilities.getAllChildsObject <Transform>(InitPositionsEnemy[0].transform); //ToDo: elegir de forma aleatoria SetTypeCurrentRoom(); //ToDo: switch (currentTypeRoom) { case TypesRoom.empty: SetEmptyRoom(); break; case TypesRoom.battle: //set posiciones enemigos para el nivel SetSpawnEnemies(currentRoom); break; case TypesRoom.puzzzle: //set posiciones objetos puzzle/diseño SetSpawnPuzzle(); break; } }
//reiniciar la instancia de la habitacion public void ReStartRoom(BoardRoom _boardRoom) { _boardRoom.ReStartRoom(); }
//pausar la partida public void PauseRoom(BoardRoom _boardRoom) { _boardRoom.PauseRoom(); }
/// <summary> /// Sobrecarga para crear una habitacion instancia a una posicion determinada /// </summary> /// <param name="currentRoomPosition"> posicion inicial de instancia </param> /// <param name="previousSideRoom"> direccion puerta "entrada" </param> /// <param name="nextSideDoor"> direccion puerta "salida" </param> /// <returns></returns> public BoardRoom BoardSetup(Vector3 currentRoomPosition, doorDirection?previousSideRoom, doorDirection?nextSideDoor) { //Instantiate Board and set boardHolder to its transform. //GameObject board = new GameObject("Board"); isExit = false; isEntrance = false; isCreatedEntrance = false; isCreatedExit = false; generatedBoardRoom = null; roomCollider = null; generatedBoardRoom = Instantiate(prefabBoardRoom, new Vector3(0, 0, 0), Quaternion.identity); generatedBoardRoom.name = "BoardRoom_" + index.ToString(); index++; roomCollider = Instantiate(prefabRoomCollider, new Vector3(0, 0, 0), Quaternion.identity); roomCollider.transform.SetParent(generatedBoardRoom.transform); generatedBoardRoom.colliderDetector = roomCollider.GetComponent <BoxCollider2D>(); //Loop along x axis, starting from -1 (to fill corner) with floor or outerwall edge tiles. for (int x = -1; x < columns + 1; x++) { //Loop along y axis, starting from -1 to place floor or outerwall tiles. for (int y = -1; y < rows + 1; y++) { //Choose a random tile from our array of floor tile prefabs and prepare to instantiate it. GameObject toInstantiate = floorTiles[Random.Range(0, floorTiles.Length)]; if (x == -1 && y == -1)// WallCorners { toInstantiate = wallCornerBottomLeft; } if (x == -1 && y == rows) { toInstantiate = wallCornerTopLeft; } if (x == columns && y == -1) { toInstantiate = wallCornerBottomRight; } if (x == columns && y == rows) { toInstantiate = wallCornerTopRight; } if ((y == -1 || y == rows) && !((x == -1 && y == -1) || (x == -1 && y == rows) || (x == columns && y == -1) || (x == columns && y == rows))) //rows y que no sea esquina de fila { if ((x == 7 || x == 8) && y == -1) { if (nextSideDoor == doorDirection.down) { isExit = true;//marcador para identificar salida y cambiar el tag del objeto isCreatedExit = true; currentDirectionDoor = nextSideDoor; } else if (previousSideRoom == doorDirection.down) { isEntrance = true; isCreatedEntrance = true; currentDirectionDoor = previousSideRoom; } else { isExtraDoor = true; isCreatedExtraDoor = true; currentDirectionDoor = doorDirection.down; } movColliderX = 0.5f; movColliderY = -0.3f; angleExitCollider = Quaternion.AngleAxis(90, Vector3.back); angleExitDoor = Quaternion.identity; roomDoor = roomDoorUpDown; } else if ((x == 7 || x == 8) && y == rows) { if (nextSideDoor == doorDirection.up) { isExit = true;//marcador para identificar salida y cambiar el tag del objeto isCreatedExit = true; currentDirectionDoor = nextSideDoor; } else if (previousSideRoom == doorDirection.up) { isEntrance = true; isCreatedEntrance = true; currentDirectionDoor = previousSideRoom; } else { isExtraDoor = true; isCreatedExtraDoor = true; currentDirectionDoor = doorDirection.up; } movColliderX = 0.5f; movColliderY = 0.3f; angleExitCollider = Quaternion.AngleAxis(90, Vector3.back); angleExitDoor = Quaternion.identity; roomDoor = roomDoorUpDown; } else { toInstantiate = outerWallFrontTiles[Random.Range(0, outerWallFrontTiles.Length)]; } } if ((x == -1) && !(x == -1 && y == -1) && !(x == -1 && y == rows)) //collumns y que no sea esquina de columna LADO IZQUIERDO { if (y == 3 || y == 4) // doors leftSide { if (nextSideDoor == doorDirection.left) { isExit = true;//marcador para identificar salida y cambiar el tag del objeto isCreatedExit = true; currentDirectionDoor = nextSideDoor; } else if (previousSideRoom == doorDirection.left) { isEntrance = true; isCreatedEntrance = true; currentDirectionDoor = previousSideRoom; } else { isExtraDoor = true; isCreatedExtraDoor = true; currentDirectionDoor = doorDirection.left; } movColliderX = -0.3f; movColliderY = 0.5f; angleExitCollider = Quaternion.identity; angleExitDoor = Quaternion.AngleAxis(180, Vector3.back); roomDoor = roomDoorLeftRight; } else { toInstantiate = outerWallSideLeftTiles; } } if ((x == columns) && !(x == columns && y == -1) && !(x == columns && y == rows)) //collumns y que no sea esquina de columna LADO DERECHO { if (y == 3 || y == 4) // doors rightSide { if (nextSideDoor == doorDirection.right) { isExit = true;//marcador para identificar salida y cambiar el tag del objeto isCreatedExit = true; currentDirectionDoor = nextSideDoor; } else if (previousSideRoom == doorDirection.right) { isEntrance = true; isCreatedEntrance = true; currentDirectionDoor = previousSideRoom; } else { isExtraDoor = true; isCreatedExtraDoor = true; currentDirectionDoor = doorDirection.right; } movColliderX = 0.3f; movColliderY = 0.5f; angleExitCollider = Quaternion.identity; angleExitDoor = Quaternion.identity; roomDoor = roomDoorLeftRight; } else { toInstantiate = outerWallSideRightTiles; } } //instanciar la puerta correspondiente if (isExit) { GameObject exitRoomDoor = Instantiate(roomDoor, new Vector3(x, y, 0f), angleExitDoor) as GameObject; if (isCreatedExit && colliderExit == null) { colliderExit = Instantiate(rightChangeRoomCollider, new Vector3(x + movColliderX, y + movColliderY, 0f), angleExitCollider) as GameObject; colliderExit.tag = "Exit"; isCreatedExit = true; colliderExit.transform.SetParent(exitRoomDoor.transform); } isExit = false; exitRoomDoor.transform.SetParent(generatedBoardRoom.transform); generatedBoardRoom.DctDoors1.Add(exitRoomDoor, currentDirectionDoor.Value); } if (isEntrance) { GameObject entranceRoomDoor = Instantiate(roomDoor, new Vector3(x, y, 0f), angleExitDoor) as GameObject; if (isCreatedEntrance && colliderEntrance == null) { colliderEntrance = Instantiate(rightChangeRoomCollider, new Vector3(x + movColliderX, y + movColliderY, 0f), angleExitCollider) as GameObject; colliderEntrance.tag = "Entrance"; isCreatedEntrance = true; colliderEntrance.transform.SetParent(entranceRoomDoor.transform); } isEntrance = false; entranceRoomDoor.transform.SetParent(generatedBoardRoom.transform); generatedBoardRoom.DctDoors1.Add(entranceRoomDoor, currentDirectionDoor.Value); } if (isExtraDoor) { GameObject entranceRoomDoor = Instantiate(roomDoor, new Vector3(x, y, 0f), angleExitDoor) as GameObject; if (isCreatedExtraDoor && colliderExtraDoor == null) { colliderExtraDoor = Instantiate(rightChangeRoomCollider, new Vector3(x + movColliderX, y + movColliderY, 0f), angleExitCollider) as GameObject; colliderExtraDoor.tag = "NoDoor"; isCreatedExtraDoor = true; colliderExtraDoor.transform.SetParent(entranceRoomDoor.transform); } isExtraDoor = false; entranceRoomDoor.transform.SetParent(generatedBoardRoom.transform); generatedBoardRoom.DctDoors1.Add(entranceRoomDoor, currentDirectionDoor.Value); if (y == 4 || x == 8 && colliderExtraDoor != null) { colliderExtraDoor = null; } } GameObject instance = Instantiate(toInstantiate, new Vector3(x, y, 0f), Quaternion.identity) as GameObject; instance.transform.SetParent(generatedBoardRoom.transform); } } colliderEntrance = null; colliderExit = null; generatedBoardRoom.transform.position = currentRoomPosition; if (nextSideDoor != null) { generatedBoardRoom.InitialExitDirection = (doorDirection)nextSideDoor; } if (previousSideRoom != null) { generatedBoardRoom.InitialEntranceDirection = (doorDirection)previousSideRoom; } //Asignamos las variables necesarios generatedBoardRoom.SetParametersRoom(); return(generatedBoardRoom); }