コード例 #1
0
        public int powerCost;                                           //power cost of an action, eg. dismiss, dispose off

        public ModalActionDetails()
        {
            nodeID      = -1;
            actorDataID = -1;
            level       = -1;
            gearAction  = null;
            gearName    = null;
            modalLevel  = 1;
            modalState  = ModalSubState.None;
        }
コード例 #2
0
        public RestorePoint restorePoint;       //if it's a Save and Exit situation, player given option to return to game after saving. This tells where to return to. Optional

        public ModalConfirmDetails()
        {
            bottomText   = "Are you sure?";
            buttonFalse  = "No";
            buttonTrue   = "Yes";
            modalLevel   = 1;
            modalState   = ModalSubState.None;
            eventFalse   = EventType.None;
            eventTrue    = EventType.None;
            restorePoint = RestorePoint.None;
        }
コード例 #3
0
        public EventType triggerEvent;      //optional -> when Outcome closes will run this event



        public ModalOutcomeDetails()
        {
            modalLevel    = 1;
            modalState    = ModalSubState.None;
            isAction      = false;
            isSpecial     = false;
            isSpecialGood = true;
            reason        = "Unknown";
            side          = GameManager.i.sideScript.PlayerSide;
            sprite        = GameManager.i.spriteScript.infoSprite;
            type          = MsgPipelineType.None;
            listOfNodes   = new List <Node>();
            triggerEvent  = EventType.None;
        }
コード例 #4
0
    /// <summary>
    /// Initialise ModalOutcome window but in special format (expanding black bars across the screen)
    /// </summary>
    /// <param name="details"></param>
    private void SetModalOutcomeSpecial(ModalOutcomeDetails details)
    {
        if (details != null)
        {
            isSpecial = true;
            //ignore if autoRun true
            if (GameManager.i.turnScript.CheckIsAutoRun() == false)
            {
                if (CheckModalOutcomeActive() == false)
                {
                    //reset input
                    Input.ResetInputAxes();
                    //exit any generic or node tooltips
                    GameManager.i.tooltipGenericScript.CloseTooltip("ModalOutcome.cs -> SetModalOutcomeSpecial");
                    GameManager.i.tooltipNodeScript.CloseTooltip("ModalOutcome.cs -> SetModalOutcomeSpecial");
                    GameManager.i.tooltipHelpScript.CloseTooltip("ModalOutcome.cs -> SetModalOutcomeSpecial");
                    reason       = details.reason;
                    triggerEvent = details.triggerEvent;
                    //set modal true
                    GameManager.i.guiScript.SetIsBlocked(true, details.modalLevel);
                    //toggle panels
                    panelNormal.gameObject.SetActive(false);
                    canvasSpecial.gameObject.SetActive(true);

                    //register action status
                    isAction = details.isAction;

                    #region archive

                    /*//Show Me
                     * if (details.listOfNodes != null && details.listOfNodes.Count > 0)
                     * {
                     *
                     *  //showMe data
                     *  listOfShowMeNodes = details.listOfNodes;
                     *  //disable Confirm, activate Show Me button
                     *  confirmButtonNormal.gameObject.SetActive(false);
                     *  showMeButtonNormal.gameObject.SetActive(true);
                     *  //events to call to handle underlying UI (if any)
                     *  hideOtherEvent = details.hideEvent;
                     *  restoreOtherEvent = details.restoreEvent;
                     * }
                     * else
                     * {
                     *  listOfShowMeNodes.Clear();
                     *  //disable ShowMe, activate Confirm button
                     *  confirmButtonNormal.gameObject.SetActive(true);
                     *  showMeButtonNormal.gameObject.SetActive(false);
                     *  //default settings for events
                     *  hideOtherEvent = EventType.None;
                     *  restoreOtherEvent = EventType.None;
                     * }*/

                    //set opacity to zero (invisible)
                    //SetOpacity(0f);
                    #endregion

                    //set up modalOutcome elements
                    topTextSpecial.text    = details.textTop;
                    bottomTextSpecial.text = details.textBottom;
                    /*bottomTextSpecial.text = string.Format("{0}{1}{2}<size=80%>Press ANY Key to exit</size>", details.textBottom, "\n", "\n");*/
                    if (details.sprite != null)
                    {
                        portraitSpecial.sprite = details.sprite;
                    }
                    //open Canvas
                    outcomeCanvas.gameObject.SetActive(true);

                    //set blackBar to min width
                    blackBarTransform.sizeDelta = new Vector2(specialWidth, blackBarTransform.sizeDelta.y);
                    //highlight colour
                    if (details.isSpecialGood == true)
                    {
                        highlight.color = colourGood;
                    }
                    else
                    {
                        highlight.color = colourBad;
                    }
                    //set states
                    ModalStateData package = new ModalStateData()
                    {
                        mainState = ModalSubState.Outcome
                    };
                    GameManager.i.inputScript.SetModalState(package);
                    //pass through data for when the outcome window is closed
                    modalLevel = details.modalLevel;
                    modalState = details.modalState;
                    Debug.LogFormat("[UI] ModalOutcome.cs -> SetModalOutcomeSpecial{0}", "\n");
                    //fixed popUps
                    GameManager.i.popUpFixedScript.ExecuteFixed(0.75f);
                    //grow black bars
                    myCoroutineBarGrow    = StartCoroutine("GrowBlackBar");
                    myCoroutineHighlights = StartCoroutine("RunHighlights");
                }
                else
                {
                    Debug.LogWarning("Can't start a new Modal Outcome as an instance is already active");
                }
            }
        }
        else
        {
            Debug.LogWarning("Invalid ModalOutcomeDetails package (Null)");
        }
    }
