public override void Cleanup() { EditStateService.CanBeginEditChanged -= EditStateServiceOnCanBeginEditChanged; currentState.Leave(); currentState = null; base.Cleanup(); }
/// <summary> /// Use this for initialization /// </summary> void Start () { if(editModeOnStart) { editModeState = EditModeState.Active; Time.timeScale = editModeTimeScale; } else { editModeState = EditModeState.Inactive; Time.timeScale = 1; } pauseCont = gameObject.GetComponent<PauseResourceController>(); }
public override void Setup() { base.Setup(); TargetElement.Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(() => { currentState = new BeginEditState(); currentState.Enter(this); })); EditStateService.CanBeginEditChanged += EditStateServiceOnCanBeginEditChanged; }
public void SetBuildMode(EditModeState state) { if (currentActiveMode != null) { currentActiveMode.Deactivate(); } isAdvancedModeActive = false; currentActiveMode = null; switch (state) { case EditModeState.Inactive: break; case EditModeState.FirstPerson: currentActiveMode = firstPersonMode; if (HUDController.i.builderInWorldMainHud != null) { HUDController.i.builderInWorldMainHud.ActivateFirstPersonModeUI(); HUDController.i.builderInWorldMainHud.SetVisibilityOfCatalog(false); } if (cursorGO != null) { cursorGO.SetActive(true); } break; case EditModeState.GodMode: if (cursorGO != null) { cursorGO.SetActive(false); } currentActiveMode = editorMode; isAdvancedModeActive = true; if (HUDController.i.builderInWorldMainHud != null) { HUDController.i.builderInWorldMainHud.ActivateGodModeUI(); } avatarRenderer?.SetAvatarVisibility(false); break; } currentEditModeState = state; if (currentActiveMode != null) { currentActiveMode.Activate(sceneToEdit); currentActiveMode.SetSnapActive(isSnapActive); builderInWorldEntityHandler.SetActiveMode(currentActiveMode); } }
private void MoveToNextState() { TargetElement.Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, new Action(() => { var fms = UIServiceProvider.GetService <IFocusManagementService>(TargetElement); using (fms.DeferFocusUpdate()) { log.Debug("Moving to next edit state"); EditModeState nextState = currentState.GetNextState(); currentState.Leave(); currentState = nextState; currentState.Enter(this); } })); }
public void SetBuildMode(EditModeState state) { EditModeState previousState = currentEditModeState; if (currentActiveMode != null) { currentActiveMode.Deactivate(); } currentActiveMode = null; switch (state) { case EditModeState.Inactive: break; case EditModeState.FirstPerson: currentActiveMode = firstPersonMode; if (cursorGO != null) { cursorGO.SetActive(true); } break; case EditModeState.GodMode: if (cursorGO != null) { cursorGO.SetActive(false); } currentActiveMode = editorMode; break; } currentEditModeState = state; if (currentActiveMode != null) { currentActiveMode.Activate(sceneToEdit); currentActiveMode.SetSnapActive(isSnapActive); builderInWorldEntityHandler.SetActiveMode(currentActiveMode); } OnChangedEditModeState?.Invoke(previousState, state); }
/// <summary> /// Linear Interpolation Between Edit Modes /// </summary> /// <param name="initial">Initial Value</param> /// <param name="final">Final Value</param> /// <param name="totalTime">Time for Interpolation</param> /// <param name="destState">Edit Mode State to Enter when Complete</param> void LerpToMode(EditModeState destState) { if(destState != EditModeState.Active && destState != EditModeState.Inactive) { Debug.LogError("Error: Calling LerpMode with invalid destination state (" + destState + "). Must call with Active or Inactive."); return; } bool entering = destState == EditModeState.Active; float totalTime = (entering ? enterEditModeTime : exitEditModeTime); float timeScaleInit = (entering ? 1 : editModeTimeScale); float timeScaleFinal = (entering ? editModeTimeScale : 1); float alphaInit = (entering ? editModeInactiveTrailAlpha : editModeActiveTrailAlpha); float alphaFinal = (entering ? editModeActiveTrailAlpha : editModeInactiveTrailAlpha); float timerVal = (totalTime == 0 ? 1 : transitionTimer / totalTime); // Alpha SetTrailAlphas(Mathf.Lerp(alphaInit, alphaFinal, timerVal)); // Time Scale Time.timeScale = Mathf.Lerp(timeScaleInit, timeScaleFinal, timerVal); // Clamping to Final States if (transitionTimer >= totalTime) { Time.timeScale = timeScaleFinal; SetTrailAlphas(alphaFinal); editModeState = destState; transitionTimer = 0; } else { transitionTimer += MyTime.deltaTime; } }
/// <summary> /// Toggle edit mode /// </summary> public void BeginEditModeTransition(bool toEdit) { pauseCont.setResourceDrain(toEdit); // Smooth switching when in transition state. if (transitionTimer > 0) { transitionTimer = 1 - transitionTimer; } else { transitionTimer = 0; } if (toEdit) { pauseCont.Paused(); } editModeState = (toEdit ? EditModeState.Entering : EditModeState.Exiting); }