Selaa lähdekoodia

Fx2d: text add shadows

Tom SPIRA 5 vuotta sitten
vanhempi
commit
0961cdc5d6
1 muutettua tiedostoa jossa 109 lisäystä ja 2 poistoa
  1. 109 2
      hrt/prefab/fx2d/Text.hx

+ 109 - 2
hrt/prefab/fx2d/Text.hx

@@ -3,7 +3,6 @@ package hrt.prefab.fx2d;
 class Text extends Object2D {
 
 	// parameters
-
 	var color : Int = 16777215;
 	var size : Int = 12;
 	var cutoff : Float = 0.5;
@@ -12,6 +11,24 @@ class Text extends Object2D {
 
 	var pathFont : String;
 
+	// TextShadow
+	var enableTextShadow : Bool = false;
+	var tsDx: Float = 0;
+	var tsDy: Float = 0;
+	var tsColor: Int;
+	var tsAlpha: Float = 1;
+
+	// DropShadow
+	var enableDropShadow : Bool = false;
+	var dsDistance: Float = 0;
+	var dsAngle: Float = 0;
+	var dsColor: Int;
+	var dsAlpha: Float = 1;
+	var dsRadius: Float = 0;
+	var dsGain: Float = 1;
+	var dsQuality: Float = 1;
+	var dsSmoothColor: Bool = true;
+
 	#if editor
 	var text : String = "";
 	#end
@@ -26,6 +43,26 @@ class Text extends Object2D {
 		this.smoothing = v.smoothing;
 		this.pathFont = v.pathFont;
 		this.align = v.align;
+
+		if (v.enableTextShadow != null) this.enableTextShadow = v.enableTextShadow;
+		if (v.tsDx != null) this.tsDx = v.tsDx;
+		if (v.tsDy != null) this.tsDy = v.tsDy;
+		if (v.tsColor != null) this.tsColor = v.tsColor;
+		if (v.tsAlpha != null) this.tsAlpha = v.tsAlpha;
+
+		if (v.enableDropShadow != null) this.enableDropShadow = v.enableDropShadow;
+		if (v.dsDistance != null) this.dsDistance = v.dsDistance;
+		if (v.dsAngle != null)	this.dsAngle = v.dsAngle;
+		if (v.dsColor != null) this.dsColor = v.dsColor;
+		if (v.dsAlpha != null) this.dsAlpha = v.dsAlpha;
+		if (v.dsRadius != null) this.dsRadius = v.dsRadius;
+		if (v.dsGain != null) this.dsGain = v.dsGain;
+		if (v.dsQuality != null) this.dsQuality = v.dsQuality;
+		if (v.dsSmoothColor != null) this.dsSmoothColor = v.dsSmoothColor;
+			
+		#if editor
+		this.text = v.text;
+		#end
 	}
 
 	override function save() {
@@ -36,6 +73,25 @@ class Text extends Object2D {
 		o.smoothing = smoothing;
 		o.pathFont = pathFont;
 		o.align = align;
+		o.dsDistance = dsDistance;
+
+		o.enableTextShadow = enableTextShadow;
+		o.tsDx = tsDx;
+		o.tsDy = tsDy;
+		o.tsColor = tsColor;
+		o.tsAlpha = tsAlpha;
+
+		o.enableDropShadow = enableDropShadow;
+		o.dsAngle = dsAngle;
+		o.dsColor = dsColor;
+		o.dsAlpha = dsAlpha;
+		o.dsRadius = dsRadius;
+		o.dsGain = dsGain;
+		o.dsQuality = dsQuality;
+		o.dsSmoothColor = dsSmoothColor;
+		#if editor
+		o.text = text;
+		#end
 		return o;
 	}
 
@@ -45,6 +101,31 @@ class Text extends Object2D {
 		h2dText.visible = visible;
 		h2dText.color = h3d.Vector.fromColor(color);
 		h2dText.color.w = 1;
+
+		if (enableTextShadow) {
+			h2dText.dropShadow = {
+				dx: tsDx,
+				dy: tsDy,
+				color: tsColor,
+				alpha: tsAlpha
+			};
+		} else {
+			h2dText.dropShadow = null;
+		}
+
+		if (enableDropShadow) {
+			h2dText.filter = new h2d.filter.DropShadow(
+				dsDistance,
+				dsAngle,
+				dsColor,
+				dsAlpha,
+				dsRadius,
+				dsGain,
+				dsQuality,
+				dsSmoothColor
+			);
+		} else 
+			h2dText.filter = null;
 		
 		h2dText.textAlign = switch (align) {
 			case 1:
@@ -184,9 +265,35 @@ class Text extends Object2D {
 			ctx.onChange(this, pname);
 		});
 
+		ctx.properties.add(new hide.Element('<div class="group" name="Text Shadow (double render)">
+			<dl>
+				<dt>Enable</dt><dd><input type="checkbox" field="enableTextShadow" /></dd><br />
+				<dt>DX</dt><dd><input type="range" min="-50" max="50" step="1" field="tsDx" /></dd>
+				<dt>DY</dt><dd><input type="range" min="-50" max="50" step="1" field="tsDy" /></dd>
+				<dt>Color</dt><dd><input type="color" field="tsColor" /></dd>
+				<dt>Alpha</dt><dd><input type="range" min="0" max="1" step="0.01" field="tsAlpha" /></dd>
+			</dl></div>'), this, function(pname) {
+			ctx.onChange(this, pname);
+		});
+
+		ctx.properties.add(new hide.Element('<div class="group" name="Drop Shadow">
+			<dl>
+				<dt>Enable</dt><dd><input type="checkbox" field="enableDropShadow" /></dd><br />
+				<dt>Distance</dt><dd><input type="range" min="-50" max="50" step="1" field="dsDistance" /></dd>
+				<dt>Angle</dt><dd><input type="range" min="-1.571" max="1.571" step="0.0524" field="dsAngle" /></dd>
+				<dt>Color</dt><dd><input type="color" field="dsColor" /></dd>
+				<dt>Alpha</dt><dd><input type="range" min="0" max="1" step="0.01" field="dsAlpha" /></dd>
+				<dt>Radius</dt><dd><input type="range" min="0" max="50" step="1" field="dsRadius" /></dd>
+				<dt>Gain</dt><dd><input type="range" min="0.1" max="50" step="0.1" field="dsGain" /></dd>
+				<dt>Quality</dt><dd><input type="range" min="0" max="1" step="0.01" field="dsQuality" /></dd>
+				<dt>Smooth Color</dt><dd><input type="checkbox" field="dsSmoothColor" /></dd>
+			</dl></div>'), this, function(pname) {
+			ctx.onChange(this, pname);
+		});
+
 		ctx.properties.add(new hide.Element('<div class="group" name="Responsive">
 			<dl>
-				<dt>Text (not saved)</dt><dd><input type="text" field="text" /></dd>
+				<dt>Text</dt><dd><input type="text" field="text" /></dd>
 			</dl></div>'), this, function(pname) {
 			ctx.onChange(this, pname);
 		});