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