Ejemplo n.º 1
0
        public void AppendSymbol(Symbol symbol, TextFormatting format = null, DialogFormatting dialogFormat = null)
        {
            format       = format ?? DefaultFormat;
            dialogFormat = dialogFormat ?? DefaultDialog;

            AppendElement(new TextElementSymbol(symbol, format, dialogFormat));
        }
Ejemplo n.º 2
0
        public void AppendSpace(int width, TextFormatting format = null, DialogFormatting dialogFormat = null)
        {
            format       = format ?? DefaultFormat;
            dialogFormat = dialogFormat ?? DefaultDialog;

            AppendElement(new TextElementSpace(width, format, dialogFormat));
        }
Ejemplo n.º 3
0
 public TextBuilder(float width, float height, TextFormatting defaultFormat = null, DialogFormatting defaultDialog = null)
 {
     Root = new TextElementContainer(width, height);
     ContainerStack.Push(Root);
     DefaultFormat = defaultFormat ?? new TextFormatting();
     DefaultDialog = defaultDialog ?? new DialogFormattingIdentity();
 }
Ejemplo n.º 4
0
 public TextElementDynamic(Func <string> value, float width, TextFormatting format, DialogFormatting dialogFormat)
 {
     Value        = value;
     Width        = width;
     Format       = format;
     DialogFormat = dialogFormat;
 }
Ejemplo n.º 5
0
 public TextElementCounter(Func <int> value, int digits, TextFormatting formatFront, TextFormatting formatBack, DialogFormatting dialogFormat)
 {
     Value        = value;
     Digits       = digits;
     FormatFront  = formatFront;
     FormatBack   = formatBack;
     DialogFormat = dialogFormat;
 }
Ejemplo n.º 6
0
        public static void AppendAsKey(this TextBuilder builder, string str, Color color, DialogFormatting dialog = null)
        {
            TextFormatting formatting = new TextFormatting()
            {
                Bold      = true,
                GetParams = (pos) => new DialogParams()
                {
                    Color  = color,
                    Border = Color.Black,
                    Scale  = Vector2.One,
                }
            };

            builder.AppendText(str, formatting, dialog);
        }
Ejemplo n.º 7
0
        public void DrawChar(char chr, Vector2 drawpos, TextFormatting format, DialogParams param)
        {
            Texture2D tex = Game.FontSprites[chr / FontUtil.CharsPerPage].Texture;

            int index  = chr % FontUtil.CharsPerPage;
            int offset = FontUtil.GetCharOffset(chr);
            int width  = FontUtil.GetCharWidth(chr);

            var color        = param.Color;
            var border       = param.Border;
            var charOffset   = param.Offset;
            var charScale    = param.Scale;
            var charAngle    = param.Angle;
            var bold         = format.Bold;
            var scriptOffset = 0;

            //DrawCharLine(drawpos + charOffset + new Vector2(0, 15), width + 1 + (bold ? 1 : 0), color, border);
            //DrawCharLine(drawpos + charOffset + new Vector2(0, 2), width + 1 + (bold ? 1 : 0), color, border);

            var rect   = FontUtil.GetCharRect(index);
            var middle = FontUtil.GetCharMiddle(index);

            if (border.A > 0)
            { //Only draw outline if it's actually non-transparent
                Scene.SpriteBatch.Draw(tex, drawpos + charOffset + new Vector2(-offset - 1, scriptOffset + 0) + middle, rect, border, charAngle, middle, charScale, SpriteEffects.None, 0);
                Scene.SpriteBatch.Draw(tex, drawpos + charOffset + new Vector2(-offset, scriptOffset + 1) + middle, rect, border, charAngle, middle, charScale, SpriteEffects.None, 0);
                Scene.SpriteBatch.Draw(tex, drawpos + charOffset + new Vector2(-offset, scriptOffset - 1) + middle, rect, border, charAngle, middle, charScale, SpriteEffects.None, 0);
                if (bold)
                {
                    Scene.SpriteBatch.Draw(tex, drawpos + charOffset + new Vector2(-offset + 2, scriptOffset + 0) + middle, rect, border, charAngle, middle, charScale, SpriteEffects.None, 0);
                    Scene.SpriteBatch.Draw(tex, drawpos + charOffset + new Vector2(-offset + 1, scriptOffset + 1) + middle, rect, border, charAngle, middle, charScale, SpriteEffects.None, 0);
                    Scene.SpriteBatch.Draw(tex, drawpos + charOffset + new Vector2(-offset + 1, scriptOffset - 1) + middle, rect, border, charAngle, middle, charScale, SpriteEffects.None, 0);
                }
                else
                {
                    Scene.SpriteBatch.Draw(tex, drawpos + charOffset + new Vector2(-offset + 1, scriptOffset) + middle, rect, border, charAngle, middle, charScale, SpriteEffects.None, 0);
                }
            }

            Scene.SpriteBatch.Draw(tex, drawpos + charOffset + new Vector2(-offset, scriptOffset) + middle, rect, color, charAngle, middle, charScale, SpriteEffects.None, 0);
            if (bold)
            {
                Scene.SpriteBatch.Draw(tex, drawpos + charOffset + new Vector2(-offset + 1, scriptOffset) + middle, rect, color, charAngle, middle, charScale, SpriteEffects.None, 0);
            }

            //if(charOffset == Vector2.Zero)
            //    DrawCharLine(drawpos + charOffset + new Vector2(-1, 8), width + 2 + (bold ? 1 : 0), color, border);
        }
