private int RandomizeIndex(int lenghtList) { int index = seed % lenghtList; seed = SeedHelp.EnhanceSeed(seed, index); return(Mathf.Abs(index)); }
public void UseRandomCubes() { this.seed = SeedHelp.CreateSeed(); List <GameObject> allTheCubeLeft = new List <GameObject>(allTheCubes); cubesUsed.Clear(); for (int i = 0; i < numberOfDifferentCubes; i++) { var index = RandomizeIndex(allTheCubeLeft.Count); cubesUsed.Add(allTheCubeLeft[index]); allTheCubeLeft.RemoveAt(index); } }
public void MakeMap(int seedChoosen = -1) { GetComponent <DernierRecours>().DestroyEveryCubes(); compteur = 0; seed = (seedChoosen < 1) ? SeedHelp.CreateSeed() : seedChoosen; // seed = 15364; Debug.LogWarning("Attention, la seed utilisé est la suivante : " + seed); seedWriter.text = "La seed actuelle est : " + seed; UseRandomCubes(); if (cubesUsed.Count != numberOfDifferentCubes) { Debug.LogError("Il y a " + ((cubesUsed.Count < numberOfDifferentCubes) ? "pas assez" : "trop") + " de cubes dans la liste (" + cubesUsed.Count + ")."); return; } indexMax = new Vector2Int(squareLenght - 1, squareLenght - 1); BuildMap(); positionInitialCube = new List <Vector2Int>(); choosenInitialCube = new List <GameObject>(); positionOfPossibilities = new List <Vector2Int>(); for (int i = 0; i < squareLenght; i++) { for (int j = 0; j < squareLenght; j++) { positionOfPossibilities.Add(new Vector2Int(i, j)); } } int possibilitesLeft = 0; List <Vector2Int> possibilityLeftReal = new List <Vector2Int>(positionOfPossibilities); do { for (int g = 0; g < 1; g++) { var index = RandomizeIndex(possibilityLeftReal.Count); //Debug.Log(index + " ; " + positionOfPossibilities.Count); positionInitialCube.Add( possibilityLeftReal[index]); index = RandomizeIndex(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y].Count); choosenInitialCube.Add(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y][index]); //Debug.Log("La position initial est : " + positionInitialCube[positionInitialCube.Count - 1]); //Debug.Log("Le cube de départ choisi est " + choosenInitialCube[choosenInitialCube.Count - 1].name); //if (choosenInitialCube.Count - 1 == 0) //{ // // choosenInitialCube[0].GetComponent<MeshRenderer>().material.color = Color.black; // Debug.Log("Le premier choisi est " + choosenInitialCube[0].name); //} // int remover = 0; var testList = new List <GameObject>(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y]); for (int i = 0; i < testList.Count; i++) { var item = testList[i]; if (item != choosenInitialCube[choosenInitialCube.Count - 1]) { CollapseMap(positionInitialCube[positionInitialCube.Count - 1], positionInitialCube, item); // ++remover; } } possibilitesLeft = 0; possibilityLeftReal.Clear(); for (int i = 0; i < positionOfPossibilities.Count; i++) { if (positionOfPossibilities[i] != Vector2.down) { possibilitesLeft++; possibilityLeftReal.Add(positionOfPossibilities[i]); } } //Debug.Log(possibilitesLeft); } } while (possibilitesLeft > 0); for (int i = 0; i < squareLenght; i++) { for (int j = 0; j < squareLenght; j++) { for (int k = 0; k < mapCubes[i, j].Count; k++) { var pos = mapCubes[i, j][k].transform.position; pos.y = k; mapCubes[i, j][k].transform.position = pos; } } } }
public void MakeMap() { seed = SeedHelp.CreateSeed(); UseRandomCubes(); if (cubesUsed.Count != numberOfDifferentCubes) { Debug.LogError("Il y a " + ((cubesUsed.Count < numberOfDifferentCubes) ? "pas assez" : "trop") + " de cubes dans la liste (" + cubesUsed.Count + ")."); return; } indexMax = new Vector2Int(squareLenght - 1, squareLenght - 1); BuildMap(); positionInitialCube = new List <Vector2Int>(); choosenInitialCube = new List <GameObject>(); positionOfPossibilities = new List <Vector2Int>(); for (int i = 0; i < squareLenght; i++) { for (int j = 0; j < squareLenght; j++) { positionOfPossibilities.Add(new Vector2Int(i, j)); } } var index = RandomizeIndex(positionOfPossibilities.Count); //Debug.Log(index + " ; " + positionOfPossibilities.Count); positionInitialCube.Add( positionOfPossibilities[index]); index = RandomizeIndex(cubesUsed.Count); choosenInitialCube.Add(cubesUsed[index]); for (int i = 0; i < squareLenght; i++) { for (int j = 0; j < squareLenght; j++) { mapCubes[i, j] = new List <GameObject>(cubesUsed); } } Research: //Debug.Log(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y][0].name); //foreach (var item in (mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y])) for (int i = 0; i < mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y].Count; i++) { var item = mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y][i]; if (item != choosenInitialCube[choosenInitialCube.Count - 1]) { CollapseMap(positionInitialCube[positionInitialCube.Count - 1], new List <Vector2>(0), item); } } int possibilitesLeft = 0; List <Vector2Int> possibilityLeftReal = new List <Vector2Int>(); for (int i = 0; i < positionOfPossibilities.Count; i++) { if (positionOfPossibilities[i] != Vector2.down) { possibilitesLeft++; possibilityLeftReal.Add(positionOfPossibilities[i]); } } if (possibilitesLeft > 0) { index = RandomizeIndex(possibilitesLeft); positionInitialCube.Add(possibilityLeftReal[index]); //Debug.Log("Possibility left : " + possibilitesLeft); //Debug.Log("index : " + positionInitialCube[positionInitialCube.Count - 1].x + " , " + positionInitialCube[positionInitialCube.Count - 1].y); index = RandomizeIndex(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y].Count); choosenInitialCube.Add(mapCubes[positionInitialCube[positionInitialCube.Count - 1].x, positionInitialCube[positionInitialCube.Count - 1].y][index]); goto Research; } Positionneur positionneur = GetComponent <Positionneur>(); positionneur.SetListeCube(mapCubes, squareLenght); positionneur.GenerateList(); positionneur.PositionnementCubes(squareLenght); }