Ejemplo n.º 1
0
        /// <summary>
        /// 放入世界请求
        /// </summary>
        public void PushWorldRequest(int worldId, int reqId)
        {
            //数据
            WorldWorkData workData = ECSLayerLocate.Info.GetWorldWorkData(worldId);;

            //ECSLayerLocate.Decision.GetWorldWorkData(worldId);
            if (workData == null)
            {
                return;
            }

            //请求
            IWorldRequest pushRequest = GetWorldRequest(reqId);

            if (pushRequest == null)
            {
                //权重置换规则
                bool bTmpSw = CheckCanSwitch(reqId, ref workData.NextReqId, ref workData.CurrReqId, ref workData.ClearReqId, true);
                if (!bTmpSw)
                {
                    return;
                }
                //执行请求
                ECSLayerLocate.Behavior.PushWorldBev(workData);
                return;
            }

            int selfSwId = reqId;
            //请求内部置换
            int rule = pushRequest.SwitchRequest(reqId, ref selfSwId);

            //只需要自身判断
            if (rule == ECSDefinition.RESwithRuleSelf)
            {
                //没有变化
                if (workData.CurrReqId == selfSwId)
                {
                    return;
                }
                workData.ClearReqId = workData.CurrReqId;
                workData.CurrReqId  = selfSwId;

                //执行请求
                ECSLayerLocate.Behavior.PushWorldBev(workData);
                return;
            }

            //权重置换规则
            bool bSw = CheckCanSwitch(reqId, ref workData.NextReqId, ref workData.CurrReqId, ref workData.ClearReqId, false);

            if (!bSw)
            {
                return;
            }
            //执行请求
            ECSLayerLocate.Behavior.PushWorldBev(workData);
        }
Ejemplo n.º 2
0
        private void RegAllRequest()
        {
            List <Type> worldRequestTypes  = LCReflect.GetInterfaceByType <IWorldRequest>();
            List <Type> entityRequestTypes = LCReflect.GetInterfaceByType <IEntityRequest>();

            if (worldRequestTypes == null && entityRequestTypes == null)
            {
                return;
            }

            //世界请求
            foreach (Type type in worldRequestTypes)
            {
                WorldRequestAttribute attr = LCReflect.GetTypeAttr <WorldRequestAttribute>(type);
                if (attr == null)
                {
                    ECSLocate.ECSLog.Log("有请求没有加特性 走权重 >>>>>>", type.Name);
                    return;
                }

                IWorldRequest request = LCReflect.CreateInstanceByType <IWorldRequest>(type.FullName);
                WorldRequestDict.Add((int)attr.ReqId, request);
            }

            //实体请求
            foreach (Type type in entityRequestTypes)
            {
                EntityRequestAttribute attr = LCReflect.GetTypeAttr <EntityRequestAttribute>(type);
                if (attr == null)
                {
                    ECSLocate.ECSLog.Log("有请求没有加特性 走权重 >>>>>>", type.Name);
                    return;
                }

                IEntityRequest request = LCReflect.CreateInstanceByType <IEntityRequest>(type.FullName);
                EntityRequestDict.Add((int)attr.ReqId, request);
            }
        }