// Inicializa o reinicia el gestor private void Initialize(int rows, int columns, int roomLength) { if (tablero == null) throw new InvalidOperationException("The board reference is null"); // init de variables for (int i = 0; i < characters.Count; i++) { if (characters[i].ficha_ != null) Destroy(characters[i].ficha_.gameObject); } turnos.Clear(); characters.Clear(); //Añadimos en characters los jugadores (humanos y bots) en las primeras posiciones y los sospechosos al final for (int i = 0; i < names.Length; i++) { if (i < numPlayers) { if(i < humanPlayers)characters.Add(new Player(fichaPrefab, libretas[i], i)); else if(i == humanPlayers) characters.Add(new Bot1(fichaPrefab, libretas[i], i)); else characters.Add(new Bot2(fichaPrefab, libretas[i], i)); turnos.Add(names[i]); } else characters.Add(new Suspect(fichaPrefab, i)); } this.rows = rows; this.columns = columns; this.roomLength = roomLength; // Se crea el puzle internamente (matriz logica) puzzle = new CluedoPuzzle(rows, columns, roomLength); // Se inicializa todo el tablero de casillas (representacion visual a partir de la matriz logica) tablero.Initialize(puzzle); //Se reinicia el juego GameOver = false; initCards(); // inicializa los distintos tipos de cartas // se elige un arma, un sospechoso y una estancia sospechosoCrimen = names[chooseCardFromType(ref namesAux) + numPlayers]; armaCrimen = weapons[chooseCardFromType(ref weaponsAux)]; estanciaCrimen = estancias[chooseCardFromType(ref estanciasAux)]; // repartimos las cartas sobrantes entre los jugadores dealCards(); turn = 0; // GUI disableGUI(); AcusarPanel.SetActive(false); CleanInfo(); UpdateInfo(); }
// genera las casillas del tipo que le indique puzzle (matriz logica de tipos de estancia) private void GenerateCasillas(CluedoPuzzle puzzle) { var rows = casillas.GetLength(0); var columns = casillas.GetLength(1); for (int r = 0; r < rows; r++) { for (int c = 0; c < columns; c++) { Casilla casilla = casillas[r, c]; if (casilla == null) { casilla = Instantiate(casillaPrefab, new Vector3(-((casillas.GetLength(1) / 2.0f) * POSITION_FACTOR_C - (POSITION_FACTOR_C / 2.0f)) + c * POSITION_FACTOR_C, 0, (casillas.GetLength(0) / 2.0f) * POSITION_FACTOR_R - (POSITION_FACTOR_R / 2.0f) - r * POSITION_FACTOR_R), Quaternion.identity); casillas[r, c] = casilla; } casilla.position = new Position(r, c); casilla.Initialize(this, puzzle.GetType(r, c)); } } // para cada ficha del gm le establecemos la posicion fisica que corresponda for (int i = 0; i < gm.characters.Count; i++) { Vector3 position = casillas[gm.characters[i].ficha_.position.GetRow(), gm.characters[i].ficha_.position.GetColumn()].transform.position; gm.characters[i].ficha_.setPosition(position); if (i < gm.numPlayers) { casillas[gm.characters[i].ficha_.position.GetRow(), gm.characters[i].ficha_.position.GetColumn()].tienePlayer = true; } else { casillas[gm.characters[i].ficha_.position.GetRow(), gm.characters[i].ficha_.position.GetColumn()].tieneSuspect = true; } } }
public void Initialize(CluedoPuzzle puzzle) { gm = GameManager.instance; if (casillas == null) { casillas = new Casilla[puzzle.rows, puzzle.columns]; transform.localScale = new Vector3(SCALE_FACTOR_C * casillas.GetLength(1), transform.localScale.y, SCALE_FACTOR_R * casillas.GetLength(0)); } else if (casillas.GetLength(0) != puzzle.rows || casillas.GetLength(1) != puzzle.columns) { DestroyCasillas(); casillas = new Casilla[puzzle.rows, puzzle.columns]; transform.localScale = new Vector3(SCALE_FACTOR_C * casillas.GetLength(1), transform.localScale.y, SCALE_FACTOR_R * casillas.GetLength(0)); } GenerateCasillas(puzzle); }