예제 #1
0
        // Creates a rectangle with text inside. The text size and lining are manually provided.
        public static List <byte[]> TextBoxS(string[] args, long cKey)
        {
            List <byte[]> result = new List <byte[]>();

            RVIVector2 pos       = RVIVector2.Parse(args[0]);
            float      w         = float.Parse(args[1], CultureInfo.InvariantCulture);
            float      h         = float.Parse(args[2], CultureInfo.InvariantCulture);
            float      charScale = float.Parse(args[3], CultureInfo.InvariantCulture);
            string     text      = args[4];

            RVIVector2 arraypos = new RVIVector2(pos.x + (charScale / 2), pos.y + charScale / 2);

            result.AddRange(GetBytes(RVIInstructions.ArrayChar(arraypos, charScale, text), cKey));
            result.AddRange(GetBytes(RVIInstructions.Rect(pos, w, h), cKey));

            return(result);
        }
예제 #2
0
        // Creates a rectangle with text inside. The text font size and lines of the text are automatically adjusted to the textbox area.
        public static List <byte[]> TextBox(string[] args, long cKey)
        {
            List <byte[]> result = new List <byte[]>();

            RVIVector2 pos  = RVIVector2.Parse(args[0]);
            float      w    = float.Parse(args[1], CultureInfo.InvariantCulture);
            float      h    = float.Parse(args[2], CultureInfo.InvariantCulture);
            string     text = args[3];

            float         charScale = 1;
            const int     CharactersPerLineThreshold = 28;
            bool          newLine        = false;
            List <string> lines          = new List <string>();
            string        currentLine    = "";
            int           currentCounter = 0;

            for (int i = 0; i < text.Length; i++)
            {
                currentCounter++;
                if (currentCounter % CharactersPerLineThreshold == 0 && currentCounter != 0)
                {
                    newLine = true;
                }
                if (text[i] == '·' && newLine)
                {
                    lines.Add(currentLine);
                    currentLine    = "";
                    newLine        = false;
                    currentCounter = 0;
                }
                else
                {
                    currentLine += text[i];
                }
            }
            lines.Add(currentLine);

            charScale = w / ((lines.Max(o => o.Length)) + 1);

            text = "";
            foreach (string line in lines)
            {
                text += line + "¬";
            }

            if (charScale >= h / 1.5f)
            {
                charScale = h / 1.5f;
            }

            RVIVector2 arraypos = new RVIVector2(pos.x + (charScale / 2), pos.y + h - charScale * 2);

            if (lines.Count == 1)
            {
                arraypos.y = pos.y + h / 2 - charScale / 2;
            }

            result.AddRange(GetBytes(RVIInstructions.ArrayChar(arraypos, charScale, text), cKey));
            result.AddRange(GetBytes(RVIInstructions.Rect(pos, w, h), cKey));

            return(result);
        }