Пример #1
0
 public void Set(int ww, int hh, MB2_TexturePacker.Node r, bool fits, float e, float sq)
 {
     this.w             = ww;
     this.h             = hh;
     this.root          = r;
     this.fitsInMaxSize = fits;
     this.efficiency    = e;
     this.squareness    = sq;
 }
Пример #2
0
            public MB2_TexturePacker.Node Insert(MB2_TexturePacker.Image im, bool handed)
            {
                int num;
                int num2;

                if (handed)
                {
                    num  = 0;
                    num2 = 1;
                }
                else
                {
                    num  = 1;
                    num2 = 0;
                }
                if (!this.isLeaf())
                {
                    MB2_TexturePacker.Node node = this.child[num].Insert(im, handed);
                    if (node != null)
                    {
                        return(node);
                    }
                    return(this.child[num2].Insert(im, handed));
                }
                else
                {
                    if (this.img != null)
                    {
                        return(null);
                    }
                    if (this.r.w < im.w || this.r.h < im.h)
                    {
                        return(null);
                    }
                    if (this.r.w == im.w && this.r.h == im.h)
                    {
                        this.img = im;
                        return(this);
                    }
                    this.child[num]  = new MB2_TexturePacker.Node();
                    this.child[num2] = new MB2_TexturePacker.Node();
                    int num3 = this.r.w - im.w;
                    int num4 = this.r.h - im.h;
                    if (num3 > num4)
                    {
                        this.child[num].r  = new MB2_TexturePacker.PixRect(this.r.x, this.r.y, im.w, this.r.h);
                        this.child[num2].r = new MB2_TexturePacker.PixRect(this.r.x + im.w, this.r.y, this.r.w - im.w, this.r.h);
                    }
                    else
                    {
                        this.child[num].r  = new MB2_TexturePacker.PixRect(this.r.x, this.r.y, this.r.w, im.h);
                        this.child[num2].r = new MB2_TexturePacker.PixRect(this.r.x, this.r.y + im.h, this.r.w, this.r.h - im.h);
                    }
                    return(this.child[num].Insert(im, handed));
                }
            }
Пример #3
0
 private static void printTree(MB2_TexturePacker.Node r, string spc)
 {
     if (r.child[0] != null)
     {
         MB2_TexturePacker.printTree(r.child[0], spc + "  ");
     }
     if (r.child[1] != null)
     {
         MB2_TexturePacker.printTree(r.child[1], spc + "  ");
     }
 }
Пример #4
0
 private static void flattenTree(MB2_TexturePacker.Node r, List <MB2_TexturePacker.Image> putHere)
 {
     if (r.img != null)
     {
         r.img.x = r.r.x;
         r.img.y = r.r.y;
         putHere.Add(r.img);
     }
     if (r.child[0] != null)
     {
         MB2_TexturePacker.flattenTree(r.child[0], putHere);
     }
     if (r.child[1] != null)
     {
         MB2_TexturePacker.flattenTree(r.child[1], putHere);
     }
 }
Пример #5
0
 private void GetExtent(MB2_TexturePacker.Node r, ref int x, ref int y)
 {
     if (r.img != null)
     {
         if (r.r.x + r.img.w > x)
         {
             x = r.r.x + r.img.w;
         }
         if (r.r.y + r.img.h > y)
         {
             y = r.r.y + r.img.h;
         }
     }
     if (r.child[0] != null)
     {
         this.GetExtent(r.child[0], ref x, ref y);
     }
     if (r.child[1] != null)
     {
         this.GetExtent(r.child[1], ref x, ref y);
     }
 }
Пример #6
0
        private static void drawGizmosNode(MB2_TexturePacker.Node r)
        {
            Vector3 size   = new Vector3((float)r.r.w, (float)r.r.h, 0f);
            Vector3 center = new Vector3((float)r.r.x + size.x / 2f, (float)(-(float)r.r.y) - size.y / 2f, 0f);

            Gizmos.DrawWireCube(center, size);
            if (r.img != null)
            {
                Gizmos.color = Color.blue;
                size         = new Vector3((float)r.img.w, (float)r.img.h, 0f);
                center       = new Vector3((float)r.img.x + size.x / 2f, (float)(-(float)r.img.y) - size.y / 2f, 0f);
                Gizmos.DrawCube(center, size);
            }
            if (r.child[0] != null)
            {
                Gizmos.color = Color.red;
                MB2_TexturePacker.drawGizmosNode(r.child[0]);
            }
            if (r.child[1] != null)
            {
                Gizmos.color = Color.green;
                MB2_TexturePacker.drawGizmosNode(r.child[1]);
            }
        }
Пример #7
0
 private bool Probe(MB2_TexturePacker.Image[] imgsToAdd, int idealAtlasW, int idealAtlasH, float imgArea, int maxAtlasDim, MB2_TexturePacker.ProbeResult pr)
 {
     MB2_TexturePacker.Node node = new MB2_TexturePacker.Node();
     node.r = new MB2_TexturePacker.PixRect(0, 0, idealAtlasW, idealAtlasH);
     for (int i = 0; i < imgsToAdd.Length; i++)
     {
         if (node.Insert(imgsToAdd[i], false) == null)
         {
             return(false);
         }
         if (i == imgsToAdd.Length - 1)
         {
             int num  = 0;
             int num2 = 0;
             this.GetExtent(node, ref num, ref num2);
             bool  flag;
             float num8;
             float num9;
             if (this.doPowerOfTwoTextures)
             {
                 int num3 = Mathf.Min(this.CeilToNearestPowerOfTwo(num), maxAtlasDim);
                 int num4 = Mathf.Min(this.CeilToNearestPowerOfTwo(num2), maxAtlasDim);
                 if (num4 < num3 / 2)
                 {
                     num4 = num3 / 2;
                 }
                 if (num3 < num4 / 2)
                 {
                     num3 = num4 / 2;
                 }
                 flag = (num <= maxAtlasDim && num2 <= maxAtlasDim);
                 float num5 = Mathf.Max(1f, (float)num / (float)maxAtlasDim);
                 float num6 = Mathf.Max(1f, (float)num2 / (float)maxAtlasDim);
                 float num7 = (float)num3 * num5 * (float)num4 * num6;
                 num8 = 1f - (num7 - imgArea) / num7;
                 num9 = 1f;
             }
             else
             {
                 num8 = 1f - ((float)(num * num2) - imgArea) / (float)(num * num2);
                 if (num < num2)
                 {
                     num9 = (float)num / (float)num2;
                 }
                 else
                 {
                     num9 = (float)num2 / (float)num;
                 }
                 flag = (num <= maxAtlasDim && num2 <= maxAtlasDim);
             }
             pr.Set(num, num2, node, flag, num8, num9);
             if (this.LOG_LEVEL >= MB2_LogLevel.debug)
             {
                 MB2_Log.LogDebug(string.Concat(new object[]
                 {
                     "Probe success efficiency w=",
                     num,
                     " h=",
                     num2,
                     " e=",
                     num8,
                     " sq=",
                     num9,
                     " fits=",
                     flag
                 }), new object[0]);
             }
             return(true);
         }
     }
     Debug.LogError("Should never get here.");
     return(false);
 }