コード例 #5
0
    /// <summary>
    /// Initiate Modal Outcome window
    /// </summary>
    /// <param name="details"></param>
    public void SetModalOutcome(ModalOutcomeDetails details)
    {
        if (details != null)
        {
            isSpecial = false;
            //ignore if autoRun true
            if (GameManager.i.turnScript.CheckIsAutoRun() == false)
            {
                //reset input
                Input.ResetInputAxes();
                //exit any generic or node tooltips
                GameManager.i.tooltipGenericScript.CloseTooltip("ModalOutcome.cs -> SetModalOutcome");
                GameManager.i.tooltipNodeScript.CloseTooltip("ModalOutcome.cs -> SetModalOutcome");
                GameManager.i.tooltipHelpScript.CloseTooltip("ModalOutcome.cs -> SetModalOutcome");
                reason       = details.reason;
                triggerEvent = details.triggerEvent;
                //set help
                List <HelpData> listOfHelpData = GameManager.i.helpScript.GetHelpData(details.help0, details.help1, details.help2, details.help3);
                if (listOfHelpData != null && listOfHelpData.Count > 0)
                {
                    helpButtonNormal.gameObject.SetActive(true);
                    helpNormal.SetHelpTooltip(listOfHelpData, 100, 200);
                }
                else
                {
                    helpButtonNormal.gameObject.SetActive(false);
                }
                //set modal true
                GameManager.i.guiScript.SetIsBlocked(true, details.modalLevel);
                //toggle panels
                panelNormal.gameObject.SetActive(true);
                canvasSpecial.gameObject.SetActive(false);
                //register action status
                isAction = details.isAction;

                /*
                 * //set confirm button image and sprite states
                 * switch (details.side.name)
                 * {
                 *  case "Authority":
                 *      //set button sprites
                 *      confirmButton.GetComponent<Image>().sprite = GameManager.i.sideScript.button_Authority;
                 *      //set sprite transitions
                 *      SpriteState spriteStateAuthority = new SpriteState();
                 *      spriteStateAuthority.highlightedSprite = GameManager.i.sideScript.button_highlight_Authority;
                 *      spriteStateAuthority.pressedSprite = GameManager.i.sideScript.button_Click;
                 *      confirmButton.spriteState = spriteStateAuthority;
                 *      break;
                 *  case "Resistance":
                 *      //set button sprites
                 *      confirmButton.GetComponent<Image>().sprite = GameManager.i.sideScript.button_Resistance;
                 *      //set sprite transitions
                 *      SpriteState spriteStateRebel = new SpriteState();
                 *      spriteStateRebel.highlightedSprite = GameManager.i.sideScript.button_highlight_Resistance;
                 *      spriteStateRebel.pressedSprite = GameManager.i.sideScript.button_Click;
                 *      confirmButton.spriteState = spriteStateRebel;
                 *      break;
                 *  default:
                 *      Debug.LogError(string.Format("Invalid side \"{0}\"", details.side));
                 *      break;
                 * }
                 * //set transition
                 * confirmButton.transition = Selectable.Transition.SpriteSwap;
                 */

                //Show Me
                if (details.listOfNodes != null && details.listOfNodes.Count > 0)
                {
                    //showMe data
                    listOfShowMeNodes = details.listOfNodes;
                    //disable Confirm, activate Show Me button
                    confirmButtonNormal.gameObject.SetActive(false);
                    showMeButtonNormal.gameObject.SetActive(true);
                    //events to call to handle underlying UI (if any)
                    hideOtherEvent    = details.hideEvent;
                    restoreOtherEvent = details.restoreEvent;
                }
                else
                {
                    listOfShowMeNodes.Clear();
                    //disable ShowMe, activate Confirm button
                    confirmButtonNormal.gameObject.SetActive(true);
                    showMeButtonNormal.gameObject.SetActive(false);
                    //default settings for events
                    hideOtherEvent    = EventType.None;
                    restoreOtherEvent = EventType.None;
                }

                //set opacity to zero (invisible)
                //SetOpacity(0f);

                //set up modalOutcome elements
                topTextNormal.text    = details.textTop;
                bottomTextNormal.text = details.textBottom;
                if (details.sprite != null)
                {
                    portraitNormal.sprite = details.sprite;
                }

                /*//get dimensions of outcome window (dynamic)
                 * float width = rectTransform.rect.width;
                 * float height = rectTransform.rect.height;*/

                //set states
                ModalStateData package = new ModalStateData()
                {
                    mainState = ModalSubState.Outcome
                };
                GameManager.i.inputScript.SetModalState(package);
                //open Canvas
                outcomeCanvas.gameObject.SetActive(true);
                //pass through data for when the outcome window is closed
                modalLevel = details.modalLevel;
                modalState = details.modalState;
                Debug.LogFormat("[UI] ModalOutcome.cs -> SetModalOutcome{0}", "\n");
                //fixed popUps
                GameManager.i.popUpFixedScript.ExecuteFixed(0.75f);
            }
        }
        else
        {
            Debug.LogWarning("Invalid ModalOutcomeDetails package (Null)");
        }
    }
