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); } }
/// <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); }
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(); }