/// <summary>Draws an underline (or a strikethrough).</summary> public override void DrawUnderline(Renderman renderer) { // Setup the mesh: if (Underline == null) { // We'll need the root gameObject - this should always be on a TextNode, but the parentNode // will always be an Element. Therefore we can grab the gameObject via that parentNode: HtmlElement parent = RenderData.Node.parentNode as HtmlElement; Underline = new MeshBufferExtruded(parent.rootGameObject.transform); // Update material: Underline.SetMaterial(new Material(renderer.CurrentShaderSet.Extruded)); Underline.ExtrudeAmount = Extrude; } // Update colours: Underline.FrontColor = renderer.FontColour; Underline.BackColor = renderer.FontColour; Underline.SideColor = renderer.FontColour; BoxRegion region = renderer.CurrentRegion; // 4 corners (back face): Vector3 a = renderer.PixelToWorldUnit(region.X, region.Y, renderer.TextDepth); Vector3 b = renderer.PixelToWorldUnit(region.MaxX, region.Y, renderer.TextDepth); Vector3 c = renderer.PixelToWorldUnit(region.MaxX, region.MaxY, renderer.TextDepth); Vector3 d = renderer.PixelToWorldUnit(region.X, region.MaxY, renderer.TextDepth); // Build a simple cube: Underline.BuildCube(a, b, c, d); }
internal override void Layout(LayoutBox box, Renderman renderer) { if (Characters == null) { return; } // Setup the mesh: if (Mesh == null) { // We'll need the root gameObject - this should always be on a TextNode, but the parentNode // will always be an Element. Therefore we can grab the gameObject via that parentNode: HtmlElement parent = RenderData.Node.parentNode as HtmlElement; Mesh = new MeshBufferExtruded(parent.rootGameObject.transform); // Update material: Mesh.SetMaterial(new Material(renderer.CurrentShaderSet.Extruded)); Mesh.ExtrudeAmount = Extrude; } // Get the font colour: Color fontColour = BaseColour * renderer.ColorOverlay; // Update colours: Mesh.FrontColor = fontColour; Mesh.BackColor = fontColour; Mesh.SideColor = fontColour; // Update size: Mesh.XScaleFactor = FontSize; Mesh.YScaleFactor = FontSize; int verts = 0; int tris = 0; for (int i = 0; i < Characters.Length; i++) { // Add vert/ tri count: Glyph character = Characters[i]; if (character == null) { continue; } int localTriCount; verts += Mesh.GetVertCount(character, out localTriCount); tris += localTriCount; } // Apply the size: Mesh.RequireSize(verts, tris); // Draw now! base.Layout(box, renderer); // Flush the mesh: Mesh.Flush(); }