public void CreatePawn(PlaceType.Terrain terrainType, Vector3 position, Quaternion rotation, NodeConnections connections) { for (int i = 0; i < pawnPrefabs.Count; ++i) { if (pawnPrefabs[i].name == terrainType.ToString() + " PION") { var pawn = Instantiate(pawnPrefabs[i], position, rotation) as GameObject; return; } } print("Failed to find pawn terrain type"); }
public void RegenerateMap() { numTerrainUsed.Clear(); for (int i = 1; i < System.Enum.GetNames(typeof(PlaceType.Terrain)).Length; ++i) { numTerrainUsed.Add((PlaceType.Terrain)i, 0); } for (int i = 0; i < pawns.Length; ++i) { if (pawns[i].GetComponent <PlaceType>().placeType == PlaceType.Place.TERRAIN) { int randTerrainInt = Random.Range(1, System.Enum.GetNames(typeof(PlaceType.Terrain)).Length + 1); while (!numTerrainUsed.ContainsKey((PlaceType.Terrain)randTerrainInt) && numTerrainUsed.Count > 0) { randTerrainInt = Random.Range(1, System.Enum.GetNames(typeof(PlaceType.Terrain)).Length + 1); } PlaceType.Terrain terrainType = (PlaceType.Terrain)randTerrainInt; if (numTerrainUsed[terrainType] < 3) { numTerrainUsed[terrainType] += 1; } else { numTerrainUsed.Remove(terrainType); } //If we place more than we should allow if (numTerrainUsed.Count == 0) { for (int j = 1; j <= System.Enum.GetNames(typeof(PlaceType.Terrain)).Length; ++j) { numTerrainUsed.Add((PlaceType.Terrain)j, 0); } print("Too many terrain pawns. Refilling usbale pawns."); } for (int j = 0; j < pawnPrefabs.Count; ++j) { if (pawnPrefabs[j].name == terrainType.ToString() + " PION") { List <GameObject> preserveNodeConnections = pawns[i].GetComponent <NodeConnections>().neighbourNodes; int preserveId = pawns[i].GetComponent <Id>().id; var newPawn = Instantiate(pawnPrefabs[j], pawns[i].transform.position, pawns[i].transform.rotation); //Remove Terrain pawn from all it's neighbours. for (int k = 0; k < preserveNodeConnections.Count; ++k) { preserveNodeConnections[k].GetComponent <NodeConnections>().RemoveNeighbour(pawns[i]); } Destroy(pawns[i]); pawns[i] = newPawn; pawns[i].GetComponent <Id>().id = preserveId; //Read all neighbours to the new pawn. for (int k = 0; k < preserveNodeConnections.Count; ++k) { pawns[i].GetComponent <NodeConnections>().AddNeighbour(preserveNodeConnections[k]); } } } } if (pawns[i].GetComponent <OnClick>().visited) { pawns[i].GetComponent <OnClick>().visited = false; } if (pawns[i].GetComponent <PlaceType>().placeType == PlaceType.Place.DEPART) { NodeConnections.activeNode = pawns[i]; } } }
private void Awake() { //Assign terrain at runtime pawns = GameObject.FindGameObjectsWithTag("MapNode"); for (int i = 1; i < System.Enum.GetNames(typeof(PlaceType.Terrain)).Length; ++i) { numTerrainUsed.Add((PlaceType.Terrain)i, 0); } for (int i = 0; i < pawns.Length; ++i) { if (pawns[i].GetComponent <PlaceType>().placeType == PlaceType.Place.TERRAIN && pawns[i].GetComponent <PlaceType>().terrainType == PlaceType.Terrain.NULL) { int randTerrainInt = Random.Range(1, System.Enum.GetNames(typeof(PlaceType.Terrain)).Length + 1); //TODO is this what's causing long compile time? while (!numTerrainUsed.ContainsKey((PlaceType.Terrain)randTerrainInt) && numTerrainUsed.Count > 0) { randTerrainInt = Random.Range(1, System.Enum.GetNames(typeof(PlaceType.Terrain)).Length + 1); } PlaceType.Terrain terrainType = (PlaceType.Terrain)randTerrainInt; if (numTerrainUsed[terrainType] < 3) { numTerrainUsed[terrainType] += 1; } else { numTerrainUsed.Remove(terrainType); } //If we place more than we should allow if (numTerrainUsed.Count == 0) { for (int j = 1; j <= System.Enum.GetNames(typeof(PlaceType.Terrain)).Length; ++j) { numTerrainUsed.Add((PlaceType.Terrain)j, 0); } print("Too many terrain pawns. Refilling usable pawns."); } for (int j = 0; j < pawnPrefabs.Count; ++j) { if (pawnPrefabs[j].name == terrainType.ToString() + " PION") { List <GameObject> preserveNodeConnections = pawns[i].GetComponent <NodeConnections>().neighbourNodes; int preserveId = pawns[i].GetComponent <Id>().id; var newPawn = Instantiate(pawnPrefabs[j], pawns[i].transform.position, pawns[i].transform.rotation); //Remove Terrain pawn from all it's neighbours. for (int k = 0; k < preserveNodeConnections.Count; ++k) { preserveNodeConnections[k].GetComponent <NodeConnections>().RemoveNeighbour(pawns[i]); } Destroy(pawns[i]); pawns[i] = newPawn; pawns[i].GetComponent <Id>().id = preserveId; //Read all neighbours to the new pawn. for (int k = 0; k < preserveNodeConnections.Count; ++k) { pawns[i].GetComponent <NodeConnections>().AddNeighbour(preserveNodeConnections[k]); } } } } } }