コード例 #1
0
ファイル: LC_UIManager.cs プロジェクト: LacusCon/ILHotFix
//        public void OpenWithDefault(List<GameObject> uiList, UIAction action = UIAction.RightSlip)
//        {
//            var layerInfo = new UILayerInfo {haveAlpha = true};
//            foreach (var ui in uiList)
//            {
//                layerInfo.elements.Add(ui, action);
//            }
//
//            OpenUILayer(layerInfo);
//        }

        public void OpenUILayer(UILayerInfo info, bool show = true)
        {
            foreach (var item in info.elements)
            {
                var obj = item.Key;
                obj.SetActive(show);
                var key = obj.GetInstanceID();
                if (UiDefaultPosDict.ContainsKey(key))
                {
                    continue;
                }
                var cur      = new UIInfo();
                var renderer = obj.GetComponentInChildren <Renderer>();
                if (renderer != null)
                {
                    cur.renderQueue = renderer.material.renderQueue;
                }

                cur.defaultPos = obj.transform.localPosition;
                UiDefaultPosDict.Add(key, cur);
            }

            if (!info.haveAlpha)
            {
                SetTopUI(false);
            }
            else if (info.pedalTf)
            {
                SetCover(true, info.pedalTf);
            }

            if (show)
            {
                Performance(info, true);
            }
            UILayerList.Add(info);
            AlterLayer?.Invoke(UILayerList.Count);
        }
コード例 #2
0
ファイル: LC_UIManager.cs プロジェクト: LacusCon/ILHotFix
        private static void Performance(UILayerInfo info, bool isPositive)
        {
            foreach (var element in info.elements)
            {
                var obj = element.Key;
                obj.SetActive(true);
                var tf            = obj.transform;
                var rectTransform = tf.GetComponent <RectTransform>();
                if (rectTransform == null)
                {
                    continue;
                }

                var relativePos = Vector3.zero;
                var defaultPos  = Vector3.zero;
                if (UiDefaultPosDict.ContainsKey(obj.GetInstanceID()))
                {
                    defaultPos = UiDefaultPosDict[obj.GetInstanceID()].defaultPos;
                }
                else
                {
                    Debug.LogError($"!!!!! Performance: PosDict not contained: {obj.name} !!!!!");
                    return;
                }

                var srcPos  = defaultPos;
                var destPos = defaultPos;
                switch (element.Value)
                {
                case UIAction.None:
                    obj.SetActive(isPositive);
                    continue;

                case UIAction.LeftSlip:
                    relativePos = new Vector3(srcPos.x - rectTransform.rect.width, srcPos.y, srcPos.z);
                    break;

                case UIAction.RightSlip:
                    relativePos = new Vector3(srcPos.x + rectTransform.rect.width, srcPos.y, srcPos.z);
                    break;

                case UIAction.TopSlip:
                    relativePos = new Vector3(srcPos.x, srcPos.y + rectTransform.rect.height, srcPos.z);
                    break;

                case UIAction.BottomSlip:
                    relativePos = new Vector3(srcPos.x, srcPos.y - rectTransform.rect.height, srcPos.z);
                    break;

                case UIAction.Pop:
                    if (isPositive)
                    {
                        obj.transform.DOPunchScale(new Vector3(0.1f, 0.1f, 0), 0.3f, 1);
                    }
                    else
                    {
                        obj.SetActive(false);
                    }

                    continue;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                var duration = ActionDuration;
                if (isPositive)
                {
                    tf.localPosition = relativePos;
                }
                else
                {
                    duration = ActionDuration - 0.2f;
                    destPos  = relativePos;
                }

                obj.transform.DOLocalMove(destPos, duration).SetEase(Ease.OutBack).OnComplete(() => { obj.SetActive(isPositive); });
//                obj.transform.DOLocalJump(destPos, 0.3f, 1, duration).SetEase(Ease.OutBack).OnComplete(() => { obj.SetActive(isPositive); });
            }
        }