package hrt.prefab.l2d; class Text extends Object2D { // parameters @:s var color : Int = 0xFFFFFF; @:s var size : Int = 12; @:s var cutoff : Float = 0.5; @:s var smoothing : Float = 1 / 32; @:s var align : Int = 0; @:s var pathFont : String; // TextShadow @:s var enableTextShadow : Bool = false; @:s var tsDx: Float = 0; @:s var tsDy: Float = 0; @:s var tsColor: Int; @:s var tsAlpha: Float = 1; // DropShadow @:s var enableDropShadow : Bool = false; @:s var dsDistance: Float = 0; @:s var dsAngle: Float = 0; @:s var dsColor: Int; @:s var dsAlpha: Float = 1; @:s var dsRadius: Float = 0; @:s var dsGain: Float = 1; @:s var dsQuality: Float = 1; @:s var dsSmoothColor: Bool = true; #if editor @:s var text : String = ""; #end override public function load(v:Dynamic) { super.load(v); if( v.blendMode == null ) blendMode = Alpha; } override function updateInstance( ctx: Context, ?propName : String ) { super.updateInstance(ctx, propName); var h2dText = (cast ctx.local2d : h2d.HtmlText); 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: Center; case 2: Right; default: Left; } var font = loadFont(); if (font != null) h2dText.font = font; #if editor if (propName == null || propName == "text") { h2dText.text = text; } var int = Std.downcast(h2dText.getChildAt(0),h2d.Interactive); if( int != null ) { @:privateAccess { h2dText.rebuild(); int.width = h2dText.calcWidth; int.height = h2dText.calcHeight; switch (h2dText.textAlign) { case Center: int.x = -int.width/2; case Right: int.x = -int.width; default: int.x = 0; } } } #end } override function makeInstance(ctx:Context):Context { ctx = ctx.clone(this); var h2dText = new h2d.HtmlText(hxd.res.DefaultFont.get(), ctx.local2d); h2dText.text = ""; h2dText.smooth = true; ctx.local2d = h2dText; ctx.local2d.name = name; updateInstance(ctx); return ctx; } public dynamic function loadFont() : h2d.Font { var f = defaultLoadFont(pathFont, size, cutoff, smoothing); if (f == null) { if (pathFont != null && pathFont.length > 0) { var font = hxd.res.Loader.currentInstance.load(pathFont).to(hxd.res.BitmapFont); return font.toSdfFont(size, MultiChannel, cutoff, smoothing); } else { return null; } } else return f; } public static dynamic function defaultLoadFont( pathFont : String, size : Int, cutoff : Float, smoothing : Float ) : h2d.Font { return null; } #if editor override function makeInteractive(ctx:Context):h2d.Interactive { var local2d = ctx.local2d; if(local2d == null) return null; var text = cast(local2d, h2d.Text); @:privateAccess { text.rebuild(); text.updateSize(); } @:privateAccess var int = new h2d.Interactive(text.calcWidth, text.calcHeight); text.addChildAt(int, 0); int.propagateEvents = true; return int; } override function edit( ctx : EditContext ) { super.edit(ctx); var parameters = new hide.Element('
'); var gr = new hide.Element('