Author Topic: Corners problem  (Read 2712 times)

uriy1250

  • Newbie
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Posts: 1
    • View Profile
Corners problem
« on: January 06, 2015, 02:57:11 AM »
Hi, I make a sprite, Type: "Advanced", chosed "Tiled" for all sides, and all corners of the sprite dissapeared.
They appeared if I selected to "Sliced", but I need "Tiled" mode. Looks like it's really bug.
Thanks!

Nicki

  • Global Moderator
  • Hero Member
  • *****
  • Thank You
  • -Given: 33
  • -Receive: 141
  • Posts: 1,768
    • View Profile
Re: Corners problem
« Reply #1 on: January 06, 2015, 09:30:34 AM »
It is indeed. Or at least, I assume so.

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,128
  • Toronto, Canada
    • View Profile
Re: Corners problem
« Reply #2 on: January 06, 2015, 11:05:57 AM »
Hmm.. Strange. I'll get it fixed, thanks.

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,128
  • Toronto, Canada
    • View Profile
Re: Corners problem
« Reply #3 on: January 06, 2015, 11:08:41 AM »
You can fix it on your end by replacing UIBasicSprite.AdvancedFill function with this one:
  1.         void AdvancedFill (BetterList<Vector3> verts, BetterList<Vector2> uvs, BetterList<Color32> cols)
  2.         {
  3.                 Texture tex = mainTexture;
  4.                 if (tex == null) return;
  5.  
  6.                 Vector4 br = border * pixelSize;
  7.  
  8.                 if (br.x == 0f && br.y == 0f && br.z == 0f && br.w == 0f)
  9.                 {
  10.                         SimpleFill(verts, uvs, cols);
  11.                         return;
  12.                 }
  13.  
  14.                 Color32 c = drawingColor;
  15.                 Vector4 v = drawingDimensions;
  16.                 Vector2 tileSize = new Vector2(mInnerUV.width * tex.width, mInnerUV.height * tex.height);
  17.                 tileSize *= pixelSize;
  18.  
  19.                 if (tileSize.x < 1f) tileSize.x = 1f;
  20.                 if (tileSize.y < 1f) tileSize.y = 1f;
  21.  
  22.                 mTempPos[0].x = v.x;
  23.                 mTempPos[0].y = v.y;
  24.                 mTempPos[3].x = v.z;
  25.                 mTempPos[3].y = v.w;
  26.  
  27.                 if (mFlip == Flip.Horizontally || mFlip == Flip.Both)
  28.                 {
  29.                         mTempPos[1].x = mTempPos[0].x + br.z;
  30.                         mTempPos[2].x = mTempPos[3].x - br.x;
  31.  
  32.                         mTempUVs[3].x = mOuterUV.xMin;
  33.                         mTempUVs[2].x = mInnerUV.xMin;
  34.                         mTempUVs[1].x = mInnerUV.xMax;
  35.                         mTempUVs[0].x = mOuterUV.xMax;
  36.                 }
  37.                 else
  38.                 {
  39.                         mTempPos[1].x = mTempPos[0].x + br.x;
  40.                         mTempPos[2].x = mTempPos[3].x - br.z;
  41.  
  42.                         mTempUVs[0].x = mOuterUV.xMin;
  43.                         mTempUVs[1].x = mInnerUV.xMin;
  44.                         mTempUVs[2].x = mInnerUV.xMax;
  45.                         mTempUVs[3].x = mOuterUV.xMax;
  46.                 }
  47.  
  48.                 if (mFlip == Flip.Vertically || mFlip == Flip.Both)
  49.                 {
  50.                         mTempPos[1].y = mTempPos[0].y + br.w;
  51.                         mTempPos[2].y = mTempPos[3].y - br.y;
  52.  
  53.                         mTempUVs[3].y = mOuterUV.yMin;
  54.                         mTempUVs[2].y = mInnerUV.yMin;
  55.                         mTempUVs[1].y = mInnerUV.yMax;
  56.                         mTempUVs[0].y = mOuterUV.yMax;
  57.                 }
  58.                 else
  59.                 {
  60.                         mTempPos[1].y = mTempPos[0].y + br.y;
  61.                         mTempPos[2].y = mTempPos[3].y - br.w;
  62.  
  63.                         mTempUVs[0].y = mOuterUV.yMin;
  64.                         mTempUVs[1].y = mInnerUV.yMin;
  65.                         mTempUVs[2].y = mInnerUV.yMax;
  66.                         mTempUVs[3].y = mOuterUV.yMax;
  67.                 }
  68.  
  69.                 for (int x = 0; x < 3; ++x)
  70.                 {
  71.                         int x2 = x + 1;
  72.  
  73.                         for (int y = 0; y < 3; ++y)
  74.                         {
  75.                                 if (centerType == AdvancedType.Invisible && x == 1 && y == 1) continue;
  76.                                 int y2 = y + 1;
  77.  
  78.                                 if (x == 1 && y == 1) // Center
  79.                                 {
  80.                                         if (centerType == AdvancedType.Tiled)
  81.                                         {
  82.                                                 float startPositionX = mTempPos[x].x;
  83.                                                 float endPositionX = mTempPos[x2].x;
  84.                                                 float startPositionY = mTempPos[y].y;
  85.                                                 float endPositionY = mTempPos[y2].y;
  86.                                                 float textureStartX = mTempUVs[x].x;
  87.                                                 float textureStartY = mTempUVs[y].y;
  88.                                                 float tileStartY = startPositionY;
  89.  
  90.                                                 while (tileStartY < endPositionY)
  91.                                                 {
  92.                                                         float tileStartX = startPositionX;
  93.                                                         float textureEndY = mTempUVs[y2].y;
  94.                                                         float tileEndY = tileStartY + tileSize.y;
  95.  
  96.                                                         if (tileEndY > endPositionY)
  97.                                                         {
  98.                                                                 textureEndY = Mathf.Lerp(textureStartY, textureEndY, (endPositionY - tileStartY) / tileSize.y);
  99.                                                                 tileEndY = endPositionY;
  100.                                                         }
  101.  
  102.                                                         while (tileStartX < endPositionX)
  103.                                                         {
  104.                                                                 float tileEndX = tileStartX + tileSize.x;
  105.                                                                 float textureEndX = mTempUVs[x2].x;
  106.  
  107.                                                                 if (tileEndX > endPositionX)
  108.                                                                 {
  109.                                                                         textureEndX = Mathf.Lerp(textureStartX, textureEndX, (endPositionX - tileStartX) / tileSize.x);
  110.                                                                         tileEndX = endPositionX;
  111.                                                                 }
  112.  
  113.                                                                 Fill(verts, uvs, cols,
  114.                                                                         tileStartX, tileEndX,
  115.                                                                         tileStartY, tileEndY,
  116.                                                                         textureStartX, textureEndX,
  117.                                                                         textureStartY, textureEndY, c);
  118.  
  119.                                                                 tileStartX += tileSize.x;
  120.                                                         }
  121.                                                         tileStartY += tileSize.y;
  122.                                                 }
  123.                                         }
  124.                                         else if (centerType == AdvancedType.Sliced)
  125.                                         {
  126.                                                 Fill(verts, uvs, cols,
  127.                                                         mTempPos[x].x, mTempPos[x2].x,
  128.                                                         mTempPos[y].y, mTempPos[y2].y,
  129.                                                         mTempUVs[x].x, mTempUVs[x2].x,
  130.                                                         mTempUVs[y].y, mTempUVs[y2].y, c);
  131.                                         }
  132.                                 }
  133.                                 else if (x == 1) // Top or bottom
  134.                                 {
  135.                                         if ((y == 0 && bottomType == AdvancedType.Tiled) || (y == 2 && topType == AdvancedType.Tiled))
  136.                                         {
  137.                                                 float startPositionX = mTempPos[x].x;
  138.                                                 float endPositionX = mTempPos[x2].x;
  139.                                                 float startPositionY = mTempPos[y].y;
  140.                                                 float endPositionY = mTempPos[y2].y;
  141.                                                 float textureStartX = mTempUVs[x].x;
  142.                                                 float textureStartY = mTempUVs[y].y;
  143.                                                 float textureEndY = mTempUVs[y2].y;
  144.                                                 float tileStartX = startPositionX;
  145.  
  146.                                                 while (tileStartX < endPositionX)
  147.                                                 {
  148.                                                         float tileEndX = tileStartX + tileSize.x;
  149.                                                         float textureEndX = mTempUVs[x2].x;
  150.  
  151.                                                         if (tileEndX > endPositionX)
  152.                                                         {
  153.                                                                 textureEndX = Mathf.Lerp(textureStartX, textureEndX, (endPositionX - tileStartX) / tileSize.x);
  154.                                                                 tileEndX = endPositionX;
  155.                                                         }
  156.  
  157.                                                         Fill(verts, uvs, cols,
  158.                                                                 tileStartX, tileEndX,
  159.                                                                 startPositionY, endPositionY,
  160.                                                                 textureStartX, textureEndX,
  161.                                                                 textureStartY, textureEndY, c);
  162.  
  163.                                                         tileStartX += tileSize.x;
  164.                                                 }
  165.                                         }
  166.                                         else if ((y == 0 && bottomType != AdvancedType.Invisible) || (y == 2 && topType != AdvancedType.Invisible))
  167.                                         {
  168.                                                 Fill(verts, uvs, cols,
  169.                                                         mTempPos[x].x, mTempPos[x2].x,
  170.                                                         mTempPos[y].y, mTempPos[y2].y,
  171.                                                         mTempUVs[x].x, mTempUVs[x2].x,
  172.                                                         mTempUVs[y].y, mTempUVs[y2].y, c);
  173.                                         }
  174.                                 }
  175.                                 else if (y == 1) // Left or right
  176.                                 {
  177.                                         if ((x == 0 && leftType == AdvancedType.Tiled) || (x == 2 && rightType == AdvancedType.Tiled))
  178.                                         {
  179.                                                 float startPositionX = mTempPos[x].x;
  180.                                                 float endPositionX = mTempPos[x2].x;
  181.                                                 float startPositionY = mTempPos[y].y;
  182.                                                 float endPositionY = mTempPos[y2].y;
  183.                                                 float textureStartX = mTempUVs[x].x;
  184.                                                 float textureEndX = mTempUVs[x2].x;
  185.                                                 float textureStartY = mTempUVs[y].y;
  186.                                                 float tileStartY = startPositionY;
  187.  
  188.                                                 while (tileStartY < endPositionY)
  189.                                                 {
  190.                                                         float textureEndY = mTempUVs[y2].y;
  191.                                                         float tileEndY = tileStartY + tileSize.y;
  192.  
  193.                                                         if (tileEndY > endPositionY)
  194.                                                         {
  195.                                                                 textureEndY = Mathf.Lerp(textureStartY, textureEndY, (endPositionY - tileStartY) / tileSize.y);
  196.                                                                 tileEndY = endPositionY;
  197.                                                         }
  198.  
  199.                                                         Fill(verts, uvs, cols,
  200.                                                                 startPositionX, endPositionX,
  201.                                                                 tileStartY, tileEndY,
  202.                                                                 textureStartX, textureEndX,
  203.                                                                 textureStartY, textureEndY, c);
  204.  
  205.                                                         tileStartY += tileSize.y;
  206.                                                 }
  207.                                         }
  208.                                         else if ((x == 0 && leftType != AdvancedType.Invisible) || (x == 2 && rightType != AdvancedType.Invisible))
  209.                                         {
  210.                                                 Fill(verts, uvs, cols,
  211.                                                         mTempPos[x].x, mTempPos[x2].x,
  212.                                                         mTempPos[y].y, mTempPos[y2].y,
  213.                                                         mTempUVs[x].x, mTempUVs[x2].x,
  214.                                                         mTempUVs[y].y, mTempUVs[y2].y, c);
  215.                                         }
  216.                                 }
  217.                                 else // Corner
  218.                                 {
  219.                                         if ((y == 0 && bottomType != AdvancedType.Invisible) || (y == 2 && topType != AdvancedType.Invisible) ||
  220.                                                 (x == 0 && leftType != AdvancedType.Invisible) || (x == 2 && rightType != AdvancedType.Invisible))
  221.                                         {
  222.                                                 Fill(verts, uvs, cols,
  223.                                                         mTempPos[x].x, mTempPos[x2].x,
  224.                                                         mTempPos[y].y, mTempPos[y2].y,
  225.                                                         mTempUVs[x].x, mTempUVs[x2].x,
  226.                                                         mTempUVs[y].y, mTempUVs[y2].y, c);
  227.                                         }
  228.                                 }
  229.                         }
  230.                 }
  231.         }

uriy1250

  • Newbie
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Posts: 1
    • View Profile
Re: Corners problem
« Reply #4 on: January 08, 2015, 03:48:50 AM »
It works, thanks a lot!