Beispiel #1
0
        /// <summary>
        /// Simple Label that displays text. See also <seealso cref="OpLabel(float, float, string, bool)"/> for lazier version.
        /// </summary>
        /// <param name="pos">BottomLeft Position</param>
        /// <param name="size">Size of the Box</param>
        /// <param name="text">Text you want to display; max length 600. See also <seealso cref="OpLabelLong"/><para>Leaving this as TEXT will call <see cref="LoremIpsum"/>.</para></param>
        /// <param name="alignment">Alignment. Left/Center/Right. Center is default.</param>
        /// <param name="bigText">Whether this uses bigFont or not</param>
        public OpLabel(Vector2 pos, Vector2 size, string text = "TEXT", FLabelAlignment alignment = FLabelAlignment.Center, bool bigText = false) : base(pos, size)
        {
            this._size    = new Vector2(Mathf.Max(size.x, 20f), Mathf.Max(size.y, 20f));
            this._bigText = bigText;
            this.autoWrap = false;
            if (text == "TEXT")
            { //Lorem Ipsum
                int lc      = this.IsLong ? Math.Max(1, Mathf.FloorToInt(_size.y * 0.65f / LabelTest.LineHeight(_bigText))) : 1;
                int charLim = Mathf.FloorToInt(_size.x / LabelTest.CharMean(_bigText)) * lc;
                int sentLim = charLim / LoremIpsum.meanCharPerSentence;
                if (this.IsLong)
                {
                    int pn = UnityEngine.Random.Range(1, Mathf.CeilToInt(lc / 1.5f));
                    text = LoremIpsum.Generate(Math.Max(1, (sentLim - 2) / pn), Math.Max(2, sentLim / pn), pn);
                    //charLim = Mathf.FloorToInt(charLim * 0.65f);
                }
                else
                {
                    text = LoremIpsum.Generate(Math.Max(1, sentLim - 2), Math.Max(1, sentLim));
                }
                text = text.Length > charLim?text.Substring(0, charLim - 2).TrimEnd() + "." : text;
            }
            if (this.IsLong)
            {
                this._text = text; _verticalAlignment = LabelVAlignment.Top;
            }
            else
            {
                this._text = text; _verticalAlignment = LabelVAlignment.Center;
            }
            //this.lineLength = Mathf.FloorToInt((size.x - 10f) / 6f);
            string cleanText = Regex.Replace(_text, @"\s+", "");

            this.isVFont = cleanText.Length > 0 && !LabelTest.HasNonASCIIChars(cleanText);
            if (!_init)
            {
                return;
            }
            this.color      = Menu.Menu.MenuRGB(Menu.Menu.MenuColors.MediumGrey);
            this._alignment = alignment;
            if (!this.IsLong)
            {
                this.label             = new MenuLabel(menu, owner, _text, this.pos, this.size, this._bigText);
                this.label.label.color = this.color;
                this.subObjects.Add(this.label);
                OnChange();
            }
        }
        /// <summary>
        /// Simple TextBox.
        /// </summary>
        /// <param name="pos">LeftBottom <see cref="UIelement.pos"/>.</param>
        /// <param name="sizeX">Horizontal size (min = 30 pxl). The height is fixed to 24 pxl.</param>
        /// <param name="key">Unique <see cref="UIconfig.key"/></param>
        /// <param name="defaultValue">Default string value</param>
        /// <param name="accept">Which type of text you want to <see cref="Accept"/></param>
        public OpTextBox(Vector2 pos, float sizeX, string key, string defaultValue = "TEXT", Accept accept = Accept.StringASCII) : base(pos, new Vector2(30f, 24f), key, defaultValue)
        {
            this._size       = new Vector2(Mathf.Max(IsUpdown ? 40f : 30f, sizeX), IsUpdown ? 30f : 24f);
            this.description = InternalTranslator.Translate("Click and Type text");

            this.accept       = accept;
            this._value       = defaultValue;
            this._lastValue   = defaultValue;
            this.defaultValue = this.value;
            this.maxLength    = Mathf.FloorToInt((size.x - 20f) / 6f);
            if (this.accept == Accept.Float || this.accept == Accept.Int)
            {
                this.allowSpace = float.Parse(defaultValue) < 0f;
            }
            else
            {
                this.allowSpace = defaultValue.Contains(" ");
            }
            this.password  = false;
            this.mouseDown = false;

            if (!_init)
            {
                return;
            }

            //this.keyboardOn = false;
            this.colorEdge = Menu.Menu.MenuRGB(Menu.Menu.MenuColors.MediumGrey);
            this.colorText = Menu.Menu.MenuRGB(Menu.Menu.MenuColors.MediumGrey);
            this.colorFill = Color.black;
            this.rect      = new DyeableRect(menu, owner, this.pos, this.size, true)
            {
                fillAlpha = 0.5f
            };
            this.subObjects.Add(this.rect);

            this.label = new MenuLabel(menu, owner, defaultValue, this.pos + new Vector2(5f - this._size.x * 0.5f, IsUpdown ? 13f : 10f), new Vector2(this._size.x, 20f), false);
            this.label.label.alignment = FLabelAlignment.Left;
            this.label.label.SetAnchor(0f, 1f);
            this.label.label.color = this.colorText;
            //this.label.label.SetPosition(new Vector2(5f, 3f) - (this._size * 0.5f));
            this.subObjects.Add(this.label);

            this.cursor = new FCursor();
            cursor.SetPosition(LabelTest.GetWidth(value, false) + LabelTest.CharMean(false), this.size.y * 0.5f - 7f);
            this.myContainer.AddChild(this.cursor);
        }
        public override void Update(float dt)
        {
            this.col = this.bumpBehav.col;
            base.Update(dt);
            this.bumpBehav.col = this.col;
            if (disabled)
            {
                return;
            }

            if (KeyboardOn)
            {
                cursor.alpha = Mathf.Clamp(cursorAlpha, 0f, 1f);
                cursorAlpha -= 0.05f;
                if (cursorAlpha < -0.5f)
                {
                    cursorAlpha = 2f;
                }

                //input spotted! ->cursorAlpha = 2.5f;
                foreach (char c in Input.inputString)
                {
                    //Debug.Log(string.Concat("input: ", c));
                    if (c == '\b')
                    {
                        cursorAlpha = 2.5f; this.bumpBehav.flash = 2.5f;
                        if (this.value.Length > 0)
                        {
                            this._value = this.value.Substring(0, this.value.Length - 1);
                            if (!_soundFilled)
                            {
                                _soundFill += 12;
                                menu.PlaySound(SoundID.MENY_Already_Selected_MultipleChoice_Clicked);
                            }
                            OnChange();
                        }
                        break;
                    }
                    else if ((c == '\n') || (c == '\r')) // enter/return
                    {
                        KeyboardOn = false;
                        menu.PlaySound(SoundID.MENU_Checkbox_Check);
                        break;
                    }
                    else
                    {
                        cursorAlpha          = 2.5f;
                        this.bumpBehav.flash = 2.5f;
                        this.value          += c;
                    }
                }
            }
            else
            {
                cursorAlpha = 0f;
            }
            if (Input.GetMouseButton(0) && !mouseDown)
            {
                if (this is OpUpdown ud && ud.mouseOverArrow)
                {
                    return;
                }
                mouseDown = true;
                if (MouseOver && !KeyboardOn)
                { //Turn on
                    menu.PlaySound(SoundID.MENU_Button_Select_Gamepad_Or_Keyboard);
                    KeyboardOn            = true;
                    this.cursor.isVisible = true;
                    this.cursorAlpha      = 1f;
                    cursor.SetPosition(LabelTest.GetWidth(this.label.text, false) + LabelTest.CharMean(false), this.size.y * 0.5f - 7f);
                }
                else if (!MouseOver && KeyboardOn)
                { //Shutdown
                    KeyboardOn = false;
                    menu.PlaySound(SoundID.MENU_Checkbox_Uncheck);
                }
            }
            else if (!Input.GetMouseButton(0))
            {
                mouseDown = false;
            }
        }