Пример #1
0
 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));
     }
 }
Пример #2
0
        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);
        }