コード例 #1
0
    public static void AddInstance(InstanciedMeshHolders instanciedMeshHolders, InstanciedMeshBlock meshBlock, UnityEngine.Vector3 position, UnityEngine.Vector2 forward2D, float scaleY, Color32 color, int meshIndex)
    {
        Diagnostics.Assert(!meshBlock.Closed);
        Diagnostics.Assert(meshBlock.PixelsPerInstance == InstanciedMeshHelpers.PositionForwardScaleZColorPixelsPerInstance);
        Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.PositionForwardScaleZColorPixelsPerInstance == 0);
        Diagnostics.Assert(instanciedMeshHolders.GetPixelsPerInstance(meshIndex) == InstanciedMeshHelpers.PositionForwardScaleZColorPixelsPerInstance);
        int val  = 65535;
        int num  = Math.Max(0, Math.Min(val, (int)((position.x - instanciedMeshHolders.BBoxMin.x) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x)));
        int num2 = Math.Max(0, Math.Min(val, (int)((position.y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y)));
        int num3 = Math.Max(0, Math.Min(val, (int)((position.z - instanciedMeshHolders.BBoxMin.z) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z)));

        UnityEngine.Vector2 vector = forward2D / scaleY;
        int num4 = Math.Max(0, Math.Min(val, (int)((vector.x - instanciedMeshHolders.BBoxMin.w) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.w)));
        int num5 = Math.Max(0, Math.Min(val, (int)((vector.y - instanciedMeshHolders.BBoxMin.w) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.w)));
        int num6 = Math.Max(0, Math.Min(val, (int)(scaleY * instanciedMeshHolders.Max16BitValueBBoxExtentScale)));
        int num7 = 255;
        int num8 = 65280;

        meshBlock.MeshColors.Add(new Color32((byte)(num & num7), (byte)((num & num8) >> 8), (byte)(num2 & num7), (byte)((num2 & num8) >> 8)));
        meshBlock.MeshColors.Add(new Color32((byte)(num3 & num7), (byte)((num3 & num8) >> 8), (byte)(num4 & num7), (byte)((num4 & num8) >> 8)));
        meshBlock.MeshColors.Add(new Color32((byte)(num5 & num7), (byte)((num5 & num8) >> 8), (byte)(num6 & num7), (byte)((num6 & num8) >> 8)));
        meshBlock.MeshColors.Add(color);
        meshBlock.MeshIndices.Add(meshIndex);
        Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.PositionForwardScaleZColorPixelsPerInstance == 0);
    }
コード例 #2
0
    public static void AddIconInstance(InstanciedMeshHolders instanciedMeshHolders, InstanciedMeshBlock meshBlock, UnityEngine.Vector3 position, UnityEngine.Vector2 forward2D, UnityEngine.Vector2 texCoord, float worldScale, float textureScale, int meshIndex, byte customData0 = 0, byte customData1 = 0)
    {
        Diagnostics.Assert(meshBlock.PixelsPerInstance == InstanciedMeshHelpers.PositionTexCoordWorldScaleTextureScalePixelsPerInstance);
        Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.PositionTexCoordWorldScaleTextureScalePixelsPerInstance == 0);
        Diagnostics.Assert(instanciedMeshHolders.GetPixelsPerInstance(meshIndex) == InstanciedMeshHelpers.PositionTexCoordWorldScaleTextureScalePixelsPerInstance);
        Diagnostics.Assert(meshBlock != null);
        Diagnostics.Assert(!meshBlock.Closed);
        Diagnostics.Assert(texCoord.x >= 0f);
        Diagnostics.Assert(texCoord.x <= 1f);
        Diagnostics.Assert(texCoord.y >= 0f);
        Diagnostics.Assert(texCoord.y <= 1f);
        Diagnostics.Assert(forward2D.x >= -1f);
        Diagnostics.Assert(forward2D.y >= -1f);
        Diagnostics.Assert(forward2D.x <= 1f);
        Diagnostics.Assert(forward2D.y <= 1f);
        int num   = 65535;
        int num2  = Math.Max(0, Math.Min(num, (int)((position.x - instanciedMeshHolders.BBoxMin.x) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x)));
        int num3  = Math.Max(0, Math.Min(num, (int)((position.y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y)));
        int num4  = Math.Max(0, Math.Min(num, (int)((position.z - instanciedMeshHolders.BBoxMin.z) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z)));
        int num5  = Math.Max(0, Math.Min(255, (int)(texCoord.x * 255f)));
        int num6  = Math.Max(0, Math.Min(255, (int)(texCoord.y * 255f)));
        int num7  = Math.Max(0, Math.Min(num, (int)(worldScale * instanciedMeshHolders.Max16BitValueBBoxExtentScale)));
        int num8  = Math.Max(0, Math.Min(num, (int)(textureScale * (float)num)));
        int num9  = Math.Max(0, Math.Min(255, (int)((0.5f * forward2D.x + 0.5f) * 255f)));
        int num10 = Math.Max(0, Math.Min(255, (int)((0.5f * forward2D.y + 0.5f) * 255f)));
        int num11 = 255;
        int num12 = 65280;

        meshBlock.MeshColors.Add(new Color32((byte)(num2 & num11), (byte)((num2 & num12) >> 8), (byte)(num3 & num11), (byte)((num3 & num12) >> 8)));
        meshBlock.MeshColors.Add(new Color32((byte)(num4 & num11), (byte)((num4 & num12) >> 8), (byte)num5, (byte)num6));
        meshBlock.MeshColors.Add(new Color32((byte)(num7 & num11), (byte)((num7 & num12) >> 8), (byte)(num8 & num11), (byte)((num8 & num12) >> 8)));
        meshBlock.MeshColors.Add(new Color32((byte)num9, (byte)num10, customData0, customData1));
        meshBlock.MeshIndices.Add(meshIndex);
        Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.PositionTexCoordWorldScaleTextureScalePixelsPerInstance == 0);
    }
