def write_line(text, x = nil, y = nil, mode = :left, color = 0, alpha = 0xff,
                   effect = nil, effect_color = 0, effect_size = 1, effect_alpha = 0xff,
                   z_index = 0)
      if text.is_a? Hash
        x = text[:x]
        y = text[:y]
        mode = text.fetch(:mode, :left)
        color = text.fetch(:color, 0)
        alpha = text.fetch(:alpha, 0xff)
        effect = text.fetch(:effect, nil)
        effect_color = text.fetch(:effect_color, 0)
        effect_size = text.fetch(:effect_size, 1)
        effect_alpha = text.fetch(:effect_alpha, 0xff)
        z_index = text.fetch(:z_index, 0)
        text = text[:text]
      end

      color = (alpha << 24) | color
      rel =
        case mode
        when :left then 0
        when :center then 0.5
        when :right then 1
        else 0
        end
      if effect
        effect_color = (effect_alpha << 24) | effect_color
        if effect == :border
          @font.draw_markup_rel text, x - effect_size, y - effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x, y - effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x + effect_size, y - effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x + effect_size, y, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x + effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x, y + effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x - effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x - effect_size, y, z_index, rel, 0, 1, 1, effect_color
        elsif effect == :shadow
          @font.draw_markup_rel text, x + effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
        end
      end
      @font.draw_markup_rel text, x, y, z_index, rel, 0, 1, 1, color
    end
def write_line(text, x = nil, y = nil, mode = :left, color = 0, alpha = 0xff,
                   effect = nil, effect_color = 0, effect_size = 1, effect_alpha = 0xff,
                   z_index = 0)
      if text.is_a? Hash
        x = text[:x]
        y = text[:y]
        mode = text.fetch(:mode, :left)
        color = text.fetch(:color, 0)
        alpha = text.fetch(:alpha, 0xff)
        effect = text.fetch(:effect, nil)
        effect_color = text.fetch(:effect_color, 0)
        effect_size = text.fetch(:effect_size, 1)
        effect_alpha = text.fetch(:effect_alpha, 0xff)
        z_index = text.fetch(:z_index, 0)
        text = text[:text]
      end

      color = (alpha << 24) | color
      rel =
        case mode
        when :left then 0
        when :center then 0.5
        when :right then 1
        else 0
        end
      if effect
        effect_color = (effect_alpha << 24) | effect_color
        if effect == :border
          @font.draw_markup_rel text, x - effect_size, y - effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x, y - effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x + effect_size, y - effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x + effect_size, y, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x + effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x, y + effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x - effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
          @font.draw_markup_rel text, x - effect_size, y, z_index, rel, 0, 1, 1, effect_color
        elsif effect == :shadow
          @font.draw_markup_rel text, x + effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
        end
      end
      @font.draw_markup_rel text, x, y, z_index, rel, 0, 1, 1, color
    end
Creates a TextHelper.

 Parameters:
 [font] A <code>Gosu::Font</code> that will be used to draw the text.
 [line_spacing] When drawing multiple lines, the distance, in pixels,
                between each line.
 Draws a single line of text.

 Parameters:
 [text] The text to be drawn. No line breaks are allowed. You can use the
        `<b>` tag for bold, `<i>` for italic and `<c=rrggbb>` for colors.
 [x] The horizontal reference for drawing the text. If +mode+ is +:left+,
     all text will be drawn from this point to the right; if +mode+ is
     +:right+, all text will be drawn from this point to the left; and if
     +mode+ is +:center+, the text will be equally distributed to the
     left and to the right of this point.
 [y] The vertical reference for drawing the text. All text will be drawn
     from this point down.
 [mode] The alignment of the text. Valid values are +:left+, +:right+ and
        +:center+.
 [color] The color of the text, in hexadecimal RRGGBB format.
 [alpha] The opacity of the text. Valid values vary from 0 (fully
         transparent) to 255 (fully opaque).
 [effect] Effect to add to the text. It can be either +nil+, for no effect,
          +:border+ for bordered text, or +:shadow+ for shadowed text (the
          shadow is always placed below and to the right of the text).
 [effect_color] Color of the effect, if any.
 [effect_size] Size of the effect, if any. In the case of +:border+, this
               will be the width of the border (the border will only look
               good when +effect_size+ is relatively small, compared to the
               size of the font); in the case of +:shadow+, it will be the
               distance between the text and the shadow.
 [effect_alpha] Opacity of the effect, if any. For shadows, it is usual to
                provide less than 255.
 [z_index] The z-order to draw the object. Objects with larger z-orders
           will be drawn on top of the ones with smaller z-orders.

 *Obs.:* This method accepts named parameters, but +text+, +x+ and +y+ are
 mandatory.