コード例 #6
0
    /// <summary>
    /// Initialise and activate modal Action Menu
    /// </summary>
    /// <param name="details"></param>
    public void SetActionMenu(ModalGenericMenuDetails details)
    {
        //set states (done up front to prevent node tooltip reoccuring during menu display)
        ModalStateData package = new ModalStateData()
        {
            mainState = ModalSubState.ActionMenu
        };

        GameManager.i.inputScript.SetModalState(package);
        //close all tooltips
        GameManager.i.guiScript.SetTooltipsOff();
        //check enough actions
        if (GameManager.i.turnScript.CheckRemainingActions() == true)
        {
            //modalActionObject.SetActive(true);
            menuCanvas.gameObject.SetActive(true);

            //set all states to off
            button1.gameObject.SetActive(false);
            button2.gameObject.SetActive(false);
            button3.gameObject.SetActive(false);
            button4.gameObject.SetActive(false);
            button5.gameObject.SetActive(false);
            button6.gameObject.SetActive(false);

            //set up ModalActionObject
            itemDetails.text = string.Format("{0}{1}{2}", details.itemName, "\n", details.itemDetails);
            //tooltip at top of menu -> pass through data
            ModalMenuUI modal = itemDetails.GetComponent <ModalMenuUI>();
            modal.menuType = details.menuType;
            switch (details.menuType)
            {
            case ActionMenuType.Node:
            case ActionMenuType.NodeGear:
                modal.nodeID = details.itemID;
                break;

            case ActionMenuType.Actor:
                modal.actorSlotID = details.itemID;
                break;

            case ActionMenuType.Player:
                break;

            case ActionMenuType.Gear:
                modal.gearName = details.itemKey;
                break;
            }
            //There can be a max of 6 buttons (5 plus 1 x Cancel)
            int    counter = 0;
            Button tempButton;
            Text   title;
            foreach (EventButtonDetails buttonDetails in details.listOfButtonDetails)
            {
                tempButton = null;
                title      = null;
                counter++;
                //get the relevent UI elements
                switch (counter)
                {
                case 1:
                    tempButton = button1;
                    title      = button1Text;
                    break;

                case 2:
                    tempButton = button2;
                    title      = button2Text;
                    break;

                case 3:
                    tempButton = button3;
                    title      = button3Text;
                    break;

                case 4:
                    tempButton = button4;
                    title      = button4Text;
                    break;

                case 5:
                    tempButton = button5;
                    title      = button5Text;
                    break;

                case 6:
                    tempButton = button6;
                    title      = button6Text;
                    break;

                default:
                    Debug.LogWarning("To many EventButtonDetails in list!\n");
                    break;
                }
                //set up the UI elements
                if (tempButton != null && title != null)
                {
                    tempButton.onClick.RemoveAllListeners();
                    tempButton.onClick.AddListener(CloseActionMenu);
                    tempButton.onClick.AddListener(buttonDetails.action);
                    title.text = buttonDetails.buttonTitle;
                    tempButton.gameObject.SetActive(true);
                    GenericTooltipUI generic = tempButton.GetComponent <GenericTooltipUI>();
                    generic.tooltipHeader  = buttonDetails.buttonTooltipHeader;
                    generic.tooltipMain    = buttonDetails.buttonTooltipMain;
                    generic.tooltipDetails = buttonDetails.buttonTooltipDetail;
                    generic.x_offset       = 40;
                }
            }

            //convert coordinates
            Vector3 screenPos = Camera.main.WorldToScreenPoint(details.menuPos);
            //update rectTransform to get a correct height as it changes every time with the dynamic menu resizing depending on number of buttons
            Canvas.ForceUpdateCanvases();
            rectTransform = modalMenuObject.GetComponent <RectTransform>();
            //get dimensions of dynamic menu
            float width  = rectTransform.rect.width;
            float height = rectTransform.rect.height;
            //calculate offset - height (default above)
            if (screenPos.y + height + offset < Screen.height)
            {
                screenPos.y += height + offset;
            }
            else
            {
                screenPos.y -= offset;
            }
            //width - default right
            if (screenPos.x + offset >= Screen.width)
            {
                screenPos.x -= offset + screenPos.x - Screen.width;
            }
            //go left if needed
            else if (screenPos.x - offset - width <= 0)
            {
                screenPos.x += offset - width;
            }
            else
            {
                screenPos.x += offset;
            }
            //set new position
            modalMenuObject.transform.position = screenPos;
            //block raycasts to gameobjects
            GameManager.i.guiScript.SetIsBlocked(true, details.modalLevel);
            modalLevel = details.modalLevel;
            modalState = details.modalState;
            Debug.LogFormat("[UI] ModalActionMenu.cs -> SetActionMenu{0}", "\n");
        }
        else
        {
            //insufficient actions remaining -> create an outcome window to notify player
            ModalOutcomeDetails outcomeDetails = new ModalOutcomeDetails();
            outcomeDetails.side    = GameManager.i.sideScript.PlayerSide;
            outcomeDetails.textTop = "You have used up all your Actions for this turn";
            //extra text if player is wounded
            if (GameManager.i.turnScript.CheckPlayerWounded() == true)
            {
                outcomeDetails.textBottom = "Maximum ONE Action allowed while WOUNDED";
            }
            outcomeDetails.sprite     = GameManager.i.spriteScript.infoSprite;
            outcomeDetails.modalLevel = details.modalLevel;
            outcomeDetails.modalState = details.modalState;
            EventManager.i.PostNotification(EventType.OutcomeOpen, this, outcomeDetails, "ModalActionMenu.cs -> SetActionMenu");
        }
    }
