Преглед на файлове

changed adjustColor, added colorGain

ncannasse преди 8 години
родител
ревизия
91f6ebe957
променени са 2 файла, в които са добавени 36 реда и са изтрити 6 реда
  1. 15 6
      h2d/Drawable.hx
  2. 21 0
      h3d/Matrix.hx

+ 15 - 6
h2d/Drawable.hx

@@ -1,5 +1,13 @@
 package h2d;
 
+typedef ColorAdjust = {
+	?saturation : Float,
+	?lightness : Float,
+	?hue : Float,
+	?contrast : Float,
+	?gain : { color : Int, alpha : Float },
+};
+
 class Drawable extends Sprite {
 
 	public var color(default,null) : h3d.Vector;
@@ -57,8 +65,8 @@ class Drawable extends Sprite {
 		return colorKey = v;
 	}
 
-	public function adjustColor( saturation = 0., lightness = 0., hue = 0., contrast = 0. ) {
-		if( saturation == 0 && lightness == 0 && hue == 0 && contrast == 0 )
+	public function adjustColor( ?col : ColorAdjust ) {
+		if( col == null )
 			colorMatrix = null;
 		else {
 			var m = colorMatrix;
@@ -67,10 +75,11 @@ class Drawable extends Sprite {
 				colorMatrix = m;
 			}
 			m.identity();
-			if( hue != 0 ) m.colorHue(hue);
-			if( saturation != 0 ) m.colorSaturation(saturation);
-			if( contrast != 0 ) m.colorContrast(contrast);
-			if( lightness != 0 ) m.colorLightness(lightness);
+			if( col.hue != null ) m.colorHue(col.hue);
+			if( col.saturation != null ) m.colorSaturation(col.saturation);
+			if( col.contrast != null ) m.colorContrast(col.contrast);
+			if( col.lightness != null ) m.colorLightness(col.lightness);
+			if( col.gain != null ) m.colorGain(col.gain.color, col.gain.alpha);
 		}
 	}
 

+ 21 - 0
h3d/Matrix.hx

@@ -516,6 +516,7 @@ class Matrix {
 		var sinA = Math.sin(-hue);
 		var ch = (1 - cosA) / 3;
 
+		var tmp = tmp;
 		tmp._11 = cosA + ch;
 		tmp._12 = ch - SQ13 * sinA;
 		tmp._13 = ch + SQ13 * sinA;
@@ -539,6 +540,7 @@ class Matrix {
 		var r = is * lumR;
 		var g = is * lumG;
 		var b = is * lumB;
+		var tmp = tmp;
 		tmp._11 = r + sat;
 		tmp._12 = r;
 		tmp._13 = r;
@@ -555,6 +557,7 @@ class Matrix {
 	}
 
 	public function colorContrast( contrast : Float ) {
+		var tmp = tmp;
 		var v = contrast + 1;
 		tmp._11 = v;
 		tmp._12 = 0;
@@ -577,6 +580,24 @@ class Matrix {
 		_43 += lightness;
 	}
 
+	public function colorGain( color : Int, alpha : Float ) {
+		var tmp = tmp;
+		tmp._11 = 1 - alpha;
+		tmp._12 = 0;
+		tmp._13 = 0;
+		tmp._21 = 0;
+		tmp._22 = 1 - alpha;
+		tmp._23 = 0;
+		tmp._31 = 0;
+		tmp._32 = 0;
+		tmp._33 = 1 - alpha;
+		tmp._41 = (((color >> 16) & 0xFF) / 255) * alpha;
+		tmp._42 = (((color >> 8) & 0xFF) / 255) * alpha;
+		tmp._43 = ((color & 0xFF) / 255) * alpha;
+		multiply3x4(this, tmp);
+	}
+
+
 	public function colorBits( bits : Int, blend : Float ) {
 		var t11 = 0., t12 = 0., t13 = 0.;
 		var t21 = 0., t22 = 0., t23 = 0.;