コード例 #1
0
        //        public static bool AddVisitorToLittleZooApply(
//            EntityVisitor entity, bool isFirstApply, Dictionary<int, LittleZoo> littleZooMap,
//            ref int groupID, ref int littleZooID, ref bool isCrossGroup, List<int> openedLittleZooIDs,
//            List<int> freeLittleZooIDs, List<int> wouldGotoLittleZooIDs,
//            List<int> wouldGotoWeights, List<int> crossGroupIDs)
//        {
//            bool applyResult = false;
//            int nextGroupID = Const.Invalid_Int;
//            if (isFirstApply)
//            {
//                groupID = GlobalDataManager.GetInstance().logicTableGroup.sortedGroupID[0];
//                if (!crossGroupIDs.Contains(groupID))
//                {
//                    crossGroupIDs.Add(groupID);
//                }
//            }

//            //判定goto概率
//            applyResult = WouldGotoGroupByGotoweight(groupID);
//            if (!applyResult)
//            {
//                return applyResult;
//            }

//            //获得这组开放的动物栏
//            applyResult = GetOpenedLittleZooIDs(groupID, openedLittleZooIDs);
//            if (!applyResult)
//            {
//                return applyResult;
//            }

//            applyResult = GetFreeLittleZooIDs(openedLittleZooIDs, littleZooMap, freeLittleZooIDs);
//            if (!applyResult)
//            {
//                applyResult = GlobalDataManager.GetInstance().logicTableGroup.GetNextGroupID(groupID, ref nextGroupID);
//                isCrossGroup = true;
//                groupID = nextGroupID;

//                if (!applyResult)
//                {
//                    return applyResult;
//                }

//                if (!crossGroupIDs.Contains(groupID))
//                {
//                    crossGroupIDs.Add(groupID);
//                }

//                if (!crossGroupIDs.Contains(nextGroupID))
//                {
//                    crossGroupIDs.Add(nextGroupID);
//                }

//                return AddVisitorToLittleZooApply(entity, false, littleZooMap, ref groupID,
//                    ref littleZooID, ref isCrossGroup, openedLittleZooIDs, freeLittleZooIDs, wouldGotoLittleZooIDs,
//                    wouldGotoWeights, crossGroupIDs);
//            }

//            //从有空位的中筛选出没有浏览过的
//            applyResult = GetWouldGotoLittleZooIDs(entity, groupID, freeLittleZooIDs, wouldGotoLittleZooIDs);
//            if (!applyResult)
//            {
//                applyResult = GlobalDataManager.GetInstance().logicTableGroup.GetNextGroupID(groupID, ref nextGroupID);
//                isCrossGroup = true;
//                groupID = nextGroupID;

//                if (!applyResult)
//                {
//                    return applyResult;
//                }

//                if (!crossGroupIDs.Contains(groupID))
//                {
//                    crossGroupIDs.Add(groupID);
//                }

//                if (!crossGroupIDs.Contains(nextGroupID))
//                {
//                    crossGroupIDs.Add(nextGroupID);
//                }

//                return AddVisitorToLittleZooApply(entity, false, littleZooMap, ref groupID,
//                    ref littleZooID, ref isCrossGroup, openedLittleZooIDs, freeLittleZooIDs, wouldGotoLittleZooIDs,
//                    wouldGotoWeights, crossGroupIDs);
//            }

//            applyResult = GetWouldGotoWeights(groupID, wouldGotoLittleZooIDs, wouldGotoWeights);
//#if UNITY_EDITOR
//            if (!applyResult)
//            {
//                string e = string.Format("{0} GetWouldGotoWeights 异常", entity.entityID);
//                throw new System.Exception(e);
//            }
//#endif
//            int idx = Const.Invalid_Int;
//            Math_F.TableProbability(wouldGotoWeights, ref idx);

//            littleZooID = wouldGotoLittleZooIDs[idx];
//            DebugFile.GetInstance().WriteKeyFile(entity.entityID, "{0} TableProbability group={1}, nextgroup={2} littlezoo={3}",
//                entity.entityID, groupID, nextGroupID, littleZooID);
//            return true;
//        }

        /// <summary>
        /// 从空闲列表中剔除浏览过的
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="groupID"></param>
        /// <param name="freeLittleZooIDs"></param>
        /// <param name="wouldGotoLittleZooIDs"></param>
        /// <returns></returns>
        public static bool GetWouldGotoLittleZooIDs(EntityVisitor entity, int groupID, List <int> freeLittleZooIDs, List <int> wouldGotoLittleZooIDs)
        {
            wouldGotoLittleZooIDs.Clear();

            var visitedLittleZooIDs = EntityVisitor.GetVisitedLittleZooIDs(entity, groupID);
            int freeLittleZooID     = Const.Invalid_Int;

            for (int i = 0; i < freeLittleZooIDs.Count; i++)
            {
                freeLittleZooID = freeLittleZooIDs[i];
                if (visitedLittleZooIDs == null ||
                    visitedLittleZooIDs.Count == 0 ||
                    visitedLittleZooIDs.IndexOf(freeLittleZooID) < 0)
                {
                    //没有浏览过
                    wouldGotoLittleZooIDs.Add(freeLittleZooID);
                }
            }

            return(wouldGotoLittleZooIDs.Count > 0);
        }