private void UpdateMenu (Menu menu) { Vector2 invertedMouse = playerInput.GetInvertedMouse (); UpdateMenuPosition (menu, invertedMouse); menu.HandleTransition (); if (settingsManager) { if (settingsManager.inputMethod == InputMethod.KeyboardOrController && menu.IsEnabled () && ((stateHandler.gameState == GameState.Paused && menu.pauseWhenEnabled) || (stateHandler.gameState == GameState.DialogOptions && menu.appearType == AppearType.DuringConversation))) { playerInput.selected_option = menu.ControlSelected (playerInput.selected_option); } } else { Debug.LogWarning ("A settings manager is not present."); } if (menu.appearType == AppearType.Manual) { if (menu.IsVisible () && !menu.isLocked && menu.GetRect ().Contains (invertedMouse) && !menu.ignoreMouseClicks) { playerInput.mouseOverMenu = true; } } else if (menu.appearType == AppearType.DuringGameplay) { if (stateHandler.gameState == GameState.Normal && !menu.isLocked && menu.IsOff ()) { menu.TurnOn (true); if (menu.GetRect ().Contains (invertedMouse) && !menu.ignoreMouseClicks) { playerInput.mouseOverMenu = true; } } else if (stateHandler.gameState == GameState.Paused) { menu.TurnOff (true); } else if (stateHandler.gameState != GameState.Normal && menu.IsOn () && actionListManager.AreActionListsRunning ()) { menu.TurnOff (true); } } else if (menu.appearType == AppearType.MouseOver) { if (stateHandler.gameState == GameState.Normal && !menu.isLocked && menu.GetRect ().Contains (invertedMouse)) { if (menu.IsOff ()) { menu.TurnOn (true); } if (!menu.ignoreMouseClicks) { playerInput.mouseOverMenu = true; } } else if (stateHandler.gameState == GameState.Paused) { menu.ForceOff (); } else { menu.TurnOff (true); } } else if (menu.appearType == AppearType.OnContainer) { if (playerInput.activeContainer != null && !menu.isLocked && (stateHandler.gameState == GameState.Normal || (stateHandler.gameState == AC.GameState.Paused && menu.pauseWhenEnabled))) { if (menu.IsVisible () && menu.GetRect ().Contains (invertedMouse) && !menu.ignoreMouseClicks) { playerInput.mouseOverMenu = true; } menu.TurnOn (true); } else { menu.TurnOff (true); } } else if (menu.appearType == AppearType.DuringConversation) { if (playerInput.activeConversation != null && stateHandler.gameState == GameState.DialogOptions) { menu.TurnOn (true); } else if (stateHandler.gameState == GameState.Paused) { menu.ForceOff (); } else { menu.TurnOff (true); } } else if (menu.appearType == AppearType.OnInputKey) { if (menu.IsEnabled () && !menu.isLocked && menu.GetRect ().Contains (invertedMouse) && !menu.ignoreMouseClicks) { playerInput.mouseOverMenu = true; } try { if (Input.GetButtonDown (menu.toggleKey)) { if (!menu.IsEnabled ()) { if (stateHandler.gameState == GameState.Paused) { CrossFade (menu); } else { menu.TurnOn (true); } } else { menu.TurnOff (true); } } } catch { if (settingsManager.inputMethod != InputMethod.TouchScreen) { Debug.LogWarning ("No '" + menu.toggleKey + "' button exists - please define one in the Input Manager."); } } } else if (menu.appearType == AppearType.OnHotspot) { if (settingsManager.interactionMethod == AC_InteractionMethod.ContextSensitive && !menu.isLocked && runtimeInventory.selectedItem == null) { Hotspot hotspot = playerInteraction.GetActiveHotspot (); if (hotspot != null) { menu.HideInteractions (); if (hotspot.HasContextUse ()) { menu.MatchUseInteraction (hotspot.GetFirstUseButton ()); } if (hotspot.HasContextLook ()) { menu.MatchLookInteraction (hotspot.lookButton); } menu.Recalculate (); } } if (hotspotLabel != "" && !menu.isLocked && (stateHandler.gameState == GameState.Normal || stateHandler.gameState == GameState.DialogOptions)) { menu.TurnOn (true); } else if (stateHandler.gameState == GameState.Paused) { menu.ForceOff (); } else { menu.TurnOff (true); } } else if (menu.appearType == AppearType.OnInteraction) { if (settingsManager.CanClickOffInteractionMenu ()) { if (menu.IsEnabled () && (stateHandler.gameState == GameState.Normal || menu.pauseWhenEnabled)) { playerInput.interactionMenuIsOn = true; if (playerInput.mouseState == MouseState.SingleClick && !menu.GetRect ().Contains (invertedMouse)) { playerInput.mouseState = MouseState.Normal; playerInput.interactionMenuIsOn = false; menu.ForceOff (); } } else if (stateHandler.gameState == GameState.Paused) { playerInput.interactionMenuIsOn = false; menu.ForceOff (); } else if (playerInteraction.GetActiveHotspot () == null) { playerInput.interactionMenuIsOn = false; menu.TurnOff (true); } } else { if (menu.IsEnabled () && (stateHandler.gameState == GameState.Normal || menu.pauseWhenEnabled)) { if (menu.GetRect ().Contains (invertedMouse) && !menu.ignoreMouseClicks && (playerInteraction.GetActiveHotspot () != null || runtimeInventory.selectedItem != null)) { playerInput.interactionMenuIsOn = true; } else if (settingsManager.SelectInteractionMethod () == SelectInteractions.CyclingMenuAndClickingHotspot && playerInteraction.GetActiveHotspot () != null) { playerInput.interactionMenuIsOn = true; } else if (settingsManager.SelectInteractionMethod () == SelectInteractions.CyclingMenuAndClickingHotspot && (runtimeInventory.selectedItem != null && runtimeInventory.selectedItem == runtimeInventory.hoverItem)) { playerInput.interactionMenuIsOn = true; } else if (playerInteraction.GetActiveHotspot () == null || settingsManager.inputMethod == InputMethod.TouchScreen) { menu.TurnOff (true); } else if (runtimeInventory.selectedItem == null && playerInteraction.GetActiveHotspot () != null && runtimeInventory.hoverItem != null) { menu.TurnOff (true); } else if (runtimeInventory.selectedItem != null && runtimeInventory.selectedItem != runtimeInventory.hoverItem) { menu.TurnOff (true); } } else if (stateHandler.gameState == GameState.Paused) { menu.ForceOff (); } else if (playerInteraction.GetActiveHotspot () == null) { menu.TurnOff (true); } } } else if (menu.appearType == AppearType.WhenSpeechPlays) { if (stateHandler.gameState != GameState.Paused) { if (dialog.isMessageAlive && stateHandler.gameState != GameState.DialogOptions && (menu.speechMenuType == SpeechMenuType.All || (menu.speechMenuType == SpeechMenuType.CharactersOnly && dialog.GetSpeakingCharacter () != null) || (menu.speechMenuType == SpeechMenuType.NarrationOnly && dialog.GetSpeakingCharacter () == null))) { if (options.optionsData == null || (options.optionsData != null && options.optionsData.showSubtitles) || (speechManager && speechManager.forceSubtitles && !dialog.foundAudio)) { menu.TurnOn (true); } else { menu.TurnOff (true); } } else { menu.TurnOff (true); } } else { menu.ForceOff (); } } }