module Rubygame::Color::ColorBase
A mix-in module defining color arithmetic operations.
Public Instance Methods
Perform color multiplication with another color of any type. The alpha of the new color will be equal to the alpha of the receiver.
# File lib/rubygame/color/models/base.rb, line 43 def *(other) wrap( simple_op(other) { |a,b| a * b } ) end
Perform color addition with another color of any type. The alpha of the new color will be equal to the alpha of the receiver.
# File lib/rubygame/color/models/base.rb, line 29 def +(other) wrap( simple_op(other) { |a,b| a + b } ) end
Perform color subtraction with another color of any type. The alpha of the new color will be equal to the alpha of the receiver.
# File lib/rubygame/color/models/base.rb, line 36 def -(other) wrap( simple_op(other) { |a,b| a - b } ) end
Perform color division with another color of any type. The alpha of the new color will be equal to the alpha of the receiver.
# File lib/rubygame/color/models/base.rb, line 50 def /(other) wrap( simple_op(other) { |a,b| a / b } ) end
Average this color with another color. (Linear weighted average)
A weight of 0.0 means 0% of this color, 100% of the other. A weight of 1.0 means 100% of this color, 0% of the other. A weight of 0.5 means 50% of each color.
# File lib/rubygame/color/models/base.rb, line 74 def average(other, weight=0.5) c1, c2 = self.to_rgba_ary, other.to_rgba_ary rgba = [0,1,2,3].collect do |i| clamp( c1.at(i)*weight + c2.at(i)*(1-weight) ) end wrap( rgba ) end
Layer this color over another color.
# File lib/rubygame/color/models/base.rb, line 55 def over(other) c1, c2 = self.to_rgba_ary, other.to_rgba_ary a1, a2 = c1[3], c2[3] rgba = [0,1,2].collect do |i| clamp( a1*c1.at(i) + a2*c2.at(i)*(1-a1) ) end rgba << ( a1 + a2*(1-a1) ) wrap( rgba ) end
Private Instance Methods
# File lib/rubygame/color/models/base.rb, line 103 def clamp(v, min=0.0, max=1.0) v = min if v < min v = max if v > max return v end
# File lib/rubygame/color/models/base.rb, line 90 def simple_op(other, &block) c1, c2 = self.to_rgba_ary, other.to_rgba_ary a1, a2 = c1[3], c2[3] rgba = [0,1,2].collect do |i| clamp( block.call( a1*c1.at(i), a2*c2.at(i) ) ) end rgba << a1 return rgba end
# File lib/rubygame/color/models/base.rb, line 86 def wrap( rgba ) self.class.new_from_rgba( rgba ) end