瀏覽代碼

FX2D: pre-loop & text

Tom Spira 6 年之前
父節點
當前提交
20093940c1
共有 3 個文件被更改,包括 103 次插入1 次删除
  1. 1 1
      hide/view/FXEditor.hx
  2. 6 0
      hrt/prefab/fx/FX2D.hx
  3. 96 0
      hrt/prefab/fx2d/Text.hx

+ 1 - 1
hide/view/FXEditor.hx

@@ -74,7 +74,7 @@ private class FXSceneEditor extends hide.comp.SceneEditor {
 
 		var menu = [];
 		if (@:privateAccess parent.is2D) {
-			for(name in ["Group 2D", "Bitmap", "Anim2D", "Atlas", "Shaders", "Shader Graph"]) {
+			for(name in ["Group 2D", "Bitmap", "Anim2D", "Atlas", "Text", "Shaders", "Shader Graph"]) {
 				var item = allTypes.find(i -> i.label == name);
 				if(item == null) continue;
 				allTypes.remove(item);

+ 6 - 0
hrt/prefab/fx/FX2D.hx

@@ -12,6 +12,7 @@ class FX2DAnimation extends h2d.Object {
 
 	public var playSpeed : Float;
 	public var localTime : Float = 0.0;
+	public var startLoop : Float = 0.0;
 	public var duration : Float;
 
 	public var loop : Bool;
@@ -118,6 +119,7 @@ class FX2DAnimation extends h2d.Object {
 class FX2D extends BaseFX {
 	
 	var loop : Bool = false;
+	var startLoop : Float = 0.0;
 
 	public function new() {
 		super();
@@ -128,12 +130,14 @@ class FX2D extends BaseFX {
 		var obj : Dynamic = super.save();
 		obj.type = type;
 		obj.loop = loop;
+		obj.startLoop = startLoop;
 		return obj;
 	}
 
 	override function load( obj : Dynamic ) {
 		super.load(obj);
 		loop = obj.loop;
+		startLoop = obj.startLoop;
 	}
 
 	override public function refreshObjectAnims(ctx: Context) {
@@ -218,6 +222,7 @@ class FX2D extends BaseFX {
 		var fxanim = createInstance(ctx.local2d);
 		fxanim.duration = duration;
 		fxanim.loop = loop;
+		fxanim.startLoop = startLoop;
 		ctx.local2d = fxanim;
 		fxanim.playSpeed = 1.0;
 
@@ -260,6 +265,7 @@ class FX2D extends BaseFX {
 				<dl>
 					<dt>Duration</dt><dd><input type="number" value="0" field="duration"/></dd>
 					<dt>Loop</dt><dd><input type="checkbox" field="loop"/></dd>
+					<dt>Start loop</dt><dd><input type="range" min="0" max="5" field="startLoop"/></dd>
 				</dl>
 			</div>');
 		ctx.properties.add(props, this, function(pname) {

+ 96 - 0
hrt/prefab/fx2d/Text.hx

@@ -0,0 +1,96 @@
+package hrt.prefab.fx2d;
+
+class Text extends Object2D {
+
+	// parameters
+
+	var h2dText : h2d.Text;
+	var color : Int = 16777215;
+	var size : Int = 12;
+	var cutoff : Float = 0.5;
+	var smoothing : Float = 1 / 32;
+
+	var pathFont : String;
+
+	override public function load(v:Dynamic) {
+		super.load(v);
+		if (v.blendMode == null)
+			blendMode = Alpha;
+		this.color = v.color;
+		this.size = v.size;
+		this.cutoff = v.cutoff;
+		this.smoothing = v.smoothing;
+		this.pathFont = v.pathFont;
+	}
+
+	override function save() {
+		var o : Dynamic = super.save();
+		o.color = color;
+		o.size = size;
+		o.cutoff = cutoff;
+		o.smoothing = smoothing;
+		o.pathFont = pathFont;
+		return o;
+	}
+
+	override function updateInstance( ctx: Context, ?propName : String ) {
+		super.updateInstance(ctx, propName);
+		h2dText.visible = visible;
+		h2dText.color = h3d.Vector.fromColor(color);
+		h2dText.color.w = 1;
+		if (pathFont != null && pathFont.length > 0) {
+			var font = hxd.res.Loader.currentInstance.load(pathFont).to(hxd.res.BitmapFont);
+			h2dText.font = font.toSdfFont(size, Alpha, cutoff, smoothing);
+		}
+	}
+
+	override function makeInstance(ctx:Context):Context {
+		ctx = ctx.clone(this);
+		h2dText = new h2d.Text(hxd.res.DefaultFont.get(), ctx.local2d);
+		h2dText.text = "Lorem ipsum dolor";
+		h2dText.smooth = true;
+		ctx.local2d = h2dText;
+		ctx.local2d.name = name;
+		ctx.cleanup = function() { h2dText = null; }
+		updateInstance(ctx);
+		return ctx;
+	}
+
+	#if editor
+	override function edit( ctx : EditContext ) {
+		super.edit(ctx);
+		
+		var parameters = new hide.Element('<div class="group" name="Parameters"></div>');
+
+		var gr = new hide.Element('<dl></dl>').appendTo(parameters);
+
+		new hide.Element('<dt>Font</dt>').appendTo(gr);
+		var element = new hide.Element('<dd></dd>').appendTo(gr);
+		var fileInput = new hide.Element('<input type="text" field="pathFont" style="width:165px" />').appendTo(element);
+
+		var tfile = new hide.comp.FileSelect(["fnt"], null, fileInput);
+		if (this.pathFont != null && this.pathFont.length > 0) tfile.path = this.pathFont;
+		tfile.onChange = function() {
+			this.pathFont = tfile.path;
+			updateInstance(ctx.getContext(this), "src");
+		}
+
+		new hide.Element('<dt>Color</dt><dd><input type="color" field="color" /></dd>').appendTo(gr);
+		new hide.Element('<dt>Size</dt><dd><input type="range" min="1" max="50" step="1" field="size" /></dd>').appendTo(gr);
+		new hide.Element('<dt>Cutoff</dt><dd><input type="range" min="0" max="1" field="cutoff" /></dd>').appendTo(gr);
+		new hide.Element('<dt>Smoothing</dt><dd><input type="range" min="0" max="1" field="smoothing" /></dd>').appendTo(gr);
+		
+		ctx.properties.add(parameters, this, function(pname) {
+			ctx.onChange(this, pname);
+		});
+	}
+
+	override function getHideProps() : HideProps {
+		return { icon : "square", name : "Text" };
+	}
+
+	#end
+
+	static var _ = Library.register("text", Text);
+
+}