예제 #1
0
        private Tweener DoBlockTween(Block block, RotateTweenParam param)
        {
            Debug.Log(string.Format("{0}: x = {1}, xEase = {2}, y = {3}, yEase = {4}",
                                    block, param.x, param.xEase, param.y, param.yEase));
            Tweener tweener = null;

            if (param.x != 0)
            {
                tweener = block.transform.DOLocalMoveX(Block.BLOCK_SIZE * param.x, tweenDuration)
                          .SetRelative(true).SetEase(param.xEase);
            }
            if (param.y != 0)
            {
                tweener = block.transform.DOLocalMoveY(Block.BLOCK_SIZE * param.y, tweenDuration)
                          .SetRelative(true).SetEase(param.yEase);
            }
            return(tweener);
        }
예제 #2
0
        private void CheckRotate()
        {
            if (!InputManager.Instance.RotateClick ||
                m_Tweener != null ||
                InputManager.Instance.DownPress)
            {
                return;
            }

            RotateTweenParam slaveParam  = null;
            RotateTweenParam masterParam = null;

            // 贴左边界,从下往左旋转的情况
            switch (RotateType)
            {
            case ERotateType.Up:
                if (CanHorizontalMove(false))
                {
                    slaveParam = new RotateTweenParam()
                    {
                        x     = 1,
                        y     = -1,
                        xEase = OUT_EASE_TYPE,
                        yEase = IN_EASE_TYPE
                    };
                }
                else if (CanHorizontalMove(true))
                {
                    slaveParam = new RotateTweenParam()
                    {
                        x     = 0,
                        y     = -1,
                        yEase = OUT_EASE_TYPE
                    };
                    masterParam = new RotateTweenParam()
                    {
                        x     = -1,
                        y     = 0,
                        xEase = OUT_EASE_TYPE
                    };
                }

                break;

            case ERotateType.Right:
                Vector2 blockPos = GetMapPosition(MasterBlock);
                Vector2 testPos1 = new Vector2(blockPos.x, blockPos.y - Block.BLOCK_SIZE);
                Vector2 testPos2 = new Vector2(blockPos.x + Block.BLOCK_SIZE, blockPos.y - Block.BLOCK_SIZE);
                if (TestPositionValid(testPos1) && TestPositionValid(testPos2))
                {
                    slaveParam = new RotateTweenParam()
                    {
                        x     = -1,
                        y     = -1,
                        xEase = IN_EASE_TYPE,
                        yEase = OUT_EASE_TYPE
                    };
                }
                else
                {
                    slaveParam = new RotateTweenParam()
                    {
                        x     = -1,
                        y     = 0,
                        xEase = OUT_EASE_TYPE
                    };
                    masterParam = new RotateTweenParam()
                    {
                        x     = 0,
                        y     = 1,
                        yEase = OUT_EASE_TYPE
                    };
                }

                break;

            case ERotateType.Down:
                if (CanHorizontalMove(true))
                {
                    slaveParam = new RotateTweenParam()
                    {
                        x     = -1,
                        y     = 1,
                        xEase = OUT_EASE_TYPE,
                        yEase = IN_EASE_TYPE
                    };
                }
                else if (CanHorizontalMove(false))
                {
                    slaveParam = new RotateTweenParam()
                    {
                        x     = 0,
                        y     = 1,
                        yEase = OUT_EASE_TYPE
                    };
                    masterParam = new RotateTweenParam()
                    {
                        x     = 1,
                        y     = 0,
                        xEase = OUT_EASE_TYPE
                    };
                }

                break;

            case ERotateType.Left:
                slaveParam = new RotateTweenParam()
                {
                    x     = 1,
                    y     = 1,
                    xEase = IN_EASE_TYPE,
                    yEase = OUT_EASE_TYPE
                };
                break;
            }

            if (slaveParam != null)
            {
                m_Tweener = DoBlockTween(SlaveBlock, slaveParam);
            }
            if (masterParam != null)
            {
                m_Tweener = DoBlockTween(MasterBlock, masterParam);
            }

            if (m_Tweener != null)
            {
                m_Tweener.OnComplete(OnRotateTweenCompleted);
            }

            if (slaveParam != null || masterParam != null)
            {
                RotateType = (ERotateType)(((int)RotateType + 1) % 4);
            }
        }