コード例 #7
0
    /// <summary>
    /// Activate modal Main Menu. Called by InitialiseMainMenu.
    /// </summary>
    /// <param name="details"></param>
    private void SetMainMenu(ModalGenericMenuDetails details)
    {
        //game state -> save current state first
        gameState = GameManager.i.inputScript.GameState;
        GameManager.i.inputScript.GameState = GameState.MainMenu;
        //turn off node tooltip if needs be
        GameManager.i.guiScript.SetTooltipsOff();
        //activate main menu
        mainMenuCanvas.gameObject.SetActive(true);
        //set all states to off
        button1.gameObject.SetActive(false);
        button2.gameObject.SetActive(false);
        button3.gameObject.SetActive(false);
        button4.gameObject.SetActive(false);
        button5.gameObject.SetActive(false);
        button6.gameObject.SetActive(false);
        button7.gameObject.SetActive(false);
        button8.gameObject.SetActive(false);
        button9.gameObject.SetActive(false);
        button10.gameObject.SetActive(false);
        button11.gameObject.SetActive(false);
        //set up ModalActionObject
        itemDetails.text = string.Format("{0}{1}{2}", details.itemName, "\n", details.itemDetails);

        /*//tooltip at top of menu -> pass through data
         * ModalMenuUI modal = itemDetails.GetComponent<ModalMenuUI>();*/

        //There can be a max of 9 buttons
        int             counter = 0;
        Button          tempButton;
        TextMeshProUGUI title;

        foreach (EventButtonDetails buttonDetails in details.listOfButtonDetails)
        {
            tempButton = null;
            title      = null;
            counter++;
            //get the relevent UI elements
            switch (counter)
            {
            case 1:
                tempButton = button1;
                title      = button1Text;
                break;

            case 2:
                tempButton = button2;
                title      = button2Text;
                break;

            case 3:
                tempButton = button3;
                title      = button3Text;
                break;

            case 4:
                tempButton = button4;
                title      = button4Text;
                break;

            case 5:
                tempButton = button5;
                title      = button5Text;
                break;

            case 6:
                tempButton = button6;
                title      = button6Text;
                break;

            case 7:
                tempButton = button7;
                title      = button7Text;
                break;

            case 8:
                tempButton = button8;
                title      = button8Text;
                break;

            case 9:
                tempButton = button9;
                title      = button9Text;
                break;

            case 10:
                tempButton = button10;
                title      = button10Text;
                break;

            case 11:
                tempButton = button11;
                title      = button11Text;
                break;

            default:
                Debug.LogWarning("To many EventButtonDetails in list!\n");
                break;
            }
            //set up the UI elements
            if (tempButton != null && title != null)
            {
                tempButton.onClick.RemoveAllListeners();
                tempButton.onClick.AddListener(CloseMainMenu);
                tempButton.onClick.AddListener(buttonDetails.action);
                title.text = buttonDetails.buttonTitle;
                tempButton.gameObject.SetActive(true);
                GenericTooltipUI generic = tempButton.GetComponent <GenericTooltipUI>();
                generic.tooltipHeader  = buttonDetails.buttonTooltipHeader;
                generic.tooltipMain    = buttonDetails.buttonTooltipMain;
                generic.tooltipDetails = buttonDetails.buttonTooltipDetail;
                generic.x_offset       = 40;
            }
        }

        //No need to convert coordinates (already screen coords)
        Vector3 screenPos = details.menuPos;

        //update rectTransform to get a correct height as it changes every time with the dynamic menu resizing depending on number of buttons
        Canvas.ForceUpdateCanvases();
        rectTransform = modalMenuObject.GetComponent <RectTransform>();
        //get dimensions of dynamic menu
        float width  = rectTransform.rect.width;
        float height = rectTransform.rect.height;

        //place menu in centre of given position
        screenPos.x -= width / 2;
        screenPos.y += height / 2;

        /*//calculate offset - height (default above) -> No Auto adjust for hitting screen boundaries (it's wonky)
         * if (screenPos.y + height + offset < Screen.height)
         * { screenPos.y += height + offset; }
         * else { screenPos.y -= offset; }
         * //width - default right
         * if (screenPos.x + offset >= Screen.width)
         * { screenPos.x -= offset + screenPos.x - Screen.width; }
         * //go left if needed
         * else if (screenPos.x - offset - width <= 0)
         * { screenPos.x += offset - width; }
         * else
         * { screenPos.x += offset; }*/

        //set new position
        modalMenuObject.transform.position = screenPos;
        //set states
        ModalStateData package = new ModalStateData()
        {
            mainState = ModalSubState.MainMenu
        };

        GameManager.i.inputScript.SetModalState(package);
        //block raycasts to gameobjects
        GameManager.i.guiScript.SetIsBlocked(true, details.modalLevel);
        modalLevel = details.modalLevel;
        modalState = details.modalState;
        Debug.LogFormat("[UI] ModalMainMenu.cs -> SetMainMenu{0}", "\n");
    }