Ejemplo n.º 8
0
        public static void AppendDescribe(this TextBuilder builder, Symbol symbol, string str, Color color, DialogFormatting dialog = null)
        {
            TextFormatting formatting = new TextFormatting()
            {
                Bold      = true,
                GetParams = (pos) => new DialogParams()
                {
                    Color  = color,
                    Border = Color.Black,
                    Scale  = Vector2.One,
                }
            };

            builder.StartNoBreak();
            builder.AppendText(str, formatting, dialog);
            builder.AppendSymbol(symbol, formatting, dialog);
            builder.EndNoBreak();
        }
Ejemplo n.º 9
0
        public void AppendText(string str, TextFormatting format = null, DialogFormatting dialogFormat = null)
        {
            format       = format ?? DefaultFormat;
            dialogFormat = dialogFormat ?? DefaultDialog;

            StringBuilder builder = new StringBuilder();

            void pushString()
            {
                if (builder.Length > 0)
                {
                    AppendElement(new TextElementWord(builder.ToString(), format, dialogFormat));
                }
                builder.Clear();
            }

            for (int i = 0; i < str.Length; i++)
            {
                char chr = str[i];

                switch (chr)
                {
                case (' '):
                    pushString();
                    AppendElement(new TextElementSpace(4, format, dialogFormat));
                    break;

                case ('\n'):
                    pushString();
                    NewLine();
                    break;

                default:
                    builder.Append(chr);
                    break;
                }
            }

            pushString();
        }
Ejemplo n.º 10
0
        public void DrawChars(IEnumerable <char> chars, float width, float height, TextFormatting format, TextDialog dialog, Matrix transform, TextCursorPosition cursorPos)
        {
            float offset = 0;

            var skew = new Matrix(
                1, 0, 0, 0,
                format.Italic ? -4f / 16 : 0, 1, 0, 0,
                0, 0, 1, 0,
                0, 0, 0, 1
                );
            var skewCenter = Matrix.CreateTranslation(-width / 2, -height / 2, 0) * skew * Matrix.CreateTranslation(width / 2, height / 2, 0);

            Scene.PushSpriteBatch(transform: skewCenter * transform);

            DrawAreaDebug(Vector2.Zero, new Vector2(width, height));
            foreach (var chr in chars)
            {
                var par = format.GetParams(cursorPos + new Vector2(offset, 0));
                DrawChar(chr, new Vector2(offset, 0), format, dialog.Transform(par, cursorPos + new Vector2(offset, 0)));
                cursorPos.AddCharacters(1);
                offset += format.GetCharWidth(chr) + 1;
            }
            Scene.PopSpriteBatch();
        }
Ejemplo n.º 11
0
 public TextElementSymbol(Symbol symbol, TextFormatting format, DialogFormatting dialogFormat)
 {
     Symbol       = symbol;
     Format       = format;
     DialogFormat = dialogFormat;
 }
Ejemplo n.º 12
0
 public TextElementSpace(float width, TextFormatting format, DialogFormatting dialogFormat)
 {
     Width        = width;
     Format       = format;
     DialogFormat = dialogFormat;
 }
Ejemplo n.º 13
0
 public TextElementWord(string text, TextFormatting format, DialogFormatting dialogFormat)
 {
     Text         = text;
     Format       = format;
     DialogFormat = dialogFormat;
 }
Ejemplo n.º 14
0
 public TextElementIcon(IDrawableIcon icon, TextFormatting format, DialogFormatting dialogFormat)
 {
     Icon         = icon;
     Format       = format;
     DialogFormat = dialogFormat;
 }
Ejemplo n.º 15
0
 public static void AppendSymbol(this TextBuilder builder, Symbol symbol, TextFormatting format = null, DialogFormatting dialogFormat = null)
 {
     builder.AppendSymbol(symbol, format, dialogFormat);
 }
Ejemplo n.º 16
0
 public static void AppendText(this TextBuilder builder, string str, TextFormatting format = null, DialogFormatting dialogFormat = null)
 {
     builder.AppendText(str, format, dialogFormat);
 }