@@ -18,56 +18,62 @@ public static void ExpandCapacity(List<UIVertex> verts, int multiplier)
18
18
}
19
19
}
20
20
21
- public static void Expand ( List < UIVertex > verts , int start , int bundleSize , Vector2 expandSize , Rect bounds )
21
+ public static void Expand ( List < UIVertex > verts , int start , int bundleSize , Vector4 expandSize , Rect bounds )
22
22
{
23
- if ( expandSize == Vector2 . zero ) return ;
23
+ if ( expandSize == Vector4 . zero ) return ;
24
24
25
- // Quad (6 vertices)
26
- for ( var j = 0 ; j < bundleSize ; j += 6 )
25
+ for ( var j = 0 ; j < bundleSize ; j += 3 )
27
26
{
28
- var size = default ( Vector3 ) ;
29
- var extendPos = default ( Vector3 ) ;
30
- var extendUV = default ( Vector3 ) ;
31
- var posLB = verts [ start + j + 1 ] . position ;
32
- var posRT = verts [ start + j + 4 ] . position ;
33
- var willExpand = bundleSize == 6 // Text or simple quad
34
- || ! bounds . Contains ( posLB )
35
- || ! bounds . Contains ( posRT ) ; // Outer 9-sliced quad
36
- if ( willExpand )
27
+ if ( bounds . Contains ( verts [ start + j + 0 ] . position )
28
+ && bounds . Contains ( verts [ start + j + 1 ] . position )
29
+ && bounds . Contains ( verts [ start + j + 2 ] . position ) )
37
30
{
38
- var uvLB = verts [ start + j + 1 ] . uv0 ;
39
- var uvRT = verts [ start + j + 4 ] . uv0 ;
40
- var posCenter = ( posLB + posRT ) / 2 ;
41
- var uvCenter = ( uvLB + uvRT ) / 2 ;
42
- size = posLB - posRT ;
43
- size . x = 1 + expandSize . x / Mathf . Abs ( size . x ) ;
44
- size . y = 1 + expandSize . y / Mathf . Abs ( size . y ) ;
45
- size . z = 1 ;
46
- extendPos = posCenter - Vector3 . Scale ( size , posCenter ) ;
47
- extendUV = uvCenter - Vector4 . Scale ( size , uvCenter ) ;
31
+ continue ;
48
32
}
49
33
34
+ GetBounds ( verts , start + j , 3 , out var posBounds , out var uvBounds ) ;
35
+ var posCenter = ( Vector4 ) posBounds . center ;
36
+ posCenter . z = posCenter . x ;
37
+ posCenter . w = posCenter . y ;
38
+ var uvCenter = ( Vector4 ) uvBounds . center ;
39
+ uvCenter . z = uvCenter . x ;
40
+ uvCenter . w = uvCenter . y ;
41
+ var size = ( Vector4 ) posBounds . size ;
42
+ size . z = 1 + expandSize . z / Mathf . Abs ( size . x ) ;
43
+ size . w = 1 + expandSize . w / Mathf . Abs ( size . y ) ;
44
+ size . x = 1 + expandSize . x / Mathf . Abs ( size . x ) ;
45
+ size . y = 1 + expandSize . y / Mathf . Abs ( size . y ) ;
46
+ var extendPos = posCenter - Vector4 . Scale ( size , posCenter ) ;
47
+ var extendUV = uvCenter - Vector4 . Scale ( size , uvCenter ) ;
48
+
50
49
// Set vertex position, uv, uvMask and local normalized position.
51
- for ( var k = 0 ; k < 6 ; k ++ )
50
+ for ( var k = 0 ; k < 3 ; k ++ )
52
51
{
53
52
var vt = verts [ start + j + k ] ;
54
53
var pos = vt . position ;
55
54
var uv0 = vt . uv0 ;
56
55
57
56
// Expand edge vertex
58
- if ( willExpand )
57
+ if ( pos . x < bounds . xMin )
59
58
{
60
- if ( pos . x < bounds . xMin || bounds . xMax < pos . x )
61
- {
62
- pos . x = pos . x * size . x + extendPos . x ;
63
- uv0 . x = uv0 . x * size . x + extendUV . x ;
64
- }
59
+ pos . x = pos . x * size . x + extendPos . x ;
60
+ uv0 . x = uv0 . x * size . x + extendUV . x ;
61
+ }
62
+ else if ( bounds . xMax < pos . x )
63
+ {
64
+ pos . x = pos . x * size . z + extendPos . z ;
65
+ uv0 . x = uv0 . x * size . z + extendUV . z ;
66
+ }
65
67
66
- if ( pos . y < bounds . yMin || bounds . yMax < pos . y )
67
- {
68
- pos . y = pos . y * size . y + extendPos . y ;
69
- uv0 . y = uv0 . y * size . y + extendUV . y ;
70
- }
68
+ if ( pos . y < bounds . yMin )
69
+ {
70
+ pos . y = pos . y * size . y + extendPos . y ;
71
+ uv0 . y = uv0 . y * size . y + extendUV . y ;
72
+ }
73
+ else if ( bounds . yMax < pos . y )
74
+ {
75
+ pos . y = pos . y * size . w + extendPos . w ;
76
+ uv0 . y = uv0 . y * size . w + extendUV . w ;
71
77
}
72
78
73
79
vt . position = pos ;
0 commit comments