module Cache #-------------------------------------------------------------------------- # ● saveのビットマップを作成 #-------------------------------------------------------------------------- def self.make_Cache_lamp_bitmap(id,min_r , reduce_degree,color1,color2) @cache ||= {} sid = sprintf("lamp%s" , id) r = change_radius(id, min_r , reduce_degree) bmp_size = 2 * r + 6 bitmap = Bitmap.new(bmp_size , bmp_size) make_dark_lamp_bmp(bitmap, bmp_size / 2 , bmp_size / 2 , r , color1,color2) @cache[sid] = bitmap unless include?(sid) end #-------------------------------------------------------------------------- # ● saveのビットマップを取得 #-------------------------------------------------------------------------- def self.load_Cache_lamp_bitmap(id) @cache ||= {} sid = sprintf("lamp%s" , id) @cache[sid] end def self.change_radius(id, min_r , reduce_degree) return min_r + reduce_degree * id end def self.make_dark_lamp_bmp(bmp,x0,y0,r,color1,color2 = nil) for x in 0..bmp.width for y in 0..bmp.height make_dark_lamp_bmp_pt(bmp,x0,y0,x,y,r,color1,color2) end end end def self.make_dark_lamp_bmp_pt(bmp,x0 , y0 , x , y , r , color1 , color2 = nil) dx = x - x0 dy = y - y0 if dx ** 2 + dy ** 2 >= r ** 2 bmp.set_pixel(x, y, color1) elsif dx ** 2 + dy ** 2 >= (r / 2) ** 2 paint_circle(bmp,x0 , y0 , x , y , r , color1) else return end end def self.paint_circle(bmp,x0 , y0 , x , y , r , color1) dx = x - x0 dy = y - y0 halfr = 1.0 * r / 2 a = (255 * 4) / (3.0 * r ** 2) alp = [a * ((dx ** 2 + dy ** 2) - (r ** 2 / 4.0) ), 255].min newcolor = Color.new newcolor.set(color1) newcolor.alpha = alp #~ color1.alpha = d bmp.set_pixel(x, y, newcolor) end end