コード例 #3
0
    public static void AddLetterInstance(InstanciedMeshHolders instanciedMeshHolders, InstanciedMeshBlock meshBlock, UnityEngine.Vector3 position, int minPixelIndexX, int minPixelIndexY, int pixelCountX, int pixelCountY, UnityEngine.Vector2 worldScale, int meshIndex, bool useDynamicAtlas)
    {
        Diagnostics.Assert(meshBlock.PixelsPerInstance == InstanciedMeshHelpers.LetterPixelsPerInstance);
        Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.LetterPixelsPerInstance == 0);
        Diagnostics.Assert(instanciedMeshHolders.GetPixelsPerInstance(meshIndex) == InstanciedMeshHelpers.LetterPixelsPerInstance);
        Diagnostics.Assert(meshBlock != null);
        Diagnostics.Assert(!meshBlock.Closed);
        Diagnostics.Assert(minPixelIndexX >= 0);
        Diagnostics.Assert(minPixelIndexY >= 0);
        Diagnostics.Assert(pixelCountX >= 0);
        Diagnostics.Assert((float)pixelCountX <= 255f);
        Diagnostics.Assert(pixelCountY >= 0);
        Diagnostics.Assert((float)pixelCountY <= 255f);
        int val  = 65535;
        int num  = Math.Max(0, Math.Min(val, (int)((position.x - instanciedMeshHolders.BBoxMin.x) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x)));
        int num2 = Math.Max(0, Math.Min(val, (int)((position.y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y)));
        int num3 = Math.Max(0, Math.Min(val, (int)((position.z - instanciedMeshHolders.BBoxMin.z) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z)));
        int num4 = 4096;
        int num5 = minPixelIndexX + ((!useDynamicAtlas) ? 0 : num4);
        int num6 = Math.Max(0, Math.Min(val, (int)(worldScale.x * instanciedMeshHolders.Max16BitValueBBoxExtentScale)));
        int num7 = Math.Max(0, Math.Min(val, (int)(worldScale.y * instanciedMeshHolders.Max16BitValueBBoxExtentScale)));
        int num8 = 255;
        int num9 = 65280;

        meshBlock.MeshColors.Add(new Color32((byte)(num & num8), (byte)((num & num9) >> 8), (byte)(num2 & num8), (byte)((num2 & num9) >> 8)));
        meshBlock.MeshColors.Add(new Color32((byte)(num3 & num8), (byte)((num3 & num9) >> 8), (byte)(num5 & num8), (byte)((num5 & num9) >> 8)));
        meshBlock.MeshColors.Add(new Color32((byte)(num6 & num8), (byte)((num6 & num9) >> 8), (byte)(num7 & num8), (byte)((num7 & num9) >> 8)));
        meshBlock.MeshColors.Add(new Color32((byte)(minPixelIndexY & num8), (byte)((minPixelIndexY & num9) >> 8), (byte)pixelCountX, (byte)pixelCountY));
        meshBlock.MeshIndices.Add(meshIndex);
        Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.LetterPixelsPerInstance == 0);
    }
