public static void Shuffle <T>(this IList <T> list, RandomInt rnd) { for (var i = 0; i < list.Count; i++) { list.Swap(i, rnd.GetValue(i, list.Count)); } }
IEnumerator GenDungen() { m_isFinishGen = false; m_rooms = new List <Room>(); m_doors = new List <Door>(); m_openSet = new List <Connector>(); m_globalVoxels = new HashSet <Vector3>(); m_connectorsPos = new HashSet <Vector3>(); if (m_random == null) { m_random = new RandomInt(); } if (!m_useCustomSeed) { m_seed = Random.Range(0, int.MaxValue); } Debug.Log("seed = " + m_seed); m_random.Init(m_seed); int spawnRoomID = m_random.GetValue(0, m_generatorData.GetSpawnRoomCount(m_activeSetIndex)); m_startRoom = Instantiate(m_generatorData.GetSpawnRoom(m_activeSetIndex, spawnRoomID)); m_startRoom.transform.SetParent(this.transform); m_openSet.Add(m_startRoom.m_connectors[0]); var volume = m_startRoom.GetComponent <Volume>(); volume.CalculateBound(); AddGlobalVoxels(volume); AddConnectorsPos(m_startRoom); //创建房间 while (m_openSet.Count > 0) { Debug.LogFormat("生成第{0}个地宫", m_rooms.Count); yield return(GenerateNextRoom()); if (m_debugRoomGenProcess) { yield return(new WaitForSeconds(1f)); } } //创建门 /* * for (int i = 0; i < m_rooms.Count; i++) * { * var room = m_rooms[i]; * for (int j = 0; j < room.m_connectors.Count; j++) * { * var connector = room.m_connectors[j]; * * if (connector.m_isOpen) { * if (connector.m_doorType != -1) {// -1 为不需要门 * Door d = Instantiate(m_generatorData.GetDoor(m_activeSetIndex, connector.m_doorType)); * m_doors.Add(d); * * connector.m_door = d; * connector.m_shareConnetor.m_door = d; * * d.gameObject.transform.position = connector.transform.position; * d.gameObject.transform.rotation = connector.transform.rotation; * * d.gameObject.transform.SetParent(this.transform); * } * //关闭连接器 * connector.m_isOpen = false; * connector.m_shareConnetor.m_isOpen = false; * } * } * } */ m_isFinishGen = true; Debug.Log("完成地宫的生成,房间数:" + m_rooms.Count); }