public void ScaleFont(float s) { if (!this._scaled) { this._scaled = true; this.fontSize = (int)((float)this.fontSize * s); this.lineHeight *= s; this.ascender *= s; this.descender *= s; for (int i = 0; i < this.characters.Length; i++) { AgeFont.Character character = this.characters[i]; character.Advance *= s; character.Offset *= s; character.Dimension *= s; this.characters[i] = character; } AgeFont.Log(string.Concat(new string[] { "Font ", base.name, "(", this.font.name, ") is scaled for ", s.ToString() })); } }
public int GetCharIndexInLineAtPosition(string text, float positionX, bool forcedCaps = false) { float num = 0f; this.CreateCharMap(false); for (int i = 0; i < text.Length; i++) { char charCode = text[i]; if (forcedCaps) { charCode = AgeFont.RaiseChar(charCode); } AgeFont.Character character = null; if (this.TryGetCharacter(charCode, this.fontSize, out character)) { num += character.Advance; if (this.HasKerningInfo && i + 1 < text.Length) { char c = text[i + 1]; if (forcedCaps && c >= 'a' && c <= 'z') { c = (char)((int)c + -32); } num += this.GetKerningOffset(text[i], c); } } if (num > positionX) { return(i); } } return(text.Length); }
public void Awake() { AgeFont.Init(); try { if (!this._scaled) { string key = "--fontScale="; string text = Environment.GetCommandLineArgs().FirstOrDefault((string a) => a != null && a.StartsWith(key)); float s = 1.5f; if (text != null && float.TryParse(text.Substring(key.Length), out s)) { this.ScaleFont(s); } } } catch (Exception ex) { AgeFont.Log(base.name + " " + ex.Message); } if (this.HighdefAlternate != null && this.HighdefAlternate != this) { this.HighdefAlternate.Awake(); } if (this.FallbackFonts != null) { AgeFont[] array = this.FallbackFonts; for (int i = 0; i < array.Length; i++) { array[i].Awake(); } } }
public float ComputeTextWidth(StringBuilder text, bool forcedCaps = false) { float num = 0f; this.CreateCharMap(false); for (int i = 0; i < text.Length; i++) { char charCode = text[i]; if (forcedCaps) { charCode = AgeFont.RaiseChar(charCode); } AgeFont.Character character = null; if (this.TryGetCharacter(charCode, this.fontSize, out character)) { num += character.Advance; if (this.HasKerningInfo && i + 1 < text.Length) { char c = text[i + 1]; if (forcedCaps) { c = AgeFont.RaiseChar(c); } num += this.GetKerningOffset(text[i], c); } } } return(num); }
public float ComputeTextWidth(string text, bool forcedCaps = false, bool makeClean = false) { float num = 0f; this.CreateCharMap(false); if (makeClean) { AgeUtils.CleanLine(text, ref AgePrimitiveLabel.CleanLine); text = AgePrimitiveLabel.CleanLine.ToString(); } for (int i = 0; i < text.Length; i++) { char charCode = text[i]; if (forcedCaps) { charCode = AgeFont.RaiseChar(charCode); } AgeFont.Character character = null; if (this.TryGetCharacter(charCode, this.fontSize, out character)) { num += character.Advance; if (this.HasKerningInfo && i + 1 < text.Length) { char c = text[i + 1]; if (forcedCaps && c >= 'a' && c <= 'z') { c = (char)((int)c + -32); } num += this.GetKerningOffset(text[i], c); } } } return(num); }
public static void TruncateString(string src, AgeFont font, float maxWidth, out string dest, char truncateChar, bool forcedCaps = false) { dest = src; AgeUtils.CleanLine(dest, ref AgeUtils.line); float num = font.ComputeTextWidth(AgeUtils.line.ToString(), forcedCaps, false); while (num > maxWidth && AgeUtils.line.Length > 1) { dest = dest.Substring(0, dest.Length - 2) + truncateChar; AgeUtils.CleanLine(dest, ref AgeUtils.line); num = font.ComputeTextWidth(AgeUtils.line.ToString(), forcedCaps, false); } }
private bool TryGetCharacter(char charCode, int fontSize, out AgeFont.Character character) { this.CreateCharMap(false); bool flag = this.charMap.TryGetValue(charCode, out character); if (!flag) { if (this.dynamicGlyphAltassing) { bool flag2 = this.freeTypeFont.IsGlyphDefined((uint)charCode); if (flag2) { FreeTypeFont.GlyphPositioningInformation glyphPositioningInformation; this.freeTypeFont.GetGlyphPositioningInformation((uint)charCode, (uint)fontSize, out glyphPositioningInformation); AgeFont.Character character2 = new AgeFont.Character(); character2.Charcode = (int)charCode; character2.Advance = glyphPositioningInformation.Advance; character2.Dimension = new Vector2(glyphPositioningInformation.Width, glyphPositioningInformation.Height); character2.Offset = new Vector2(glyphPositioningInformation.BearingX, -glyphPositioningInformation.BearingY); FontAtlasRenderer fontAtlasRenderer = AgeManager.Instance.FontAtlasRenderer; Rect orCreateInAtlas = fontAtlasRenderer.GetOrCreateInAtlas((uint)charCode, this, (uint)fontSize); float num = 128f; orCreateInAtlas.x += num; orCreateInAtlas.y += num; character2.RuntimeTextureCoordinates = orCreateInAtlas; character2.TextureCoordinates = character2.RuntimeTextureCoordinates; character = character2; return(true); } } int num2 = this.fallbackFonts.Length; for (int i = 0; i < num2; i++) { AgeFont ageFont = this.fallbackFonts[i]; if (ageFont.TryGetCharacter(charCode, fontSize, out character)) { return(true); } } return(false); } return(flag); }
private static void Init() { if (!AgeFont._inited) { if (File.Exists(AgeFont._log)) { File.Delete(AgeFont._log); } AgeFont.Log("Initialization"); StringBuilder stringBuilder = new StringBuilder().AppendLine(); foreach (string str in Font.GetOSInstalledFontNames()) { stringBuilder.AppendLine("Found installed font: " + str); } AgeFont.Log(stringBuilder.ToString()); stringBuilder = new StringBuilder().AppendLine(); foreach (string str2 in Environment.GetCommandLineArgs()) { stringBuilder.AppendLine("Fount command line argument: " + str2); } AgeFont.Log(stringBuilder.ToString()); AgeFont._inited = true; } }
private void AddRegionName(DefaultWorldViewTechnique defaultWorldViewTechnique, HxTechniqueGraphicData.RegionNameGraphicData.RegionData regionData, Region region) { InstanciedMeshHolders instanciedMeshHolders = defaultWorldViewTechnique.HxTechniqueGraphicData.InstanciedMeshHolders; InstanciedMeshBlock orCreateInstanciedMeshBlock = instanciedMeshHolders.GetOrCreateInstanciedMeshBlock(0, 67108864UL, InstanciedMeshHelpers.LetterPixelsPerInstance); Vector3 absoluteWorldPosition2D = AbstractGlobalPositionning.GetAbsoluteWorldPosition2D((int)regionData.Center.Row, (int)regionData.Center.Column); absoluteWorldPosition2D.y = base.GlobalPositionningService.GetAltitudeFromAbsoluteWorldPosition(new Vector3(absoluteWorldPosition2D.x, 0f, absoluteWorldPosition2D.z)); string localizedName = region.LocalizedName; AgeFont ageFont = this.regionNameGraphicData.AgeFont; int orCreateMeshIndex = AbstractRegionPatchRenderer.GetOrCreateMeshIndex(this.regionNameGraphicData.Material, defaultWorldViewTechnique.HxTechniqueGraphicData.InstanciedMeshHolders); float textSize = this.regionNameGraphicData.TextSize; bool disableKerning = GameManager.Preferences.GameGraphicSettings.DisableKerning; float num = 0f; float num2 = 0f; float num3 = 0f; float num4 = 0f; float num5 = 0f; for (int i = 0; i < localizedName.Length; i++) { char charcode = localizedName[i]; char nextCharCode = (disableKerning || i + 1 >= localizedName.Length) ? '\0' : localizedName[i + 1]; Vector2 vector; Vector2 vector2; Rect rect; float num6; ageFont.GetCharInfo(charcode, nextCharCode, out vector, out vector2, out rect, out num6); num2 = Math.Min(num + vector2.x, num2); num3 = Math.Max(num + vector2.x + vector.x, num3); num4 = Math.Min(num4, -vector2.y - vector.y); num5 = Math.Max(num5, -vector2.y); num += num6; } float z = -(num4 + num5) * 0.5f; float num7 = -(num2 + num3) * 0.5f; for (int j = 0; j < localizedName.Length; j++) { char charcode2 = localizedName[j]; char nextCharCode2 = (disableKerning || j + 1 >= localizedName.Length) ? '\0' : localizedName[j + 1]; Vector2 vector3; Vector2 vector4; Rect rect2; float num8; ageFont.GetCharInfo(charcode2, nextCharCode2, out vector3, out vector4, out rect2, out num8); if (vector3.x > 0f && vector3.y > 0f) { float num9 = 128f; bool flag = rect2.xMin >= num9; int minPixelIndexX; int minPixelIndexY; int pixelCountX; int pixelCountY; if (flag) { minPixelIndexX = Mathf.RoundToInt(rect2.xMin - num9); minPixelIndexY = Mathf.RoundToInt(rect2.yMin - num9); pixelCountX = (int)rect2.width; pixelCountY = (int)rect2.height; } else { minPixelIndexX = Mathf.RoundToInt(rect2.xMin * (float)this.regionNameGraphicData.FontTextureWidth); minPixelIndexY = Mathf.RoundToInt(rect2.yMin * (float)this.regionNameGraphicData.FontTextureHeight); pixelCountX = Mathf.RoundToInt(rect2.width * (float)this.regionNameGraphicData.FontTextureWidth); pixelCountY = Mathf.RoundToInt(rect2.height * (float)this.regionNameGraphicData.FontTextureHeight); } Vector3 a = new Vector3(num7, 0f, z) + new Vector3(vector4.x, 0f, -vector4.y) - new Vector3(0f, 0f, vector3.y); InstanciedMeshHelpers.AddLetterInstance(instanciedMeshHolders, orCreateInstanciedMeshBlock, absoluteWorldPosition2D + textSize * a, minPixelIndexX, minPixelIndexY, pixelCountX, pixelCountY, vector3 * textSize, orCreateMeshIndex, flag); } num7 += num8; } orCreateInstanciedMeshBlock.CloseAndSort(); if (this.regionNameInstanciedMeshBlocks == null) { this.regionNameInstanciedMeshBlocks = new List <InstanciedMeshBlock>(); } this.regionNameInstanciedMeshBlocks.Add(orCreateInstanciedMeshBlock); base.AddInstanciedMeshBlock(orCreateInstanciedMeshBlock, false); }
protected void AddText(string stringToWrite, float textSizeMultiplier, Vector3 absoluteWorldPosition) { this.CreateDebugInstanciedMeshBlockIFN(); AgeFont ageFont = this.debugGraphicData.AgeFont; int orCreateMeshIndex = AbstractDebugPatchRenderer.GetOrCreateMeshIndex(this.debugGraphicData.Material, this.instanciedMeshHolders); float d = textSizeMultiplier * this.debugGraphicData.TextSize; float num = 0f; float num2 = 0f; float num3 = 0f; float num4 = 0f; float num5 = 0f; float num6 = 0f; for (int i = 0; i < stringToWrite.Length; i++) { char c = stringToWrite[i]; if (c == '\n') { num2 -= ageFont.LineHeight; num = 0f; } else { char nextCharCode = (i + 1 >= stringToWrite.Length) ? '\0' : stringToWrite[i]; Vector2 vector; Vector2 vector2; Rect rect; float num7; ageFont.GetCharInfo(c, nextCharCode, out vector, out vector2, out rect, out num7); num3 = Math.Min(num + vector2.x, num3); num4 = Math.Max(num + vector2.x + vector.x, num4); num5 = Math.Min(num5, -vector2.y - vector.y + num2); num6 = Math.Max(num6, -vector2.y + num2); num += num7; } } float num8 = -(num5 + num6) * 0.5f; float num9 = -(num3 + num4) * 0.5f; float num10 = num9; float num11 = num8; for (int j = 0; j < stringToWrite.Length; j++) { char c2 = stringToWrite[j]; if (c2 == '\n') { num11 -= ageFont.LineHeight; num10 = num9; } else { char nextCharCode2 = (j + 1 >= stringToWrite.Length) ? '\0' : stringToWrite[j]; Vector2 vector3; Vector2 vector4; Rect rect2; float num12; ageFont.GetCharInfo(c2, nextCharCode2, out vector3, out vector4, out rect2, out num12); if (vector3.x > 0f && vector3.y > 0f) { Vector3 a = new Vector3(num10, 0f, num11 + num8) + new Vector3(vector4.x, 0f, -vector4.y) - new Vector3(0f, 0f, vector3.y); int minPixelIndexX = Mathf.RoundToInt(rect2.xMin * (float)this.debugGraphicData.FontTextureWidth); int minPixelIndexY = Mathf.RoundToInt(rect2.yMin * (float)this.debugGraphicData.FontTextureHeight); int pixelCountX = Mathf.RoundToInt(rect2.width * (float)this.debugGraphicData.FontTextureWidth); int pixelCountY = Mathf.RoundToInt(rect2.height * (float)this.debugGraphicData.FontTextureHeight); InstanciedMeshHelpers.AddLetterInstance(this.instanciedMeshHolders, this.debugTextInstanciedMeshBlock, absoluteWorldPosition + d * a, minPixelIndexX, minPixelIndexY, pixelCountX, pixelCountY, vector3 * d, orCreateMeshIndex, false); } num10 += num12; } } }