コード例 #4
0
    public static Int3 ConvertAbsoluteWorldPosToEncodingValues(InstanciedMeshHolders instanciedMeshHolders, UnityEngine.Vector3 position)
    {
        int val = 65535;
        int x   = Math.Max(0, Math.Min(val, (int)((position.x - instanciedMeshHolders.BBoxMin.x) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x)));
        int y   = Math.Max(0, Math.Min(val, (int)((position.y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y)));
        int z   = Math.Max(0, Math.Min(val, (int)((position.z - instanciedMeshHolders.BBoxMin.z) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z)));

        return(new Int3(x, y, z));
    }
コード例 #5
0
    public static void ConvertBoundsToEncodingValues(InstanciedMeshHolders instanciedMeshHolders, Bounds meshBounds, out Int3 center, out Int3 size)
    {
        int x  = (int)(meshBounds.center.x * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x);
        int y  = (int)(meshBounds.center.y * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y);
        int z  = (int)(meshBounds.center.z * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z);
        int x2 = (int)(meshBounds.size.x * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x);
        int y2 = (int)(meshBounds.size.y * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y);
        int z2 = (int)(meshBounds.size.z * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z);

        center = new Int3(x, y, z);
        size   = new Int3(x2, y2, z2);
    }
コード例 #6
0
    private static int GetOrCreateMeshIndex(Material material, InstanciedMeshHolders instanciedMeshHolders)
    {
        string text = string.Format("Letter_{0}", material.name);
        int    num  = instanciedMeshHolders.RetrieveMeshIndex(text, InstanciedMeshHelpers.LetterPixelsPerInstance, Matrix4x4.identity, material, instanciedMeshHolders.MaxPerBigLineInstance(InstanciedMeshHelpers.LetterPixelsPerInstance));

        if (num == -1)
        {
            Mesh mesh = AbstractRegionPatchRenderer.CreateDebugRegionNameMesh();
            mesh.name = text;
            num       = instanciedMeshHolders.AddSmallMesh(new InstanciedMeshHolders.MeshAndSubMeshIndex(mesh, 0), InstanciedMeshHelpers.LetterPixelsPerInstance, Matrix4x4.identity, material, instanciedMeshHolders.MaxPerBigLineInstance(InstanciedMeshHelpers.LetterPixelsPerInstance));
            Diagnostics.Assert(instanciedMeshHolders.RetrieveMeshIndex(text, InstanciedMeshHelpers.LetterPixelsPerInstance, Matrix4x4.identity, material, instanciedMeshHolders.MaxPerBigLineInstance(InstanciedMeshHelpers.LetterPixelsPerInstance)) == num);
        }
        return(num);
    }
コード例 #7
0
    public static void AddLetterInstance(InstanciedMeshHolders instanciedMeshHolders, InstanciedMeshBlock meshBlock, UnityEngine.Vector3 position, UnityEngine.Vector2 minTexCoord, UnityEngine.Vector2 pixelCount, UnityEngine.Vector2 worldScale, int meshIndex)
    {
        Diagnostics.Assert(meshBlock.PixelsPerInstance == InstanciedMeshHelpers.LetterPixelsPerInstance);
        Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.LetterPixelsPerInstance == 0);
        Diagnostics.Assert(instanciedMeshHolders.GetPixelsPerInstance(meshIndex) == InstanciedMeshHelpers.LetterPixelsPerInstance);
        Diagnostics.Assert(meshBlock != null);
        Diagnostics.Assert(!meshBlock.Closed);
        Diagnostics.Assert(minTexCoord.x >= 0f);
        Diagnostics.Assert(minTexCoord.x <= 1f);
        Diagnostics.Assert(minTexCoord.y >= 0f);
        Diagnostics.Assert(minTexCoord.y <= 1f);
        Diagnostics.Assert(pixelCount.x >= 0f);
        Diagnostics.Assert(pixelCount.x <= 255f);
        Diagnostics.Assert(pixelCount.y >= 0f);
        Diagnostics.Assert(pixelCount.y <= 255f);
        int   val   = 65535;
        float num   = 65535f;
        int   num2  = Math.Max(0, Math.Min(val, (int)((position.x - instanciedMeshHolders.BBoxMin.x) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x)));
        int   num3  = Math.Max(0, Math.Min(val, (int)((position.y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y)));
        int   num4  = Math.Max(0, Math.Min(val, (int)((position.z - instanciedMeshHolders.BBoxMin.z) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z)));
        int   num5  = Math.Max(0, Math.Min(val, (int)(minTexCoord.x * num)));
        int   num6  = Math.Max(0, Math.Min(val, (int)(minTexCoord.y * num)));
        int   num7  = Math.Max(0, Math.Min(val, (int)(worldScale.x * instanciedMeshHolders.Max16BitValueBBoxExtentScale)));
        int   num8  = Math.Max(0, Math.Min(val, (int)(worldScale.y * instanciedMeshHolders.Max16BitValueBBoxExtentScale)));
        int   num9  = Math.Max(0, Math.Min(255, (int)pixelCount.x));
        int   num10 = Math.Max(0, Math.Min(255, (int)pixelCount.y));
        int   num11 = 255;
        int   num12 = 65280;

        meshBlock.MeshColors.Add(new Color32((byte)(num2 & num11), (byte)((num2 & num12) >> 8), (byte)(num3 & num11), (byte)((num3 & num12) >> 8)));
        meshBlock.MeshColors.Add(new Color32((byte)(num4 & num11), (byte)((num4 & num12) >> 8), (byte)(num5 & num11), (byte)((num5 & num12) >> 8)));
        meshBlock.MeshColors.Add(new Color32((byte)(num7 & num11), (byte)((num7 & num12) >> 8), (byte)(num8 & num11), (byte)((num8 & num12) >> 8)));
        meshBlock.MeshColors.Add(new Color32((byte)(num6 & num11), (byte)((num6 & num12) >> 8), (byte)num9, (byte)num10));
        meshBlock.MeshIndices.Add(meshIndex);
        Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.LetterPixelsPerInstance == 0);
    }
コード例 #8
0
    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);
    }
コード例 #9
0
    public static int ConvertAbsoluteWorldPosYToEncodingValues(InstanciedMeshHolders instanciedMeshHolders, float y)
    {
        int val = 65535;

        return(Math.Max(0, Math.Min(val, (int)((y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y))));
    }