# 绘制色彩渐变v1.1 更新取消了脚本基需求,脑残了 - -b
# 说明:文字中输入\u[颜色1,颜色2...] 就以渐变色绘制文字,结束渐变插入\u,大小写均可
# 插入文本框测试例子:\u[0,18,9,8]这是渐变文字\u渐变结束
class Window_Base
GRADUAL_SYM = 'U' #修改控制符,需大写。
#-
  alias_method :process_escape_character_NOgradual, :process_escape_character
  def process_escape_character(code, text, pos)
    code.upcase == GRADUAL_SYM ?
      obtain_gradual_param(text, pos) :
      process_escape_character_NOgradual(code, text, pos)
  end
  def obtain_gradual_param(text, pos)
    text = text.slice!(/^\[.*]/)
    if text
      pos[:colors] = []
      text.scan(/\d+/).each_with_index {|c, i| pos[:colors][i] = c.to_i}
      return if pos[:colors].size >= 2
    end
    pos[:colors] = nil
  end
  #
  alias_method :process_nomarl_character_NOgradual, :process_normal_character
  def process_normal_character(c, pos)
    pos[:colors] ?
      process_nomarl_character_gradual(c, pos) :
      process_nomarl_character_NOgradual(c, pos)
  end
  def process_nomarl_character_gradual(c, pos)
    text_width = text_size(c).width
    draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c)
    colors = pos[:colors].collect {|c| text_color(c)}
    csz = colors.size
    uy = pos[:y]
    l = (pos[:y] + pos[:height] - uy).fdiv(csz - 1)
    for x in pos[:x]...(pos[:x] + text_width)
      sy = uy
      colors.each_with_index {|c1, i|
        for y in sy.round...(sy + l).round
          c = contents.get_pixel(x, y)
          next if c.alpha == 0
          r = (y - sy) / l
          c2 = colors[i + 1]
          c.red *= calc_gradual_rgb(r, c1.red, c2.red)
          c.blue *= calc_gradual_rgb(r, c1.blue, c2.blue)
          c.green *= calc_gradual_rgb(r, c1.green, c2.green)
          contents.set_pixel(x, y, c)
        end
        break if i == csz - 2
        sy += l
      }
    end
    pos[:x] += text_width
  end
  def calc_gradual_rgb(r, v1,v2)
    (v2 > v1 ? (r * (v2-v1) + v1) : ((1-r) * (v1-v2) + v2)) / 255
  end
end