protected void MoveSubBlocksByStatus(BlockCombinationStatus oldStatus, BlockCombinationStatus newStatus)
    {
        //Vector3 indoorOffset = Vector3.zero;
        //if (newStatus == BlockCombinationStatus.Indoor)
        //{
        //    foreach (var b in allBlocks)
        //    {
        //        if (allBlocks.IndexOf(b) == focusBlockIndex)
        //        {
        //            indoorOffset = -b.combiningPosition;
        //            break;
        //        }

        //    }
        //}

        float lerpSpeed = 8f;

        if (oldStatus == BlockCombinationStatus.Combine && newStatus == BlockCombinationStatus.CombineInsidePreview)
        {
            lerpSpeed = 3f;
        }
        else if (oldStatus == BlockCombinationStatus.CombineInsidePreview && newStatus == BlockCombinationStatus.Combine)
        {
            lerpSpeed = 6f;
        }
        else if (oldStatus == BlockCombinationStatus.CombineInsidePreview && newStatus == BlockCombinationStatus.Divide)
        {
            lerpSpeed = 5f;
        }

        foreach (var b in allBlocks)
        {
            if (b != null)
            {
                if (newStatus != BlockCombinationStatus.FocusOnOneBlock)
                {
                    if (newStatus != BlockCombinationStatus.Indoor)
                    {
                        b.StartMoving(newStatus, lerpSpeed);
                    }
                }
                else
                {
                    b.StartMoving(newStatus, lerpSpeed, null, allBlocks.IndexOf(b) == focusBlockIndex);
                }
            }
        }
    }
Beispiel #2
0
    public void StartMoving(BlockCombinationStatus status, float lerpSpeed = 8f, Vector3?positionOffset = null, bool isCentered = false)
    {
        Vector3 offset = Vector3.zero;

        if (positionOffset != null)
        {
            offset = positionOffset.Value;
        }

        HideDescription();
        switch (status)
        {
        case BlockCombinationStatus.Combine:
            targetPosition = combiningPosition;
            break;

        case BlockCombinationStatus.CombineInsidePreview:
            targetPosition = combineInsideViewPosition;
            break;

        case BlockCombinationStatus.Divide:
            targetPosition = dividingPosition;
            break;

        case BlockCombinationStatus.FocusOnOneBlock:
            if (isCentered)
            {
                targetPosition = focusedPosition;
                ShowDescription();
            }
            else
            {
                Vector3 diff = block.transform.localPosition - focusedPosition;
                diff           = diff.normalized * 300f;
                targetPosition = focusedPosition + diff;
            }
            break;

        case BlockCombinationStatus.Indoor:
            targetPosition = combiningPosition;
            break;

        default:
            break;
        }
        this.lerpSpeed  = lerpSpeed;
        targetPosition += offset;
        isMoving        = true;
    }
    public void ExitSpecialScene()
    {
        if (!currentSpecialScene)
        {
            return;
        }

        currentSpecialScene.OnExitSpecialScene();
        status = statusBeforeSpecialScene;
        currentSpecialScene = null;
        CameraCharacter.Singleton.PopView(true);

        if (currentHoldingPanorama != null && !currentHoldingPanorama.bundleDownloaded)
        {
            currentHoldingPanorama.DownloadAssetBundle();
        }
    }
    public void EnterSpecialScene(string sceneName)
    {
        if (currentSpecialScene != null)
        {
            return;
        }

        foreach (var s in allSpecialScenes)
        {
            if (s == null)
            {
                continue;
            }
            if (s.specialSceneName == sceneName)
            {
                currentSpecialScene = s;
                break;
            }
        }

        if (currentSpecialScene == null)
        {
            return;
        }
        var ret = new CameraCharacter.ViewParameters();

        ret.viewMode        = currentSpecialScene.sceneViewMode;
        ret.viewContentType = currentSpecialScene.sceneViewContentType;
        ret.cameraZOffset   = 0f;
        ret.initialPosition = currentSpecialScene.sceneViewCenter.position;
        ret.initialRotation = currentSpecialScene.sceneViewCenter.rotation;
        ret.forceFading     = true;

        if (currentSpecialScene.sceneViewContentType == ViewContentType.PanoramaView && currentSpecialScene.viewContentDelegation != null)
        {
            currentSpecialScene.viewContentDelegation.DownloadAssetBundle();
            ret.FadeInFlag = currentSpecialScene.viewContentDelegation.PanoramaContentReady;
        }

        statusBeforeSpecialScene = status;
        status = BlockCombinationStatus.SpecialScene;
        CameraCharacter.Singleton.PushView(ret, true);
        currentSpecialScene.OnEnterSpecialScene();
    }
    void ProcessForBackCommand()
    {
        if (commandQueue.Count == 0 || IsTransforming)
        {
            return;
        }
        var oldStatus = status;
        var command   = commandQueue.Dequeue();

        currentHoldingPanorama = command.panoramaBlock;
        if (command.isForwardCommand)
        {
            switch (status)
            {
            case BlockCombinationStatus.None:
                status = BlockCombinationStatus.Combine;
                break;

            case BlockCombinationStatus.Combine:
                if (CameraCharacter.Singleton.GameModeC == GameMode.GuideMode)
                {
                    backButton.SetActive(true);
                }
                GlobalEventManager.SendEvent(GlobalEventManager.RoofRemoved);
                status = BlockCombinationStatus.CombineInsidePreview;
                break;

            case BlockCombinationStatus.CombineInsidePreview:
                status = BlockCombinationStatus.Divide;
                GlobalEventManager.SendEvent(GlobalEventManager.BlockDivide);
                break;

            case BlockCombinationStatus.Divide:
                status = BlockCombinationStatus.FocusOnOneBlock;
                break;

            case BlockCombinationStatus.FocusOnOneBlock:
                status = BlockCombinationStatus.Indoor;
                break;

            case BlockCombinationStatus.Indoor:
                return;

            case BlockCombinationStatus.SpecialScene:
                return;

            default:
                break;
            }
            MoveSubBlocksByStatus(oldStatus, status);
            CameraCharacter.Singleton.PushView(GenerateViewParameterByStatus(command.position, command.rotation, command.panoramaBlock));
            if (command.panoramaBlock)
            {
                command.panoramaBlock.DownloadAssetBundle();
            }
        }
        else
        {
            switch (status)
            {
            case BlockCombinationStatus.Combine:
                if (CameraCharacter.Singleton.GameModeC == GameMode.FreeMode)
                {
                    GlobalEventManager.SendEvent("ShowModeSelecting");
                }
                break;

            case BlockCombinationStatus.CombineInsidePreview:
                GlobalEventManager.SendEvent(GlobalEventManager.BlockCombine);
                if (CameraCharacter.Singleton.GameModeC == GameMode.GuideMode)
                {
                    backButton.SetActive(false);
                }
                status = BlockCombinationStatus.Combine;
                break;

            case BlockCombinationStatus.Divide:
                status = BlockCombinationStatus.CombineInsidePreview;
                break;

            case BlockCombinationStatus.FocusOnOneBlock:
                GlobalEventManager.SendEvent(GlobalEventManager.BlockDivide);
                status = BlockCombinationStatus.Divide;
                break;

            case BlockCombinationStatus.Indoor:
                status = BlockCombinationStatus.FocusOnOneBlock;
                break;

            case BlockCombinationStatus.SpecialScene:
                return;

            default:
                break;
            }
            MoveSubBlocksByStatus(oldStatus, status);
            CameraCharacter.Singleton.PopView();
            if (command.panoramaBlock)
            {
                command.panoramaBlock.DownloadAssetBundle();
            }
        }
    }