/// <summary> /// Full constructor with per-instance alignment modes. /// </summary> public UITextInstance( UIText parentText, string text, float xPos, float yPos, float scale, int depth, Color[] colors, UITextAlignMode alignMode, UITextVerticalAlignMode verticalAlignMode ) { this.alignMode = alignMode; this.verticalAlignMode = verticalAlignMode; _parentText = parentText; _text = text; this.xPos = xPos; this.yPos = yPos; this.scale = scale; this.depth = depth; this.textIndex = -1; this.colors = colors; _hidden = false; }
/// <summary> /// Full constructor with per-instance alignment modes. /// </summary> public UITextInstance(UIText parentText, string text, float xPos, float yPos, float scale, int depth, Color[] colors, UITextAlignMode alignMode, UITextVerticalAlignMode verticalAlignMode) : base() { _parentText = parentText; _text = text; _scale = scale; this.colors = colors; position = new Vector3(xPos, -yPos, depth); _hidden = false; // Set anchor alignment _alignMode = alignMode; switch (alignMode) { case UITextAlignMode.Left: _anchorInfo.OriginUIxAnchor = UIxAnchor.Left; break; case UITextAlignMode.Center: _anchorInfo.OriginUIxAnchor = UIxAnchor.Center; break; case UITextAlignMode.Right: _anchorInfo.OriginUIxAnchor = UIxAnchor.Right; break; } // Set anchor vertical alignment _verticalAlignMode = verticalAlignMode; switch (verticalAlignMode) { case UITextVerticalAlignMode.Top: _anchorInfo.OriginUIyAnchor = UIyAnchor.Top; break; case UITextVerticalAlignMode.Middle: _anchorInfo.OriginUIyAnchor = UIyAnchor.Center; break; case UITextVerticalAlignMode.Bottom: _anchorInfo.OriginUIyAnchor = UIyAnchor.Bottom; break; } _anchorInfo.OffsetX = xPos; _anchorInfo.OffsetY = yPos; updateSize(); }
/// <summary> /// Full constructor with per-instance alignment modes. /// </summary> public UITextInstance( UIText parentText, string text, float xPos, float yPos, float scale, int depth, Color[] colors, UITextAlignMode alignMode, UITextVerticalAlignMode verticalAlignMode ) : base() { client.transform.position = new Vector3( xPos, yPos, depth ); this.alignMode = alignMode; this.verticalAlignMode = verticalAlignMode; _parentText = parentText; _text = text; this.xPos = xPos; this.yPos = yPos; this.scale = scale; this.depth = depth; this.colors = colors; _hidden = false; }
/// <summary> /// Full constructor with per-instance alignment modes. /// </summary> public UITextInstance( UIText parentText, string text, float xPos, float yPos, float scale, int depth, Color[] colors, UITextAlignMode alignMode, UITextVerticalAlignMode verticalAlignMode ) : base() { _parentText = parentText; _text = text; _scale = scale; this.colors = colors; position = new Vector3( xPos, -yPos, depth ); _hidden = false; // Set anchor alignment _alignMode = alignMode; switch( alignMode ) { case UITextAlignMode.Left: _anchorInfo.OriginUIxAnchor = UIxAnchor.Left; break; case UITextAlignMode.Center: _anchorInfo.OriginUIxAnchor = UIxAnchor.Center; break; case UITextAlignMode.Right: _anchorInfo.OriginUIxAnchor = UIxAnchor.Right; break; } // Set anchor vertical alignment _verticalAlignMode = verticalAlignMode; switch( verticalAlignMode ) { case UITextVerticalAlignMode.Top: _anchorInfo.OriginUIyAnchor = UIyAnchor.Top; break; case UITextVerticalAlignMode.Middle: _anchorInfo.OriginUIyAnchor = UIyAnchor.Center; break; case UITextVerticalAlignMode.Bottom: _anchorInfo.OriginUIyAnchor = UIyAnchor.Bottom; break; } _anchorInfo.OffsetX = xPos; _anchorInfo.OffsetY = yPos; updateSize(); }
public UITextInstance addTextInstance(string text, float xPos, float yPos, float scale, int depth, Color[] colors, UITextAlignMode alignMode, UITextVerticalAlignMode verticalAlignMode) { if (forceLowAscii) { forceLowAsciiString(ref text); } var textInstance = new UITextInstance(this, text, xPos, yPos, scale, depth, colors, alignMode, verticalAlignMode); textInstance.parent = _manager.transform; drawText(textInstance, textInstance.xPos, textInstance.yPos, textInstance.textScale, textInstance.depth, colors, textInstance.alignMode, textInstance.verticalAlignMode); return(textInstance); }
public UITextInstance addTextInstance(string text, float xPos, float yPos, float scale, int depth, Color color, UITextAlignMode alignMode, UITextVerticalAlignMode verticalAlignMode) { return(addTextInstance(text, xPos, yPos, scale, depth, new Color[] { color }, alignMode, verticalAlignMode)); }
/// <summary> /// Performs horizontal alignment of each line independently. /// </summary> private void alignLine(List <UISprite> sprites, int lineStartChar, int lineEndChar, float lineWidth, UITextAlignMode instanceAlignMode) { if (instanceAlignMode == UITextAlignMode.Left) { return; } if (instanceAlignMode == UITextAlignMode.Center) { // Go from start character to end character, INCLUSIVE. for (var i = lineStartChar; i <= lineEndChar; i++) { // HACK: Gabo edit. Changed the if statement from sprites[i] != null because it was causing an error when the // text changed and the number of lines increased. if (i < sprites.Count && sprites[i] != null) { sprites[i].position = new Vector3(sprites[i].position.x - lineWidth / 2.0f, sprites[i].position.y, sprites[i].position.z); } } } else if (instanceAlignMode == UITextAlignMode.Right) { // Go from start character to end character, INCLUSIVE. for (var i = lineStartChar; i <= lineEndChar + 1; i++) { if (i < sprites.Count && sprites[i] != null) { sprites[i].position = new Vector3(sprites[i].position.x - lineWidth, sprites[i].position.y, sprites[i].position.z); } } } }
/// <summary> /// Draw text on screen, create each quad and send it to the manager /// </summary> private void drawText(UITextInstance textInstance, float xPos, float yPos, float scale, int depth, Color[] color, UITextAlignMode instanceAlignMode, UITextVerticalAlignMode instanceVerticalAlignMode) { // Start by resetting textInstance position textInstance.position = Vector3.zero; bool hidden = textInstance.hidden; float dx = 0; float dy = 0; float offsetY; int fontLineSkip = 0; int charId = 0; // Perform word wrapping ahead of sprite allocation! var text = textInstance.text; text = wrapText(text, scale); int lineStartChar = 0; int lineEndChar = 0; float totalHeight = (_fontDetails[ASCII_LINEHEIGHT_REFERENCE].h * scale * lineSpacing); // HACK: Gabo edit int newLinesTotal = 0; for (var i = 0; i < text.Length; i++) { charId = System.Convert.ToInt32(text[i]); if (charId == ASCII_NEWLINE) { // calculate the size to center text on Y axis, based on its scale // 77 is the "M" char usually big enough to get a proper spaced // lineskip, use any other char if you want fontLineSkip += (int)(_fontDetails[ASCII_LINEHEIGHT_REFERENCE].h * scale * lineSpacing); totalHeight += (int)(_fontDetails[ASCII_LINEHEIGHT_REFERENCE].h * scale * lineSpacing); alignLine(textInstance.textSprites, lineStartChar, lineEndChar, dx, instanceAlignMode); lineStartChar = i - newLinesTotal; if (this.Language == UITextLanguage.Arabic) { newLinesTotal++; } if (this.Language == UITextLanguage.Hebrew) { newLinesTotal++; } dx = 0; } else { // calculate the size to center text on Y axis, based on its scale offsetY = _fontDetails[charId].offsety * scale; dy = offsetY + fontLineSkip; } // Extend end of line lineEndChar = i; if (charId != ASCII_NEWLINE) { // add quads for each char // Use curpos instead of i to compensate for line wrapping hyphenation // reuse a UISprite if we have one. if we don't, we need to set it's parent and add it to the textInstance's list var currentTextSprite = textInstance.textSpriteAtIndex(i); var addingNewTextSprite = (currentTextSprite == null); currentTextSprite = configureSpriteForCharId(currentTextSprite, charId, dx, dy, scale, 0); if (addingNewTextSprite) { currentTextSprite.color = color.Length == 1 ? color[0] : color[i]; currentTextSprite.parentUIObject = textInstance; textInstance.textSprites.Add(currentTextSprite); } // Ensure the sprite is hidden if the textInstance is currentTextSprite.hidden = hidden; // See below @NOTE re: offsetx vs. xadvance bugfix. // advance the position to draw the next letter dx += _fontDetails[charId].xadvance * scale; } } alignLine(textInstance.textSprites, lineStartChar, lineEndChar, dx, instanceAlignMode); verticalAlignText(textInstance.textSprites, totalHeight, _fontDetails[ASCII_LINEHEIGHT_REFERENCE].offsety * scale * lineSpacing, instanceVerticalAlignMode); // Re-position textInstance textInstance.position = new Vector3(xPos, yPos, depth); }
/// <summary> /// Performs horizontal alignment of each line independently. /// </summary> private void alignLine(List <UISprite> sprites, int lineStartChar, int lineEndChar, float lineWidth, UITextAlignMode instanceAlignMode) { if (instanceAlignMode == UITextAlignMode.Left) { return; } if (instanceAlignMode == UITextAlignMode.Center) { // Go from start character to end character, INCLUSIVE. for (var i = lineStartChar; i <= lineEndChar; i++) { if (sprites[i] != null) { sprites[i].position = new Vector3(sprites[i].position.x - lineWidth / 2.0f, sprites[i].position.y, sprites[i].position.z); } } } else if (instanceAlignMode == UITextAlignMode.Right) { // Go from start character to end character, INCLUSIVE. for (var i = lineStartChar; i <= lineEndChar; i++) { if (i < sprites.Count && sprites[i] != null) { sprites[i].position = new Vector3(sprites[i].position.x - lineWidth, sprites[i].position.y, sprites[i].position.z); } } } }
/// <summary> /// Draw text on screen, create each quad and send it to the manager /// </summary> private int drawText( string text, float xPos, float yPos, float scale, int depth, Color[] color, UITextAlignMode instanceAlignMode, UITextVerticalAlignMode instanceVerticalAlignMode ) { float dx = xPos; float dy = 0; float offsetY; int fontLineSkip = 0; int charId = 0; UISprite[] sprites = null; // Perform word wrapping ahead of sprite allocation! text = wrapText(text, scale); int length = text.Length; sprites = new UISprite[length]; int lineStartChar = 0; int lineEndChar = 0; float totalHeight = ( _fontDetails[ASCII_LINEHEIGHT_REFERENCE].h * scale * lineSpacing ); for( var i = 0; i < text.Length; i++ ) { charId = System.Convert.ToInt32( text[i] ); if( charId == ASCII_NEWLINE ) { // calculate the size to center text on Y axis, based on its scale // 77 is the "M" char usually big enough to get a proper spaced // lineskip, use any other char if you want fontLineSkip += (int)( _fontDetails[ASCII_LINEHEIGHT_REFERENCE].h * scale * lineSpacing ); totalHeight += (int)( _fontDetails[ASCII_LINEHEIGHT_REFERENCE].h * scale * lineSpacing ); alignLine( sprites, lineStartChar, lineEndChar, dx - xPos, instanceAlignMode ); lineStartChar = i+1; dx = xPos; } else { // calculate the size to center text on Y axis, based on its scale offsetY = _fontDetails[charId].offsety * scale; dy = offsetY + fontLineSkip; } // Extend end of line lineEndChar = i; // add quads for each char // Use curpos instead of i to compensate for line wrapping hyphenation sprites[i] = spriteForCharId( charId, dx, dy + yPos, scale, depth ); _manager.addSprite( sprites[i] ); sprites[i].color = color.Length == 1 ? color[0] : color[i]; // See below @NOTE re: offsetx vs. xadvance bugfix. // advance the position to draw the next letter dx += _fontDetails[charId].xadvance * scale; } alignLine( sprites, lineStartChar, lineEndChar, dx - xPos, instanceAlignMode ); verticalAlignText( sprites, totalHeight, _fontDetails[ASCII_LINEHEIGHT_REFERENCE].offsety * scale * lineSpacing, instanceVerticalAlignMode ); // add all sprites at once to the array, we use this later to delete the strings _textSprites.Add( sprites ); return _textSprites.Count - 1; }
/// <summary> /// Performs horizontal alignment of each line independently. /// </summary> void alignLine( UISprite[] sprites, int lineStartChar, int lineEndChar, float lineWidth, UITextAlignMode instanceAlignMode ) { if ( instanceAlignMode == UITextAlignMode.Left ) return; if ( instanceAlignMode == UITextAlignMode.Center ) { // Go from start character to end character, INCLUSIVE. for ( var i=lineStartChar; i<=lineEndChar; i++ ) { if ( i < sprites.Length && sprites[i] != null ) { sprites[i].position = new Vector3(sprites[i].position.x - lineWidth/2.0f, sprites[i].position.y, sprites[i].position.z); } } } else if ( instanceAlignMode == UITextAlignMode.Right ) { // Go from start character to end character, INCLUSIVE. for ( var i=lineStartChar; i<=lineEndChar; i++ ) { if ( i < sprites.Length && sprites[i] != null ) { sprites[i].position = new Vector3(sprites[i].position.x - lineWidth, sprites[i].position.y, sprites[i].position.z); } } } }
public UITextInstance addTextInstance( string text, float xPos, float yPos, float scale, int depth, Color[] colors, UITextAlignMode alignMode, UITextVerticalAlignMode verticalAlignMode ) { if( forceLowAscii ) forceLowAsciiString( ref text ); var textInstance = new UITextInstance( this, text, xPos, yPos, scale, depth, colors, alignMode, verticalAlignMode ); textInstance.textIndex = drawText( text, xPos, yPos, scale, depth, colors, textInstance.alignMode, textInstance.verticalAlignMode ); return textInstance; }
public UITextInstance addTextInstance( string text, float xPos, float yPos, float scale, int depth, Color color, UITextAlignMode alignMode, UITextVerticalAlignMode verticalAlignMode ) { return addTextInstance( text, xPos, yPos, scale, depth, new Color[] { color }, alignMode, verticalAlignMode ); }
/// <summary> /// Draw text on screen, create each quad and send it to the manager /// </summary> private void drawText( UITextInstance textInstance, float xPos, float yPos, float scale, int depth, Color[] color, UITextAlignMode instanceAlignMode, UITextVerticalAlignMode instanceVerticalAlignMode ) { // Start by resetting textInstance position textInstance.position = Vector3.zero; bool hidden = textInstance.hidden; float dx = 0; float dy = 0; float offsetY; int fontLineSkip = 0; int charId = 0; // Perform word wrapping ahead of sprite allocation! var text = textInstance.text; text = wrapText( text, scale ); int lineStartChar = 0; int lineEndChar = 0; float totalHeight = ( _fontDetails[ASCII_LINEHEIGHT_REFERENCE].h * scale * lineSpacing ); for( var i = 0; i < text.Length; i++ ) { charId = System.Convert.ToInt32( text[i] ); if( charId == ASCII_NEWLINE ) { // calculate the size to center text on Y axis, based on its scale // 77 is the "M" char usually big enough to get a proper spaced // lineskip, use any other char if you want fontLineSkip += (int)( _fontDetails[ASCII_LINEHEIGHT_REFERENCE].h * scale * lineSpacing ); totalHeight += (int)( _fontDetails[ASCII_LINEHEIGHT_REFERENCE].h * scale * lineSpacing ); alignLine( textInstance.textSprites, lineStartChar, lineEndChar, dx, instanceAlignMode ); lineStartChar = i + 1; dx = 0; } else { // calculate the size to center text on Y axis, based on its scale offsetY = _fontDetails[charId].offsety * scale; dy = offsetY + fontLineSkip; } // Extend end of line lineEndChar = i; // add quads for each char // Use curpos instead of i to compensate for line wrapping hyphenation // reuse a UISprite if we have one. if we don't, we need to set it's parent and add it to the textInstance's list var currentTextSprite = textInstance.textSpriteAtIndex( i ); var addingNewTextSprite = currentTextSprite == null; currentTextSprite = configureSpriteForCharId( currentTextSprite, charId, dx, dy, scale, 0 ); if( addingNewTextSprite ) { currentTextSprite.color = color.Length == 1 ? color[0] : color[i]; currentTextSprite.parentUIObject = textInstance; textInstance.textSprites.Add( currentTextSprite ); } // Ensure the sprite is hidden if the textInstance is currentTextSprite.hidden = hidden; // See below @NOTE re: offsetx vs. xadvance bugfix. // advance the position to draw the next letter dx += _fontDetails[charId].xadvance * scale; } alignLine( textInstance.textSprites, lineStartChar, lineEndChar, dx, instanceAlignMode ); verticalAlignText( textInstance.textSprites, totalHeight, _fontDetails[ASCII_LINEHEIGHT_REFERENCE].offsety * scale * lineSpacing, instanceVerticalAlignMode ); // Re-position textInstance textInstance.position = new Vector3(xPos, yPos, depth); }
/// <summary> /// Performs horizontal alignment of each line independently. /// </summary> private void alignLine( List<UISprite> sprites, int lineStartChar, int lineEndChar, float lineWidth, UITextAlignMode instanceAlignMode ) { if( instanceAlignMode == UITextAlignMode.Left ) return; if( instanceAlignMode == UITextAlignMode.Center ) { // Go from start character to end character, INCLUSIVE. for ( var i = lineStartChar; i <= lineEndChar; i++ ) { // HACK: Gabo edit. Changed the if statement from sprites[i] != null because it was causing an error when the // text changed and the number of lines increased. if( i < sprites.Count && sprites[i] != null ) { sprites[i].position = new Vector3( sprites[i].position.x - lineWidth / 2.0f, sprites[i].position.y, sprites[i].position.z ); } } } else if( instanceAlignMode == UITextAlignMode.Right ) { // Go from start character to end character, INCLUSIVE. for ( var i = lineStartChar; i <= lineEndChar+1; i++ ) { if ( i < sprites.Count && sprites[i] != null ) sprites[i].position = new Vector3( sprites[i].position.x - lineWidth, sprites[i].position.y, sprites[i].position.z ); } } }