示例#1
0
 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()
         }));
     }
 }
示例#2
0
    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);
    }
示例#3
0
 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();
         }
     }
 }
示例#4
0
    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);
    }
示例#5
0
    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);
    }
示例#6
0
    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);
        }
    }
示例#7
0
    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);
    }
示例#8
0
 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);
    }
示例#10
0
    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;
            }
        }
    }