// Token: 0x06004682 RID: 18050 RVA: 0x00108E54 File Offset: 0x00107054 private void renderSprite(global::dfMarkupToken token, Color32 color, Vector3 position, global::dfRenderData destination) { try { string value = token.GetAttribute(0).Value.Value; global::dfAtlas.ItemInfo itemInfo = this.SpriteAtlas[value]; if (!(itemInfo == null)) { global::dfSprite.RenderOptions options = new global::dfSprite.RenderOptions { atlas = this.SpriteAtlas, color = color, fillAmount = 1f, offset = position, pixelsToUnits = base.PixelRatio, size = new Vector2((float)token.Width, (float)token.Height), spriteInfo = itemInfo }; global::dfSprite.renderSprite(this.SpriteBuffer, options); } } finally { } }
// Token: 0x0600467F RID: 18047 RVA: 0x0010886C File Offset: 0x00106A6C private void renderLine(global::dfDynamicFont.LineRenderInfo line, Stack <Color32> colors, Vector3 position, global::dfRenderData destination) { position.x += (float)this.calculateLineAlignment(line); for (int i = line.startOffset; i <= line.endOffset; i++) { global::dfMarkupToken dfMarkupToken = this.tokens[i]; global::dfMarkupTokenType tokenType = dfMarkupToken.TokenType; if (tokenType == global::dfMarkupTokenType.Text) { this.renderText(dfMarkupToken, colors.Peek(), position, destination); } else if (tokenType == global::dfMarkupTokenType.StartTag) { if (dfMarkupToken.Matches("sprite") && this.SpriteAtlas != null && this.SpriteBuffer != null) { this.renderSprite(dfMarkupToken, colors.Peek(), position, this.SpriteBuffer); } else if (dfMarkupToken.Matches("color")) { colors.Push(this.parseColor(dfMarkupToken)); } } else if (tokenType == global::dfMarkupTokenType.EndTag && dfMarkupToken.Matches("color") && colors.Count > 1) { colors.Pop(); } position.x += (float)dfMarkupToken.Width; } }
// Token: 0x060040E0 RID: 16608 RVA: 0x000EE198 File Offset: 0x000EC398 private void calculateTokenRenderSize(global::dfMarkupToken token) { try { global::dfFont dfFont = (global::dfFont)base.Font; int num = 0; char previousChar = '\0'; bool flag = token.TokenType == global::dfMarkupTokenType.Whitespace || token.TokenType == global::dfMarkupTokenType.Text; if (flag) { int i = 0; while (i < token.Length) { char c = token[i]; if (c == '\t') { num += base.TabSize; } else { global::dfFont.GlyphDefinition glyph = dfFont.GetGlyph(c); if (glyph != null) { if (i > 0) { num += dfFont.GetKerning(previousChar, c); num += base.CharacterSpacing; } num += glyph.xadvance; } } i++; previousChar = c; } } else if (token.TokenType == global::dfMarkupTokenType.StartTag && token.Matches("sprite")) { if (token.AttributeCount < 1) { throw new Exception("Missing sprite name in markup"); } Texture texture = dfFont.Texture; int lineHeight = dfFont.LineHeight; string value = token.GetAttribute(0).Value.Value; global::dfAtlas.ItemInfo itemInfo = dfFont.atlas[value]; if (itemInfo != null) { float num2 = itemInfo.region.width * (float)texture.width / (itemInfo.region.height * (float)texture.height); num = Mathf.CeilToInt((float)lineHeight * num2); } } token.Height = base.Font.LineHeight; token.Width = num; } finally { } }
// Token: 0x0600432D RID: 17197 RVA: 0x000F8254 File Offset: 0x000F6454 private global::dfMarkupToken parseTag() { if (this.Peek(0) != '[') { return(null); } char c = this.Peek(1); if (c == '/') { return(this.parseEndTag()); } this.Advance(1); c = this.Peek(0); if (!char.IsLetterOrDigit(c)) { return(null); } int startIndex = this.index; int num = this.index; while (this.index < this.source.Length && char.IsLetterOrDigit(this.Advance(1))) { num++; } global::dfMarkupToken dfMarkupToken = global::dfMarkupToken.Obtain(this.source, global::dfMarkupTokenType.StartTag, startIndex, num); if (this.index < this.source.Length && this.Peek(0) != ']') { c = this.Peek(0); if (char.IsWhiteSpace(c)) { this.parseWhitespace(); } int startIndex2 = this.index; int num2 = this.index; if (this.Peek(0) == '"') { global::dfMarkupToken dfMarkupToken2 = this.parseQuotedString(); dfMarkupToken.AddAttribute(dfMarkupToken2, dfMarkupToken2); } else { while (this.index < this.source.Length && this.Advance(1) != ']') { num2++; } global::dfMarkupToken dfMarkupToken3 = global::dfMarkupToken.Obtain(this.source, global::dfMarkupTokenType.Text, startIndex2, num2); dfMarkupToken.AddAttribute(dfMarkupToken3, dfMarkupToken3); } } if (this.Peek(0) == ']') { this.Advance(1); } return(dfMarkupToken); }
// Token: 0x0600430D RID: 17165 RVA: 0x000F76D0 File Offset: 0x000F58D0 internal void AddAttribute(global::dfMarkupToken key, global::dfMarkupToken value) { global::dfMarkupTokenAttribute dfMarkupTokenAttribute = global::dfMarkupTokenAttribute.Obtain(key, value); if (this.AttributeCount == 0) { this.startAttributeIndex = dfMarkupTokenAttribute.Index; } this.AttributeCount++; }
// Token: 0x06004314 RID: 17172 RVA: 0x000F7768 File Offset: 0x000F5968 public static global::dfMarkupTokenAttribute Obtain(global::dfMarkupToken key, global::dfMarkupToken value) { if (global::dfMarkupTokenAttribute.poolIndex >= global::dfMarkupTokenAttribute.pool.Count - 1) { global::dfMarkupTokenAttribute.pool.Add(new global::dfMarkupTokenAttribute()); } global::dfMarkupTokenAttribute dfMarkupTokenAttribute = global::dfMarkupTokenAttribute.pool[global::dfMarkupTokenAttribute.poolIndex]; dfMarkupTokenAttribute.Index = global::dfMarkupTokenAttribute.poolIndex; dfMarkupTokenAttribute.Key = key; dfMarkupTokenAttribute.Value = value; global::dfMarkupTokenAttribute.poolIndex++; return(dfMarkupTokenAttribute); }
// Token: 0x06004689 RID: 18057 RVA: 0x001093D8 File Offset: 0x001075D8 private void calculateTokenRenderSize(global::dfMarkupToken token) { try { int num = 0; bool flag = token.TokenType == global::dfMarkupTokenType.Whitespace || token.TokenType == global::dfMarkupTokenType.Text; global::dfDynamicFont dfDynamicFont = (global::dfDynamicFont)base.Font; if (flag) { int size = Mathf.CeilToInt((float)dfDynamicFont.FontSize * base.TextScale); CharacterInfo[] array = dfDynamicFont.RequestCharacters(token.Value, size, 0); for (int i = 0; i < token.Length; i++) { char c = token[i]; if (c == '\t') { num += base.TabSize; } else { CharacterInfo characterInfo = array[i]; num += ((c == ' ') ? Mathf.CeilToInt(characterInfo.width) : Mathf.CeilToInt(characterInfo.vert.x + characterInfo.vert.width)); if (i > 0) { num += Mathf.CeilToInt((float)base.CharacterSpacing * base.TextScale); } } } token.Height = base.Font.LineHeight; token.Width = num; } else if (token.TokenType == global::dfMarkupTokenType.StartTag && token.Matches("sprite") && this.SpriteAtlas != null && token.AttributeCount == 1) { Texture2D texture = this.SpriteAtlas.Texture; float num2 = (float)dfDynamicFont.Baseline * base.TextScale; string value = token.GetAttribute(0).Value.Value; global::dfAtlas.ItemInfo itemInfo = this.SpriteAtlas[value]; if (itemInfo != null) { float num3 = itemInfo.region.width * (float)texture.width / (itemInfo.region.height * (float)texture.height); num = Mathf.CeilToInt(num2 * num3); } token.Height = Mathf.CeilToInt(num2); token.Width = num; } } finally { } }
// Token: 0x06004317 RID: 17175 RVA: 0x000F7808 File Offset: 0x000F5A08 private List <global::dfMarkupToken> tokenize(string source) { global::dfMarkupToken.Reset(); global::dfMarkupTokenAttribute.Reset(); this.tokens.Clear(); this.source = source; this.index = 0; while (this.index < source.Length) { char c = this.Peek(0); if (this.AtTagPosition()) { global::dfMarkupToken dfMarkupToken = this.parseTag(); if (dfMarkupToken != null) { this.tokens.Add(dfMarkupToken); } } else { global::dfMarkupToken dfMarkupToken2 = null; if (char.IsWhiteSpace(c)) { if (c != '\r') { dfMarkupToken2 = this.parseWhitespace(); } } else { dfMarkupToken2 = this.parseNonWhitespace(); } if (dfMarkupToken2 == null) { this.Advance(1); } else { this.tokens.Add(dfMarkupToken2); } } } return(this.tokens); }
// Token: 0x060040D9 RID: 16601 RVA: 0x000EDAE0 File Offset: 0x000EBCE0 private void renderSprite(global::dfMarkupToken token, Color32 color, Vector3 position, global::dfRenderData destination) { try { global::dfList <Vector3> vertices = destination.Vertices; global::dfList <int> triangles = destination.Triangles; global::dfList <Color32> colors = destination.Colors; global::dfList <Vector2> uv = destination.UV; global::dfFont dfFont = (global::dfFont)base.Font; string value = token.GetAttribute(0).Value.Value; global::dfAtlas.ItemInfo itemInfo = dfFont.Atlas[value]; if (!(itemInfo == null)) { float num = (float)token.Height * base.TextScale * base.PixelRatio; float num2 = (float)token.Width * base.TextScale * base.PixelRatio; float x = position.x; float y = position.y; int count = vertices.Count; vertices.Add(new Vector3(x, y)); vertices.Add(new Vector3(x + num2, y)); vertices.Add(new Vector3(x + num2, y - num)); vertices.Add(new Vector3(x, y - num)); triangles.Add(count); triangles.Add(count + 1); triangles.Add(count + 3); triangles.Add(count + 3); triangles.Add(count + 1); triangles.Add(count + 2); Color32 item = (!base.ColorizeSymbols) ? this.applyOpacity(base.DefaultColor) : this.applyOpacity(color); colors.Add(item); colors.Add(item); colors.Add(item); colors.Add(item); Rect region = itemInfo.region; uv.Add(new Vector2(region.x, region.yMax)); uv.Add(new Vector2(region.xMax, region.yMax)); uv.Add(new Vector2(region.xMax, region.y)); uv.Add(new Vector2(region.x, region.y)); } } finally { } }
// Token: 0x060042FA RID: 17146 RVA: 0x000F74A4 File Offset: 0x000F56A4 public static global::dfMarkupToken Obtain(string source, global::dfMarkupTokenType type, int startIndex, int endIndex) { if (global::dfMarkupToken.poolIndex >= global::dfMarkupToken.pool.Count - 1) { global::dfMarkupToken.pool.Add(new global::dfMarkupToken()); } global::dfMarkupToken dfMarkupToken = global::dfMarkupToken.pool[global::dfMarkupToken.poolIndex++]; dfMarkupToken.Source = source; dfMarkupToken.TokenType = type; dfMarkupToken.value = null; dfMarkupToken.StartOffset = startIndex; dfMarkupToken.EndOffset = endIndex; dfMarkupToken.AttributeCount = 0; dfMarkupToken.startAttributeIndex = 0; dfMarkupToken.Width = 0; dfMarkupToken.Height = 0; return(dfMarkupToken); }
// Token: 0x06004683 RID: 18051 RVA: 0x00108F24 File Offset: 0x00107124 private Color32 parseColor(global::dfMarkupToken token) { Color color = Color.white; if (token.AttributeCount == 1) { string value = token.GetAttribute(0).Value.Value; if (value.Length == 7 && value[0] == '#') { uint num = 0u; uint.TryParse(value.Substring(1), NumberStyles.HexNumber, null, out num); color = this.UIntToColor(num | 4278190080u); } else { color = global::dfMarkupStyle.ParseColor(value, base.DefaultColor); } } return(this.applyOpacity(color)); }
// Token: 0x06004685 RID: 18053 RVA: 0x00108FE8 File Offset: 0x001071E8 private global::dfList <global::dfDynamicFont.LineRenderInfo> calculateLinebreaks() { global::dfList <global::dfDynamicFont.LineRenderInfo> result; try { if (this.lines != null) { result = this.lines; } else { this.lines = global::dfList <global::dfDynamicFont.LineRenderInfo> .Obtain(); global::dfDynamicFont dfDynamicFont = (global::dfDynamicFont)base.Font; int num = 0; int num2 = 0; int num3 = 0; int num4 = 0; float num5 = (float)dfDynamicFont.Baseline * base.TextScale; while (num3 < this.tokens.Count && (float)this.lines.Count * num5 <= base.MaxSize.y + num5) { global::dfMarkupToken dfMarkupToken = this.tokens[num3]; global::dfMarkupTokenType tokenType = dfMarkupToken.TokenType; if (tokenType == global::dfMarkupTokenType.Newline) { this.lines.Add(global::dfDynamicFont.LineRenderInfo.Obtain(num2, num3)); num = (num2 = ++num3); num4 = 0; } else { int num6 = Mathf.CeilToInt((float)dfMarkupToken.Width); bool flag = base.WordWrap && num > num2 && (tokenType == global::dfMarkupTokenType.Text || (tokenType == global::dfMarkupTokenType.StartTag && dfMarkupToken.Matches("sprite"))); if (flag && (float)(num4 + num6) >= base.MaxSize.x) { if (num > num2) { this.lines.Add(global::dfDynamicFont.LineRenderInfo.Obtain(num2, num - 1)); num3 = (num2 = ++num); num4 = 0; } else { this.lines.Add(global::dfDynamicFont.LineRenderInfo.Obtain(num2, num - 1)); num = (num2 = ++num3); num4 = 0; } } else { if (tokenType == global::dfMarkupTokenType.Whitespace) { num = num3; } num4 += num6; num3++; } } } if (num2 < this.tokens.Count) { this.lines.Add(global::dfDynamicFont.LineRenderInfo.Obtain(num2, this.tokens.Count - 1)); } for (int i = 0; i < this.lines.Count; i++) { this.calculateLineSize(this.lines[i]); } result = this.lines; } } finally { } return(result); }
// Token: 0x06004680 RID: 18048 RVA: 0x00108988 File Offset: 0x00106B88 private void renderText(global::dfMarkupToken token, Color32 color, Vector3 position, global::dfRenderData renderData) { try { global::dfDynamicFont dfDynamicFont = (global::dfDynamicFont)base.Font; int num = Mathf.CeilToInt((float)dfDynamicFont.FontSize * base.TextScale); FontStyle style = 0; int descent = dfDynamicFont.Descent; global::dfList <Vector3> vertices = renderData.Vertices; global::dfList <int> triangles = renderData.Triangles; global::dfList <Vector2> uv = renderData.UV; global::dfList <Color32> colors = renderData.Colors; string value = token.Value; float num2 = position.x; float y = position.y; CharacterInfo[] array = dfDynamicFont.RequestCharacters(value, num, style); renderData.Material = dfDynamicFont.Material; Color32 color2 = this.applyOpacity(this.multiplyColors(color, base.DefaultColor)); Color32 item = color2; if (base.BottomColor != null) { item = this.applyOpacity(this.multiplyColors(color, base.BottomColor.Value)); } for (int i = 0; i < value.Length; i++) { if (i > 0) { num2 += (float)base.CharacterSpacing * base.TextScale; } CharacterInfo glyph = array[i]; float num3 = (float)dfDynamicFont.FontSize + glyph.vert.y - (float)num + (float)descent; float num4 = num2 + glyph.vert.x; float num5 = y + num3; float num6 = num4 + glyph.vert.width; float num7 = num5 + glyph.vert.height; Vector3 vector = new Vector3(num4, num5) * base.PixelRatio; Vector3 vector2 = new Vector3(num6, num5) * base.PixelRatio; Vector3 vector3 = new Vector3(num6, num7) * base.PixelRatio; Vector3 vector4 = new Vector3(num4, num7) * base.PixelRatio; if (base.Shadow) { global::dfDynamicFont.DynamicFontRenderer.addTriangleIndices(vertices, triangles); Vector3 vector5 = base.ShadowOffset * base.PixelRatio; vertices.Add(vector + vector5); vertices.Add(vector2 + vector5); vertices.Add(vector3 + vector5); vertices.Add(vector4 + vector5); Color32 item2 = this.applyOpacity(base.ShadowColor); colors.Add(item2); colors.Add(item2); colors.Add(item2); colors.Add(item2); global::dfDynamicFont.DynamicFontRenderer.addUVCoords(uv, glyph); } if (base.Outline) { for (int j = 0; j < global::dfDynamicFont.DynamicFontRenderer.OUTLINE_OFFSETS.Length; j++) { global::dfDynamicFont.DynamicFontRenderer.addTriangleIndices(vertices, triangles); Vector3 vector6 = global::dfDynamicFont.DynamicFontRenderer.OUTLINE_OFFSETS[j] * (float)base.OutlineSize * base.PixelRatio; vertices.Add(vector + vector6); vertices.Add(vector2 + vector6); vertices.Add(vector3 + vector6); vertices.Add(vector4 + vector6); Color32 item3 = this.applyOpacity(base.OutlineColor); colors.Add(item3); colors.Add(item3); colors.Add(item3); colors.Add(item3); global::dfDynamicFont.DynamicFontRenderer.addUVCoords(uv, glyph); } } global::dfDynamicFont.DynamicFontRenderer.addTriangleIndices(vertices, triangles); vertices.Add(vector); vertices.Add(vector2); vertices.Add(vector3); vertices.Add(vector4); colors.Add(color2); colors.Add(color2); colors.Add(item); colors.Add(item); global::dfDynamicFont.DynamicFontRenderer.addUVCoords(uv, glyph); num2 += (float)Mathf.CeilToInt(glyph.vert.x + glyph.vert.width); } } finally { } }
// Token: 0x0600431D RID: 17181 RVA: 0x000F7B24 File Offset: 0x000F5D24 private global::dfMarkupToken parseTag() { if (this.Peek(0) != '<') { return(null); } char c = this.Peek(1); if (c == '/') { return(this.parseEndTag()); } this.Advance(1); c = this.Peek(0); if (!char.IsLetterOrDigit(c)) { return(null); } int startIndex = this.index; int num = this.index; while (this.index < this.source.Length && char.IsLetterOrDigit(this.Advance(1))) { num++; } global::dfMarkupToken dfMarkupToken = global::dfMarkupToken.Obtain(this.source, global::dfMarkupTokenType.StartTag, startIndex, num); while (this.index < this.source.Length && this.Peek(0) != '>') { c = this.Peek(0); if (char.IsWhiteSpace(c)) { this.parseWhitespace(); } else { global::dfMarkupToken dfMarkupToken2 = this.parseWord(); if (dfMarkupToken2 == null) { this.Advance(1); } else { c = this.Peek(0); if (c != '=') { dfMarkupToken.AddAttribute(dfMarkupToken2, dfMarkupToken2); } else { c = this.Advance(1); global::dfMarkupToken dfMarkupToken3; if (c == '"' || c == '\'') { dfMarkupToken3 = this.parseQuotedString(); } else { dfMarkupToken3 = this.parseAttributeValue(); } dfMarkupToken.AddAttribute(dfMarkupToken2, dfMarkupToken3 ?? dfMarkupToken2); } } } } if (this.Peek(0) == '>') { this.Advance(1); } return(dfMarkupToken); }
// Token: 0x060040D8 RID: 16600 RVA: 0x000ED608 File Offset: 0x000EB808 private void renderText(global::dfMarkupToken token, Color32 color, Vector3 position, global::dfRenderData destination) { try { global::dfList <Vector3> vertices = destination.Vertices; global::dfList <int> triangles = destination.Triangles; global::dfList <Color32> colors = destination.Colors; global::dfList <Vector2> uv = destination.UV; global::dfFont dfFont = (global::dfFont)base.Font; global::dfAtlas.ItemInfo itemInfo = dfFont.Atlas[dfFont.sprite]; Texture texture = dfFont.Texture; float num = 1f / (float)texture.width; float num2 = 1f / (float)texture.height; float num3 = num * 0.125f; float num4 = num2 * 0.125f; float num5 = base.TextScale * base.PixelRatio; char previousChar = '\0'; Color32 color2 = this.applyOpacity(this.multiplyColors(color, base.DefaultColor)); Color32 item = color2; if (base.BottomColor != null) { item = this.applyOpacity(this.multiplyColors(color, base.BottomColor.Value)); } int i = 0; while (i < token.Length) { char c = token[i]; if (c != '\0') { global::dfFont.GlyphDefinition glyph = dfFont.GetGlyph(c); if (glyph != null) { int kerning = dfFont.GetKerning(previousChar, c); float num6 = position.x + (float)(glyph.xoffset + kerning) * num5; float num7 = position.y - (float)glyph.yoffset * num5; float num8 = (float)glyph.width * num5; float num9 = (float)glyph.height * num5; float num10 = num6 + num8; float num11 = num7 - num9; Vector3 vector; vector..ctor(num6, num7); Vector3 vector2; vector2..ctor(num10, num7); Vector3 vector3; vector3..ctor(num10, num11); Vector3 vector4; vector4..ctor(num6, num11); float num12 = itemInfo.region.x + (float)glyph.x * num - num3; float num13 = itemInfo.region.yMax - (float)glyph.y * num2 - num4; float num14 = num12 + (float)glyph.width * num - num3; float num15 = num13 - (float)glyph.height * num2 + num4; if (base.Shadow) { global::dfFont.BitmappedFontRenderer.addTriangleIndices(vertices, triangles); Vector3 vector5 = base.ShadowOffset * num5; vertices.Add(vector + vector5); vertices.Add(vector2 + vector5); vertices.Add(vector3 + vector5); vertices.Add(vector4 + vector5); Color32 item2 = this.applyOpacity(base.ShadowColor); colors.Add(item2); colors.Add(item2); colors.Add(item2); colors.Add(item2); uv.Add(new Vector2(num12, num13)); uv.Add(new Vector2(num14, num13)); uv.Add(new Vector2(num14, num15)); uv.Add(new Vector2(num12, num15)); } if (base.Outline) { for (int j = 0; j < global::dfFont.BitmappedFontRenderer.OUTLINE_OFFSETS.Length; j++) { global::dfFont.BitmappedFontRenderer.addTriangleIndices(vertices, triangles); Vector3 vector6 = global::dfFont.BitmappedFontRenderer.OUTLINE_OFFSETS[j] * (float)base.OutlineSize * num5; vertices.Add(vector + vector6); vertices.Add(vector2 + vector6); vertices.Add(vector3 + vector6); vertices.Add(vector4 + vector6); Color32 item3 = this.applyOpacity(base.OutlineColor); colors.Add(item3); colors.Add(item3); colors.Add(item3); colors.Add(item3); uv.Add(new Vector2(num12, num13)); uv.Add(new Vector2(num14, num13)); uv.Add(new Vector2(num14, num15)); uv.Add(new Vector2(num12, num15)); } } global::dfFont.BitmappedFontRenderer.addTriangleIndices(vertices, triangles); vertices.Add(vector); vertices.Add(vector2); vertices.Add(vector3); vertices.Add(vector4); colors.Add(color2); colors.Add(color2); colors.Add(item); colors.Add(item); uv.Add(new Vector2(num12, num13)); uv.Add(new Vector2(num14, num13)); uv.Add(new Vector2(num14, num15)); uv.Add(new Vector2(num12, num15)); position.x += (float)(glyph.xadvance + kerning + base.CharacterSpacing) * num5; } } i++; previousChar = c; } } finally { } }