void Update() { bool menuIsActive = false; bool menuIsClosing = false; foreach (GameObject menu in _menus) { MenuBehavior menuBehavior = menu.GetComponent(typeof(MenuBehavior)) as MenuBehavior; if (menuBehavior.currentState == MenuBehavior.MenuState.ACTIVE || menuBehavior.currentState == MenuBehavior.MenuState.ACTIVATING) { menuIsActive = true; _activeMenu = menu; } else if (menuBehavior.currentState == MenuBehavior.MenuState.DEACTIVATION || menuBehavior.currentState == MenuBehavior.MenuState.SELECTION) { menuIsClosing = true; } } switch (_currentState) { case MoverState.FADING_IN: _fadePushPercent = Mathf.Clamp((Time.time - _fadeStartTime) / (_fadeInTime * _fadeStartPercent), 0.0f, 1.0f); foreach (GameObject menuRoot in _menuRoots) { GameObject menu = null; MenuBehavior menuRootBehavior = null; foreach (Transform child in menuRoot.transform) { if (child.name == "Menu") { menu = child.gameObject; menuRootBehavior = menu.GetComponent(typeof(MenuBehavior)) as MenuBehavior; } } if (menu != _activeMenu) { Vector3 awayVector = new Vector3(menuRoot.transform.position.x - _activeMenu.transform.position.x, menuRoot.transform.position.y - _activeMenu.transform.position.y, 0).normalized *_fadeCurve.Evaluate(1 - _fadePushPercent) * _fadeThrowDistance; if (menuRootBehavior != null) { menuRoot.transform.position = menuRootBehavior.baseLocation + awayVector; menuRootBehavior.setOpacity(_fadePushPercent); } } } if (Time.time > _fadeStartTime + (_fadeInTime * _fadeStartPercent)) { _currentState = MoverState.PASSIVE; foreach (GameObject menu in _menus) { if (menu != _activeMenu) { MenuBehavior menuBehavior = menu.GetComponent(typeof(MenuBehavior)) as MenuBehavior; menuBehavior.currentState = MenuBehavior.MenuState.INACTIVE; } } return; } break; case MoverState.FADING_OUT: _fadePushPercent = Mathf.Clamp((Time.time - _fadeStartTime) / _fadeOutTime, 0.0f, 1.0f); if (!menuIsActive) { _fadeStartTime = Time.time; _fadeStartPercent = _fadePushPercent; _currentState = MoverState.FADING_IN; return; } foreach (GameObject menuRoot in _menuRoots) { GameObject menu = null; MenuBehavior menuRootBehavior = null; foreach (Transform child in menuRoot.transform) { if (child.name == "Menu") { menu = child.gameObject; menuRootBehavior = menu.GetComponent(typeof(MenuBehavior)) as MenuBehavior; } } if (menu != _activeMenu) { Vector3 awayVector = new Vector3(menuRoot.transform.position.x - _activeMenu.transform.position.x, menuRoot.transform.position.y - _activeMenu.transform.position.y, 0).normalized *_fadeCurve.Evaluate(_fadePushPercent) * _fadeThrowDistance; if (menuRootBehavior != null) { menuRoot.transform.position = menuRootBehavior.baseLocation + awayVector; menuRootBehavior.setOpacity(1.0f - _fadePushPercent); } } } break; case MoverState.PASSIVE: if (menuIsActive && !menuIsClosing) { _fadeStartTime = Time.time; _currentState = MoverState.FADING_OUT; foreach (GameObject menu in _menus) { if (menu != _activeMenu) { MenuBehavior menuBehavior = menu.GetComponent(typeof(MenuBehavior)) as MenuBehavior; menuBehavior.currentState = MenuBehavior.MenuState.DISABLED; } } return; } if (_handSweepEnabled) { _throwLocation = Mathf.Clamp(_throwLocation + (ScaleManager._scaleRate * _throwSpeed * Time.deltaTime), 0, 1.0f); foreach (GameObject menuRoot in _menuRoots) { MenuBehavior menuRootBehavior = null; foreach (Transform child in menuRoot.transform) { if (child.name == "Menu") { menuRootBehavior = child.gameObject.GetComponent(typeof(MenuBehavior)) as MenuBehavior; } } Vector3 awayVector = new Vector3(menuRoot.transform.position.x - gameObject.transform.position.x, menuRoot.transform.position.y - gameObject.transform.position.y, 0).normalized *_throwFilter.Evaluate(_throwLocation) * _fullThrowDistance; if (menuRootBehavior != null) { menuRoot.transform.position = menuRootBehavior.baseLocation + awayVector; } } } break; } }