/// <summary> /// 获取对象实例 /// </summary> private void CreateInstance(GameObject prefab, ItemInfoBase trigger) { if (_cansaleKeys.Contains(trigger.assetName)) { _cansaleKeys.Remove(trigger.assetName); return; } if (prefab == null || trigger == null) { return; } GameObject go = GameObject.Instantiate(prefab); go.SetActive(true); SetTranform(go, trigger.parentLayer, _root); //SetParent(trigger.parentLayer, go.transform/*, trigger.rematrix*/); //if (trigger.rematrix) //{ // go.transform.position = Vector3.zero; // go.transform.localRotation = Quaternion.identity; //} if (trigger.OnCreate != null) { trigger.OnCreate(go); } }
private void RegisterEnableEvents(IUILoadCtrl loadCtrl, ItemInfoBase trigger) { UnityAction onEnableAction = () => { loadCtrl.GetGameObjectInfo(trigger); }; trigger.OnCreate = (x) => { trigger.instence = x; IPanelEnable irm = x.GetComponent <IPanelEnable>(); if (irm != null) { onEnable -= onEnableAction; irm.OnDelete += () => { onEnable += onEnableAction; }; } else { onDisable += () => { if (trigger.instence != null && trigger.instence is GameObject) { Destroy((GameObject)trigger.instence); } }; } RegisterDestoryAction(trigger.assetName, x); }; onEnable += onEnableAction; }
private void RegisterButtonEvents(IUILoadCtrl loadCtrl, ItemInfoBase trigger) { UnityAction CreateByButton = () => { loadCtrl.GetGameObjectInfo(trigger); }; trigger.button.onClick.AddListener(CreateByButton); onDestroy += () => { trigger.button.onClick.RemoveAllListeners(); }; trigger.OnCreate = (x) => { IPanelButton ib = x.GetComponent <IPanelButton>(); if (ib != null) { ib.Btn = trigger.button; trigger.button.onClick.RemoveListener(CreateByButton); ib.OnDelete += () => { trigger.button.onClick.AddListener(CreateByButton); }; } RegisterDestoryAction(trigger.assetName, x); }; }
private void RegisterBundleEvents(IUILoadCtrl loadCtrl, List <ItemInfoBase> bundles) { for (int i = 0; i < bundles.Count; i++) { ItemInfoBase trigger = bundles[i]; switch (trigger.type) { case UIBundleInfo.Type.Button: RegisterButtonEvents(loadCtrl, trigger); break; case UIBundleInfo.Type.Toggle: RegisterToggleEvents(loadCtrl, trigger); break; case UIBundleInfo.Type.Name: RegisterMessageEvents(loadCtrl, trigger); break; case UIBundleInfo.Type.Enable: RegisterEnableEvents(loadCtrl, trigger); break; default: break; } } }
private void RegisterMessageEvents(IUILoadCtrl loadCtrl, ItemInfoBase trigger) { UnityAction <object> createAction = (x) => { trigger.dataQueue.Enqueue(x);// loadCtrl.GetGameObjectInfo(trigger); }; UnityAction <object> handInfoAction = (data) => { IPanelName irm = trigger.instence.GetComponent <IPanelName>(); irm.HandleData(data); }; trigger.OnCreate = (x) => { IPanelName irm = x.GetComponent <IPanelName>(); if (irm != null) { trigger.instence = x; eventHold.Remove(trigger.assetName, createAction); eventHold.Record(trigger.assetName, handInfoAction); irm.onDelete += () => { trigger.instence = null; eventHold.Remove(trigger.assetName, handInfoAction); eventHold.Record(trigger.assetName, createAction); }; irm.onCallBack += (state) => { InvokeCallBack(trigger.assetName, state); }; while (trigger.dataQueue.Count > 0) { var data = trigger.dataQueue.Dequeue(); irm.HandleData(data); } } RegisterHideAndDestroyAction(trigger.assetName, x); }; eventHold.Record(trigger.assetName, createAction); onDestroy += () => { eventHold.Remove(trigger.assetName, createAction); }; }
private void RegisterToggleEvents(IUILoadCtrl loadCtrl, ItemInfoBase trigger) { UnityAction <bool> CreateByToggle = (x) => { if (x) { trigger.toggle.interactable = false; loadCtrl.GetGameObjectInfo(trigger); } else { Destroy((GameObject)trigger.instence); } }; trigger.toggle.onValueChanged.AddListener(CreateByToggle); onDestroy += () => { trigger.toggle.onValueChanged.RemoveAllListeners(); }; trigger.OnCreate = (x) => { trigger.toggle.interactable = true; trigger.instence = x; IPanelToggle it = x.GetComponent <IPanelToggle>(); if (it != null) { it.toggle = trigger.toggle; trigger.toggle.onValueChanged.RemoveListener(CreateByToggle); it.OnDelete += () => { trigger.toggle.onValueChanged.AddListener(CreateByToggle); }; } RegisterDestoryAction(trigger.assetName, x); }; }
/// <summary> /// 创建对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="assetName"></param> /// <param name="onCreate"></param> public void GetGameObjectInfo(ItemInfoBase itemInfo) { if (_cansaleKeys.Contains(itemInfo.assetName)) { _cansaleKeys.RemoveAll(x => x == itemInfo.assetName); } if (!_loadingKeys.Contains(itemInfo.IDName)) { _loadingKeys.Add(itemInfo.IDName); var bInfo = itemInfo as BundleInfo; var pInfo = itemInfo as PrefabInfo; if (bInfo != null) { GetGameObjectInfo(bInfo); } else if (pInfo != null) { GetGameObjectInfo(pInfo); } } }