Ejemplo n.º 1
0
        private void UpdateElements(AC.Menu menu, int languageNumber)
        {
            if (!menu.HasTransition () && menu.IsFading ())
            {
                // Stop until no longer "fading" so that it appears in right place
                return;
            }

            if (KickStarter.settingsManager.inputMethod == InputMethod.MouseAndKeyboard && menu.IsPointInside (KickStarter.playerInput.GetInvertedMouse ()))
            {
                elementIdentifier = menu.id.ToString ();
            }

            foreach (MenuElement element in menu.elements)
            {
                if ((element.GetNumSlots () == 0 || !element.isVisible) && menu.menuSource != MenuSource.AdventureCreator)
                {
                    element.HideAllUISlots ();
                }

                for (int i=0; i<element.GetNumSlots (); i++)
                {
                    element.PreDisplay (i, languageNumber, menu.IsPointerOverSlot (element, i, KickStarter.playerInput.GetInvertedMouse ()));

                    if (element.isVisible && SlotIsInteractive (menu, element, i))
                    {
                        if ((!interactionMenuIsOn || menu.appearType == AppearType.OnInteraction)
                            && (KickStarter.playerInput.GetDragState () == DragState.None || (KickStarter.playerInput.GetDragState () == DragState.Inventory && CanElementBeDroppedOnto (element))))
                        {
                            if (KickStarter.sceneSettings && element.hoverSound && lastElementIdentifier != (menu.id.ToString () + element.ID.ToString () + i.ToString ()))
                            {
                                KickStarter.sceneSettings.PlayDefaultSound (element.hoverSound, false);
                            }

                            elementIdentifier = menu.id.ToString () + element.ID.ToString () + i.ToString ();
                        }

                        if (KickStarter.stateHandler.gameState != GameState.Cutscene)
                        {
                            if (element is MenuInventoryBox)
                            {
                                //if (KickStarter.stateHandler.gameState == GameState.Normal)
                                if (KickStarter.stateHandler.gameState == GameState.Normal || KickStarter.stateHandler.gameState == GameState.Paused)
                                {
                                    if (KickStarter.settingsManager.interactionMethod == AC_InteractionMethod.ChooseInteractionThenHotspot && KickStarter.settingsManager.inventoryInteractions == InventoryInteractions.Single && KickStarter.runtimeInventory.selectedItem == null)
                                    {
                                        KickStarter.playerCursor.ResetSelectedCursor ();
                                    }

                                    MenuInventoryBox inventoryBox = (MenuInventoryBox) element;
                                    if (inventoryBox.inventoryBoxType == AC_InventoryBoxType.HotspotBased)
                                    {
                                        if (KickStarter.cursorManager.addHotspotPrefix)
                                        {
                                            if (KickStarter.runtimeInventory.hoverItem != null)
                                            {
                                                hotspotLabel = KickStarter.runtimeInventory.hoverItem.GetLabel (languageNumber);
                                            }
                                            else
                                            {
                                                hotspotLabel = KickStarter.playerInteraction.GetLabel (languageNumber);
                                            }

                                            if ((KickStarter.runtimeInventory.selectedItem == null && !interactionMenuIsOn) || interactionMenuIsOn)
                                            {
                                                hotspotLabel = KickStarter.runtimeInventory.GetHotspotPrefixLabel (inventoryBox.GetItem (i), inventoryBox.GetLabel (i, languageNumber), languageNumber) + hotspotLabel;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        foundMouseOverInventory = true;

                                        if (!mouseOverInteractionMenu)
                                        {
                                            InvItem newHoverItem = inventoryBox.GetItem (i);
                                            //KickStarter.runtimeInventory.hoverItem = newHoverItem;
                                            KickStarter.runtimeInventory.SetHoverItem (newHoverItem, inventoryBox.displayType);
                                            if (oldHoverItem != newHoverItem)
                                            {
                                                KickStarter.runtimeInventory.MatchInteractions ();
                                                KickStarter.playerInteraction.RestoreInventoryInteraction ();
                                                activeInventoryBoxCentre = menu.GetSlotCentre (inventoryBox, i);

                                                if (interactionMenuIsOn)
                                                {
                                                    SetInteractionMenus (false);
                                                }
                                            }
                                        }

                                        if (KickStarter.settingsManager.SelectInteractionMethod () == SelectInteractions.CyclingCursorAndClickingHotspot)
                                        {}
                                        else
                                        {
                                            if (!interactionMenuIsOn)
                                            {
                                                if (inventoryBox.displayType == ConversationDisplayType.IconOnly)
                                                {
                                                    if (KickStarter.settingsManager.interactionMethod == AC_InteractionMethod.ChooseInteractionThenHotspot)
                                                    {
                                                        if (KickStarter.playerCursor.GetSelectedCursor () >= 0)
                                                        {
                                                            hotspotLabel = KickStarter.cursorManager.GetCursorIconFromID (KickStarter.playerCursor.GetSelectedCursorID ()).label + " " + inventoryBox.GetLabel (i, languageNumber);
                                                        }
                                                        else if (KickStarter.runtimeInventory.selectedItem == null)
                                                        {
                                                            hotspotLabel = inventoryBox.GetLabel (i, languageNumber);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        if (KickStarter.runtimeInventory.hoverItem != null && KickStarter.runtimeInventory.hoverItem == KickStarter.runtimeInventory.selectedItem)
                                                        {
                                                            hotspotLabel = inventoryBox.GetLabel (i, languageNumber);
                                                        }
                                                    }
                                                }
                                            }
                                            else if (KickStarter.runtimeInventory.selectedItem != null)
                                            {
                                                hotspotLabel = KickStarter.runtimeInventory.selectedItem.GetLabel (languageNumber);
                                            }
                                        }
                                    }
                                }
                            }
                            else if (element is MenuCrafting)
                            {
                                if (KickStarter.stateHandler.gameState == GameState.Normal)
                                {
                                    MenuCrafting crafting = (MenuCrafting) element;
                                    //KickStarter.runtimeInventory.hoverItem = crafting.GetItem (i);
                                    KickStarter.runtimeInventory.SetHoverItem (crafting.GetItem (i), crafting.displayType);

                                    if (KickStarter.runtimeInventory.hoverItem != null)
                                    {
                                        if (!interactionMenuIsOn)
                                        {
                                            hotspotLabel = crafting.GetLabel (i, languageNumber);
                                        }
                                        else if (KickStarter.runtimeInventory.selectedItem != null)
                                        {
                                            hotspotLabel = KickStarter.runtimeInventory.selectedItem.GetLabel (languageNumber);
                                        }
                                    }
                                }
                            }
                            else if (element is MenuInteraction)
                            {
                                if (KickStarter.runtimeInventory.hoverItem != null)
                                {
                                    hotspotLabel = KickStarter.runtimeInventory.hoverItem.GetLabel (languageNumber);
                                }
                                else
                                {
                                    hotspotLabel = KickStarter.playerInteraction.GetLabel (languageNumber);
                                }

                                if (KickStarter.cursorManager.addHotspotPrefix && interactionMenuIsOn && KickStarter.settingsManager.SelectInteractionMethod () == SelectInteractions.ClickingMenu)
                                {
                                    MenuInteraction interaction = (MenuInteraction) element;
                                    hotspotLabel = KickStarter.cursorManager.GetLabelFromID (interaction.iconID, languageNumber) + hotspotLabel;
                                }
                            }
                            else if (element is MenuDialogList)
                            {
                                if (KickStarter.stateHandler.gameState == GameState.DialogOptions)
                                {
                                    MenuDialogList dialogList = (MenuDialogList) element;
                                    if (dialogList.displayType == ConversationDisplayType.IconOnly)
                                    {
                                        hotspotLabel = dialogList.GetLabel (i, languageNumber);
                                    }
                                }
                            }
                            else if (element is MenuButton)
                            {
                                MenuButton button = (MenuButton) element;
                                if (button.hotspotLabel != "")
                                {
                                    hotspotLabel = button.GetHotspotLabel (languageNumber);
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private void UpdateMenu(AC.Menu menu)
        {
            Vector2 invertedMouse = KickStarter.playerInput.GetInvertedMouse ();
            UpdateMenuPosition (menu, invertedMouse);

            menu.HandleTransition ();

            if (KickStarter.settingsManager.inputMethod == InputMethod.KeyboardOrController && menu.IsEnabled ())
            {
                KickStarter.playerInput.InputControlMenu (menu);
            }

            if (menu.appearType == AppearType.Manual)
            {
                if (menu.IsVisible () && !menu.isLocked && menu.IsPointInside (invertedMouse) && !menu.ignoreMouseClicks)
                {
                    foundMouseOverMenu = true;
                }
            }

            else if (menu.appearType == AppearType.DuringGameplay)
            {
                if (KickStarter.stateHandler.gameState == GameState.Normal && !menu.isLocked)
                {
                    if (menu.IsOff ())
                    {
                        menu.TurnOn (true);
                    }

                    if (menu.IsOn () && menu.IsPointInside (invertedMouse))
                    {
                        foundMouseOverMenu = true;
                    }
                }
                else if (KickStarter.stateHandler.gameState == GameState.Paused)
                {
                    menu.TurnOff (true);
                }
                //else if (KickStarter.stateHandler.gameState != GameState.Normal && menu.IsOn () && (KickStarter.actionListManager.AreActionListsRunning () || KickStarter.playerInput.activeConversation != null))
                else if (menu.IsOn () && KickStarter.actionListManager.IsGameplayBlocked ())
                {
                    menu.TurnOff (true);
                }
            }

            else if (menu.appearType == AppearType.MouseOver)
            {
                if (KickStarter.stateHandler.gameState == GameState.Normal && !menu.isLocked && menu.IsPointInside (invertedMouse))
                {
                    if (menu.IsOff ())
                    {
                        menu.TurnOn (true);
                    }

                    if (!menu.ignoreMouseClicks)
                    {
                        foundMouseOverMenu = true;
                    }
                }
                else if (KickStarter.stateHandler.gameState == GameState.Paused)
                {
                    menu.ForceOff ();
                }
                else
                {
                    menu.TurnOff (true);
                }
            }

            else if (menu.appearType == AppearType.OnContainer)
            {
                if (KickStarter.playerInput.activeContainer != null && !menu.isLocked && (KickStarter.stateHandler.gameState == GameState.Normal || (KickStarter.stateHandler.gameState == AC.GameState.Paused && menu.pauseWhenEnabled)))
                {
                    if (menu.IsVisible () && menu.IsPointInside (invertedMouse) && !menu.ignoreMouseClicks)
                    {
                        foundMouseOverMenu = true;
                    }
                    menu.TurnOn (true);
                }
                else
                {
                    menu.TurnOff (true);
                }
            }

            else if (menu.appearType == AppearType.DuringConversation)
            {
                if (KickStarter.playerInput.activeConversation != null && KickStarter.stateHandler.gameState == GameState.DialogOptions)
                {
                    menu.TurnOn (true);
                }
                else if (KickStarter.stateHandler.gameState == GameState.Paused)
                {
                    menu.ForceOff ();
                }
                else
                {
                    menu.TurnOff (true);
                }
            }

            else if (menu.appearType == AppearType.OnInputKey)
            {
                if (menu.IsEnabled () && !menu.isLocked && menu.IsPointInside (invertedMouse) && !menu.ignoreMouseClicks)
                {
                    foundMouseOverMenu = true;
                }

                try
                {
                    if (KickStarter.playerInput.InputGetButtonDown (menu.toggleKey, true))
                    {
                        if (!menu.IsEnabled ())
                        {
                            if (KickStarter.stateHandler.gameState == GameState.Paused)
                            {
                                CrossFade (menu);
                            }
                            else
                            {
                                menu.TurnOn (true);
                            }
                        }
                        else
                        {
                            menu.TurnOff (true);
                        }
                    }
                }
                catch
                {
                    if (KickStarter.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 (KickStarter.settingsManager.interactionMethod == AC_InteractionMethod.ContextSensitive && !menu.isLocked && KickStarter.runtimeInventory.selectedItem == null)
                {
                    Hotspot hotspot = KickStarter.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 && KickStarter.stateHandler.gameState != GameState.Cutscene)
                    //(KickStarter.stateHandler.gameState == GameState.Normal || KickStarter.stateHandler.gameState == GameState.DialogOptions))
                {
                    if (!menu.IsOn ())
                    {
                        menu.TurnOn (true);
                        if (menu.IsUnityUI ())
                        {
                            // Update position before next frame (Unity UI bug)
                            UpdateMenuPosition (menu, invertedMouse);
                        }
                    }
                }
                //else if (KickStarter.stateHandler.gameState == GameState.Paused)
                else if (KickStarter.stateHandler.gameState == GameState.Cutscene)
                {
                    menu.ForceOff ();
                }
                else
                {
                    menu.TurnOff (true);
                }
            }

            else if (menu.appearType == AppearType.OnInteraction)
            {
                if (KickStarter.settingsManager.CanClickOffInteractionMenu ())
                {
                    if (menu.IsEnabled () && (KickStarter.stateHandler.gameState == GameState.Normal || menu.pauseWhenEnabled))
                    {
                        interactionMenuIsOn = true;

                        if (menu.IsPointInside (invertedMouse) && !menu.ignoreMouseClicks)
                        {
                            foundMouseOverInteractionMenu = true;
                        }
                        else if (KickStarter.playerInput.GetMouseState () == MouseState.SingleClick)
                        {
                            KickStarter.playerInput.ResetMouseClick ();
                            interactionMenuIsOn = false;
                            menu.TurnOff (true);
                        }
                    }
                    else if (KickStarter.stateHandler.gameState == GameState.Paused)
                    {
                        interactionMenuIsOn = false;
                        menu.ForceOff ();
                    }
                    else if (KickStarter.playerInteraction.GetActiveHotspot () == null)
                    {
                        interactionMenuIsOn = false;
                        menu.TurnOff (true);
                    }
                }
                else
                {
                    if (menu.IsEnabled () && (KickStarter.stateHandler.gameState == GameState.Normal || menu.pauseWhenEnabled))
                    {
                        if (menu.IsPointInside (invertedMouse) && !menu.ignoreMouseClicks)
                        {
                            foundMouseOverInteractionMenu = true;
                        }
                        else if (!menu.IsPointInside (invertedMouse) && !menu.ignoreMouseClicks && KickStarter.playerInteraction.GetActiveHotspot () == null && KickStarter.runtimeInventory.hoverItem == null &&
                            (KickStarter.settingsManager.interactionMethod != AC_InteractionMethod.ChooseHotspotThenInteraction || KickStarter.settingsManager.cancelInteractions == CancelInteractions.CursorLeavesMenuOrHotspot))
                        {
                            interactionMenuIsOn = false;
                            menu.TurnOff (true);
                        }
                        else if (!menu.IsPointInside (invertedMouse) && !menu.ignoreMouseClicks && KickStarter.settingsManager.interactionMethod == AC_InteractionMethod.ChooseHotspotThenInteraction && KickStarter.settingsManager.cancelInteractions == CancelInteractions.CursorLeavesMenu && !menu.IsFadingIn ())
                        {
                            interactionMenuIsOn = false;
                            menu.TurnOff (true);
                        }
                        else if (KickStarter.playerInteraction.GetActiveHotspot () == null && KickStarter.runtimeInventory.hoverItem == null &&
                            KickStarter.settingsManager.interactionMethod == AC_InteractionMethod.ChooseHotspotThenInteraction && KickStarter.settingsManager.selectInteractions == AC.SelectInteractions.CyclingMenuAndClickingHotspot)
                        {
                            interactionMenuIsOn = false;
                            menu.TurnOff (true);
                        }
                        else if (KickStarter.settingsManager.SelectInteractionMethod () == SelectInteractions.CyclingMenuAndClickingHotspot && KickStarter.playerInteraction.GetActiveHotspot () != null)
                        {}
                        else if (KickStarter.settingsManager.SelectInteractionMethod () == SelectInteractions.CyclingMenuAndClickingHotspot && KickStarter.runtimeInventory.hoverItem != null)
                        {}
                        else if (KickStarter.playerInteraction.GetActiveHotspot () == null || KickStarter.settingsManager.inputMethod == InputMethod.TouchScreen)
                        {}
                        else if (KickStarter.runtimeInventory.selectedItem == null && KickStarter.playerInteraction.GetActiveHotspot () != null && KickStarter.runtimeInventory.hoverItem != null)
                        {
                            interactionMenuIsOn = false;
                            menu.TurnOff (true);
                        }
                        else if (KickStarter.runtimeInventory.selectedItem != null && KickStarter.runtimeInventory.selectedItem != KickStarter.runtimeInventory.hoverItem)
                        {
                            interactionMenuIsOn = false;
                            menu.TurnOff (true);
                        }
                    }
                    else if (KickStarter.stateHandler.gameState == GameState.Paused)
                    {
                        interactionMenuIsOn = false;
                        menu.ForceOff ();
                    }
                    else if (KickStarter.playerInteraction.GetActiveHotspot () == null)
                    {
                        interactionMenuIsOn = false;
                        menu.TurnOff (true);
                    }
                }
            }

            else if (menu.appearType == AppearType.WhenSpeechPlays)
            {
                if (KickStarter.stateHandler.gameState == GameState.Paused)
                {
                    menu.TurnOff ();
                }
                else
                {
                    Speech speech = menu.speech;
                    if (!menu.oneMenuPerSpeech)
                    {
                        speech = KickStarter.dialog.GetLatestSpeech ();
                    }

                    if (speech != null &&
                       (menu.speechMenuType == SpeechMenuType.All ||
                         (menu.speechMenuType == SpeechMenuType.CharactersOnly && speech.GetSpeakingCharacter () != null) ||
                     	   (menu.speechMenuType == SpeechMenuType.NarrationOnly && speech.GetSpeakingCharacter () == null)) &&
                       (menu.speechMenuLimit == SpeechMenuLimit.All ||
                         (menu.speechMenuLimit == SpeechMenuLimit.BlockingOnly && !speech.isBackground) ||
                           (menu.speechMenuLimit == SpeechMenuLimit.BackgroundOnly && speech.isBackground)))
                    {
                        if (Options.optionsData == null || (Options.optionsData != null && Options.optionsData.showSubtitles) || (KickStarter.speechManager.forceSubtitles && !KickStarter.dialog.FoundAudio ()))
                        {
                            menu.TurnOn (true);
                        }
                        else
                        {
                            menu.TurnOff (true);
                        }
                    }
                    else
                    {
                        menu.TurnOff (true);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private void CheckClicks(AC.Menu menu)
        {
            if (!menu.HasTransition () && menu.IsFading ())
            {
                // Stop until no longer "fading" so that it appears in right place
                return;
            }

            if (KickStarter.settingsManager.inputMethod == InputMethod.MouseAndKeyboard && menu.IsPointInside (KickStarter.playerInput.GetInvertedMouse ()))
            {
                elementIdentifier = menu.id.ToString ();
            }

            foreach (MenuElement element in menu.elements)
            {
                if (element.isVisible)
                {
                    for (int i=0; i<element.GetNumSlots (); i++)
                    {
                        if (SlotIsInteractive (menu, element, i))
                        {
                            if (!menu.IsUnityUI () && KickStarter.playerInput.GetMouseState () != MouseState.Normal && (KickStarter.playerInput.GetDragState () == DragState.None || KickStarter.playerInput.GetDragState () == DragState.Menu))
                            {
                                if (KickStarter.playerInput.GetMouseState () == MouseState.SingleClick || KickStarter.playerInput.GetMouseState () == MouseState.LetGo || KickStarter.playerInput.GetMouseState () == MouseState.RightClick)
                                {
                                    if (element is MenuInput) {}
                                    else DeselectInputBox ();

                                    CheckClick (menu, element, i, KickStarter.playerInput.GetMouseState ());
                                }
                                else if (KickStarter.playerInput.GetMouseState () == MouseState.HeldDown)
                                {
                                    CheckContinuousClick (menu, element, i, KickStarter.playerInput.GetMouseState ());
                                }
                            }
                            else if (menu.IsUnityUI () && KickStarter.runtimeInventory.selectedItem == null && KickStarter.settingsManager.inventoryDragDrop && KickStarter.playerInput.GetMouseState () == MouseState.HeldDown && KickStarter.playerInput.GetDragState () == DragState.None)
                            {
                                if (element is MenuInventoryBox || element is MenuCrafting)
                                {
                                    // Begin UI drag drop
                                    CheckClick (menu, element, i, MouseState.SingleClick);
                                }
                            }
                            else if (KickStarter.playerInteraction.IsDroppingInventory () && CanElementBeDroppedOnto (element))
                            {
                                if (menu.IsUnityUI () && KickStarter.settingsManager.inventoryDragDrop && (element is MenuInventoryBox || element is MenuCrafting))
                                {
                                    // End UI drag drop
                                    element.ProcessClick (menu, i, MouseState.SingleClick);
                                }
                                else
                                {
                                    DeselectInputBox ();
                                    CheckClick (menu, element, i, MouseState.SingleClick);
                                }
                            }
                        }
                    }
                }
            }
        }