Beispiel #1
0
        private void OnComponentLoaded(ILegoUI legoui)
        {
            legoui.SetParentUi(LocUI);
            ILegoComponent component = (ILegoComponent)legoui;

            if (componentMeta == null)
            {
                var bigId   = legoui.UIRect.name;
                var lowerId = "";//YuBigAssetIdMap.GetLowerId(bigId);
                var uiMeta  = metaHelper.GetMeta(lowerId);
                componentMeta = uiMeta;
            }
            component.ScrollViewId = components.Count; // 设置组件的滚动列表子项索引
            UpdateComponentAtInit(component);
            components.AddLast(component);
            DrawComponent(component);
            UpdateMaxIndexOffset();
            UpadteContentSize();

            // 调用外部委托
            onComponentBuilded?.Invoke(component);

            if (requestTaskCount > 0)
            {
                if (--requestTaskCount == 0)
                {
                    onReplaceComponents?.Invoke(components);
                    RxModelReplaceComplished();
                }
            }
        }
        public void Init(RectTransform tUi, int speed, Action <RectTransform> pushTaskAction,
                         YuLegoUnloadTask parentTask)
        {
            taskRect = tUi;
            var uiTypeId = GetUiTypeId();

            taskMeta         = metaHelper.GetMeta(uiTypeId);
            unloadSpeed      = speed;
            m_PushTaskAction = pushTaskAction;
            _parentTask      = parentTask;
            willUnloadCount  = taskMeta.WillUnloadCount;
            sonComponentNum  = taskMeta.ComponentRefs.Count;
            sonContainerNum  = taskMeta.ContainerRefs.Count;
            _executeAble     = true;

            string GetUiTypeId()
            {
                if (!tUi.name.Contains("@"))
                {
                    return(tUi.name);
                }

                var finalId = tUi.name.Split('@').First();

                return(finalId);
            }
        }
Beispiel #3
0
        /// <summary>
        /// 加载 View
        /// </summary>
        /// <param name="id"></param>
        /// <param name="callback"></param>
        /// <param name="buildSpeed"></param>
        /// <param name="isInback"></param>
        private void WaitView(string id, Action <ILegoUI> callback, int buildSpeed, bool isInback = false)
        {
            var uiMeta = MetaHelper.GetMeta(id);

            TryHideOther(uiMeta);

            if (views.ContainsKey(id))
            {
                var view = views[id];
                callback?.Invoke(view);
                view.Show();
                return;
            }

            var viewParent = GetViewMountPoint(id);
            var task       = LegoBuilder.CreateTask(id, OnBuilded, viewParent, buildSpeed)
                             .SetParentRect(viewParent)
                             .SetUILoadCallback(callback)
                             .SetBackLoad(isInback);

            waitTasks.Enqueue(task);
        }
Beispiel #4
0
        public void Init(string id,
                         Action <LegoBuildTask> onBuilded,
                         RectTransform parent)
        {
            ParentRect = parent;
            TaskMeta   = metaHelper.GetMeta(id);
            TaskMeta.Reset(); // 每次开始构建都重置元数据
            m_OnBuilded    = onBuilded;
            sonNum         = TaskMeta.ComponentRefs.Count;
            containerNum   = TaskMeta.ContainerRefs.Count;
            willBuildCount = TaskMeta.WillBuildCount;

            CreateRootAtOnce(); // 构建组件根对象
            TryMountAtOnce();
            AddRootButton();    // 添加根按钮
#if DEBUG
            AddHelper();        // 编辑器下添加开发助手组件
#endif

            buildAble = true;
        }
 /// <summary>
 /// 构造一个乐高UI。
 /// </summary>
 /// <param name="locRect">UI所持有的游戏对象根物体。</param>
 /// <param name="pipeHandlers">UI所对应的所有UI生命周期事件处理器。</param>
 /// <param name="sons"></param>
 /// <param name="isInBack"></param>
 public void Construct
 (
     RectTransform locRect,
     List <IYuLegoUIPipelineHandler> pipeHandlers,
     List <ILegoUI> sons = null,
     bool isInBack       = false
 )
 {
     UIRect         = locRect;
     isInBackground = isInBack;
     selfMeta       = metaHelper.GetMeta(UIRect);
     TryAddCanvasGroup();
     TryAddAllSonComponent(sons);
     InitPipelineHandlers(pipeHandlers); // 生命周期处理器
     InitExternalPipeline();             // 外部生命周期
     controlStorage = LegoControlStorage.StoragePool.Take();
     GetOperateControl();
     TryAddRootButton();
     RegisterHandler();
     RegisterHandlerExtend();
     OnCreated();
 }