@@ -46,7 +46,7 @@ private InlineManager Manager
4646 }
4747
4848 List < SpriteTagInfo > RenderTagList ;
49-
49+ private const string palceholder = "1" ;
5050 private bool needupdate ;
5151 private bool updatespace = true ;
5252 private string _OutputText = "" ;
@@ -179,50 +179,62 @@ void OnDrawGizmos()
179179 {
180180 Gizmos . color = Color . blue ;
181181
182- Vector3 size = new Vector3 ( preferredWidth , preferredHeight , 0 ) ;
183- Vector3 fixsize = transform . TransformDirection ( rectTransform . rect . size ) ;
184- Vector3 textsize = transform . TransformDirection ( size ) ;
185-
186- Vector3 fixpos = transform . position ;
187- //可简化
188- if ( this . alignment == TextAnchor . LowerCenter )
189- {
190- fixpos += new Vector3 ( 0 , - 0.5f * ( fixsize . y - textsize . y ) , 0 ) ;
191- }
192- else if ( this . alignment == TextAnchor . LowerLeft )
193- {
194- fixpos += new Vector3 ( - 0.5f * ( fixsize . x - textsize . x ) , - 0.5f * ( fixsize . y - textsize . y ) , 0 ) ;
195- }
196- else if ( this . alignment == TextAnchor . LowerRight )
197- {
198- fixpos += new Vector3 ( 0.5f * ( fixsize . x - textsize . x ) , - 0.5f * ( fixsize . y - textsize . y ) , 0 ) ;
199- }
200- else if ( this . alignment == TextAnchor . MiddleCenter )
201- {
202- fixpos += new Vector3 ( 0 , 0 , 0 ) ;
203- }
204- else if ( this . alignment == TextAnchor . MiddleLeft )
205- {
206- fixpos += new Vector3 ( - 0.5f * ( fixsize . x - textsize . x ) , 0 , 0 ) ;
207- }
208- else if ( this . alignment == TextAnchor . MiddleRight )
209- {
210- fixpos += new Vector3 ( 0.5f * ( fixsize . x - textsize . x ) , 0 , 0 ) ;
211- }
212- else if ( this . alignment == TextAnchor . UpperCenter )
213- {
214- fixpos += new Vector3 ( 0 , 0.5f * ( fixsize . y - textsize . y ) , 0 ) ;
215- }
216- else if ( this . alignment == TextAnchor . UpperLeft )
217- {
218- fixpos += new Vector3 ( - 0.5f * ( fixsize . x - textsize . x ) , 0.5f * ( fixsize . y - textsize . y ) , 0 ) ;
219- }
220- else if ( this . alignment == TextAnchor . UpperRight )
221- {
222- fixpos += new Vector3 ( 0.5f * ( fixsize . x - textsize . x ) , 0.5f * ( fixsize . y - textsize . y ) , 0 ) ;
223- }
224-
225- Gizmos . DrawWireCube ( fixpos , textsize ) ;
182+ var corners = new Vector3 [ 4 ] ;
183+ rectTransform . GetWorldCorners ( corners ) ;
184+
185+ Gizmos . DrawLine ( corners [ 0 ] , corners [ 1 ] ) ;
186+ Gizmos . DrawLine ( corners [ 1 ] , corners [ 2 ] ) ;
187+ Gizmos . DrawLine ( corners [ 3 ] , corners [ 3 ] ) ;
188+ Gizmos . DrawLine ( corners [ 3 ] , corners [ 0 ] ) ;
189+ //Vector3 size = new Vector3(preferredWidth, preferredHeight, 0);
190+ //Vector3 fixsize = transform.TransformDirection(rectTransform.rect.size);
191+ //Vector3 textsize = transform.TransformDirection(size);
192+
193+ //Vector3 fixpos = transform.position;
194+ //int cid = ((int)alignment) / 3;
195+ //int rid = ((int)alignment) % 3;
196+ //float pivx = this.rectTransform.pivot.x;
197+ //float pivy = this.rectTransform.pivot.y;
198+
199+ ////可简化
200+ //if (this.alignment == TextAnchor.LowerCenter)
201+ //{
202+ // fixpos += new Vector3(0, -0.5f * (fixsize.y - textsize.y), 0);
203+ //}
204+ //else if (this.alignment == TextAnchor.LowerLeft)
205+ //{
206+ // fixpos += new Vector3(-0.5f * (fixsize.x - textsize.x), -0.5f * (fixsize.y - textsize.y), 0);
207+ //}
208+ //else if (this.alignment == TextAnchor.LowerRight)
209+ //{
210+ // fixpos += new Vector3(0.5f * (fixsize.x - textsize.x), -0.5f * (fixsize.y - textsize.y), 0);
211+ //}
212+ //else if (this.alignment == TextAnchor.MiddleCenter)
213+ //{
214+ // fixpos += new Vector3(0, 0, 0);
215+ //}
216+ //else if (this.alignment == TextAnchor.MiddleLeft)
217+ //{
218+ // fixpos += new Vector3(-0.5f * (fixsize.x - textsize.x), 0, 0);
219+ //}
220+ //else if (this.alignment == TextAnchor.MiddleRight)
221+ //{
222+ // fixpos += new Vector3(0.5f * (fixsize.x - textsize.x), 0, 0);
223+ //}
224+ //else if (this.alignment == TextAnchor.UpperCenter)
225+ //{
226+ // fixpos += new Vector3(0, 0.5f * (fixsize.y - textsize.y), 0);
227+ //}
228+ //else if (this.alignment == TextAnchor.UpperLeft)
229+ //{
230+ // fixpos += new Vector3(-0.5f * (fixsize.x - textsize.x), 0.5f * (fixsize.y - textsize.y), 0);
231+ //}
232+ //else if (this.alignment == TextAnchor.UpperRight)
233+ //{
234+ // fixpos += new Vector3(0.5f * (fixsize.x - textsize.x), 0.5f * (fixsize.y - textsize.y), 0);
235+ //}
236+
237+ // Gizmos.DrawWireCube(fixpos, textsize);
226238 }
227239
228240 protected override void Start ( )
@@ -323,6 +335,17 @@ protected override void OnPopulateMesh(VertexHelper toFill)
323335 _listVertsPos . Clear ( ) ;
324336 }
325337
338+
339+ int NextSkipMin = - 10 ;
340+ int NextSkipMax = - 10 ;
341+ int TagIndex = 0 ;
342+ if ( RenderTagList != null && RenderTagList . Count > 0 )
343+ {
344+ var data = RenderTagList [ TagIndex ] ;
345+ NextSkipMin = data . GetPositionIdx ( ) ;
346+ NextSkipMax = NextSkipMin + 4 * data . GetPlaceHolderCnt ( ) ;
347+ }
348+
326349 if ( roundingOffset != Vector2 . zero )
327350 {
328351 for ( int i = 0 ; i < vertCount ; ++ i )
@@ -332,11 +355,38 @@ protected override void OnPopulateMesh(VertexHelper toFill)
332355 m_TempVerts [ tempVertsIndex ] . position *= unitsPerPixel ;
333356 m_TempVerts [ tempVertsIndex ] . position . x += roundingOffset . x ;
334357 m_TempVerts [ tempVertsIndex ] . position . y += roundingOffset . y ;
335- if ( tempVertsIndex == 3 )
336- toFill . AddUIVertexQuad ( m_TempVerts ) ;
358+
359+ if ( NextSkipMin >= 0 && i >= NextSkipMin && i <= NextSkipMax )
360+ {
361+
362+ }
363+ else
364+ {
365+ if ( tempVertsIndex == 3 )
366+ toFill . AddUIVertexQuad ( m_TempVerts ) ;
367+ }
368+
337369
338370 if ( RenderTagList != null && RenderTagList . Count > 0 )
371+ {
372+ if ( i == NextSkipMax )
373+ {
374+ TagIndex ++ ;
375+ if ( RenderTagList . Count > TagIndex )
376+ {
377+ var data = RenderTagList [ TagIndex ] ;
378+ NextSkipMin = data . GetPositionIdx ( ) ;
379+ NextSkipMax = NextSkipMin + 4 * data . GetPlaceHolderCnt ( ) ;
380+ }
381+ else
382+ {
383+ NextSkipMin = - 10 ;
384+ }
385+ }
386+
339387 _listVertsPos . Add ( m_TempVerts [ tempVertsIndex ] . position ) ;
388+ }
389+
340390 }
341391 }
342392 else
@@ -346,12 +396,37 @@ protected override void OnPopulateMesh(VertexHelper toFill)
346396 int tempVertsIndex = i & 3 ;
347397 m_TempVerts [ tempVertsIndex ] = verts [ i ] ;
348398 m_TempVerts [ tempVertsIndex ] . position *= unitsPerPixel ;
349- if ( tempVertsIndex == 3 )
350- toFill . AddUIVertexQuad ( m_TempVerts ) ;
351399
352- if ( RenderTagList != null && RenderTagList . Count > 0 )
353- _listVertsPos . Add ( m_TempVerts [ tempVertsIndex ] . position ) ;
400+ if ( NextSkipMin >= 0 && i >= NextSkipMin && i <= NextSkipMax )
401+ {
402+
403+ }
404+ else
405+ {
406+ if ( tempVertsIndex == 3 )
407+ toFill . AddUIVertexQuad ( m_TempVerts ) ;
408+ }
354409
410+
411+ if ( RenderTagList != null && RenderTagList . Count > 0 )
412+ {
413+ if ( i == NextSkipMax )
414+ {
415+ TagIndex ++ ;
416+ if ( RenderTagList . Count > TagIndex )
417+ {
418+ var data = RenderTagList [ TagIndex ] ;
419+ NextSkipMin = data . GetPositionIdx ( ) ;
420+ NextSkipMax = NextSkipMin + 4 * data . GetPlaceHolderCnt ( ) ;
421+ }
422+ else
423+ {
424+ NextSkipMin = - 10 ;
425+ }
426+ }
427+
428+ _listVertsPos . Add ( m_TempVerts [ tempVertsIndex ] . position ) ;
429+ }
355430 }
356431 }
357432
@@ -383,7 +458,7 @@ private void ClearQuadUVs(IList<UIVertex> verts)
383458 for ( int i = 0 ; i < RenderTagList . Count ; ++ i )
384459 {
385460 SpriteTagInfo info = RenderTagList [ i ] ;
386- int pos = info . _Position ;
461+ int pos = info . GetPositionIdx ( ) ;
387462 if ( ( pos + 4 ) > verts . Count )
388463 continue ;
389464 for ( int m = pos ; m < pos + 4 ; m ++ )
@@ -402,15 +477,14 @@ void CalcQuadInfo()
402477 {
403478 if ( RenderTagList != null )
404479 {
405- float height = this . preferredHeight / 2 ;
406480 for ( int i = 0 ; i < RenderTagList . Count ; ++ i )
407481 {
408482 SpriteTagInfo info = RenderTagList [ i ] ;
409- int pos = info . _Position ;
483+ int pos = info . GetPositionIdx ( ) ;
410484 if ( ( pos + 4 ) > _listVertsPos . Count )
411485 continue ;
412486
413- Vector3 p1 = _listVertsPos [ pos ] ;
487+ Vector3 p1 = _listVertsPos [ pos + 3 ] ;
414488
415489 //info._Pos[0] = p1 ;
416490 //info._Pos[1] = _listVertsPos[pos+1];
@@ -419,10 +493,10 @@ void CalcQuadInfo()
419493 //int cid = ((int)alignment) /3;
420494 //int rid = ((int)alignment) % 3;
421495
422- info . _Pos [ 0 ] = p1 + new Vector3 ( 0 , info . _Size . y / 2 + height , 0 ) ;
423- info . _Pos [ 1 ] = p1 + new Vector3 ( info . _Size . x , info . _Size . y / 2 + height , 0 ) ;
424- info . _Pos [ 2 ] = p1 + new Vector3 ( info . _Size . x , height - info . _Size . y / 2 , 0 ) ;
425- info . _Pos [ 3 ] = p1 + new Vector3 ( 0 , height - info . _Size . y / 2 , 0 ) ;
496+ info . _Pos [ 0 ] = p1 + new Vector3 ( 0 , info . _Size . y , 0 ) ;
497+ info . _Pos [ 1 ] = p1 + new Vector3 ( info . _Size . x , info . _Size . y , 0 ) ;
498+ info . _Pos [ 2 ] = p1 + new Vector3 ( info . _Size . x , 0 , 0 ) ;
499+ info . _Pos [ 3 ] = p1 + new Vector3 ( 0 , 0 , 0 ) ;
426500 }
427501 }
428502
@@ -582,14 +656,13 @@ bool ParseEmoji(string newInfo,int Index, int Id, string TagName, Match match, r
582656 if ( _SpaceGen == null )
583657 {
584658 _SpaceGen = new TextGenerator ( ) ;
585-
586659 }
587660
588661 if ( updatespace )
589662 {
590663 Vector2 extents = rectTransform . rect . size ;
591664 TextGenerationSettings settings = GetGenerationSettings ( extents ) ;
592- _SpaceGen . Populate ( " " , settings ) ;
665+ _SpaceGen . Populate ( palceholder , settings ) ;
593666 updatespace = false ;
594667 }
595668
@@ -598,31 +671,24 @@ bool ParseEmoji(string newInfo,int Index, int Id, string TagName, Match match, r
598671 float spaceheight = spaceverts [ 0 ] . position . y - spaceverts [ 3 ] . position . y ;
599672 float spacesize = Mathf . Max ( spacewid , spaceheight ) ;
600673
601- int fillspacecnt = Mathf . RoundToInt ( autosize / spacesize ) ;
602- if ( autosize > spacesize )
603- {
604- fillspacecnt = Mathf . RoundToInt ( ( autosize ) / ( spacesize ) ) ;
605- }
606- else
607- {
608- fillspacecnt = Mathf . RoundToInt ( autosize / spacesize ) ;
609- }
674+ int fillspacecnt = Mathf . CeilToInt ( autosize / spacesize ) ;
675+
610676 for ( int i = 0 ; i < fillspacecnt ; i ++ )
611677 {
612- _textBuilder . Append ( " " ) ;
678+ _textBuilder . Append ( palceholder ) ;
613679 }
614680
615681 //_textBuilder.AppendFormat("<quad material=0 x={0} y={1} size={2} width={3} />", tagSprites.x, tagSprites.y, autosize, tagSprites.width);
616682
617683 if ( RenderTagList . Count > Index )
618684 {
619685 SpriteTagInfo _tempSpriteTag = RenderTagList [ Index ] ;
620- if ( Id != _tempSpriteTag . _ID || TagName != _tempSpriteTag . _Tag || _tempIndex != _tempSpriteTag . _Position )
686+ if ( Id != _tempSpriteTag . _ID || TagName != _tempSpriteTag . _Tag || _tempIndex != _tempSpriteTag . GetPositionIdx ( ) )
621687 {
622688 _tempSpriteTag . _ID = Id ;
623689 _tempSpriteTag . _Tag = TagName ;
624690 _tempSpriteTag . _Size = new Vector2 ( autosize * tagSprites . width , autosize ) ;
625- _tempSpriteTag . _Position = _tempIndex ;
691+ _tempSpriteTag . FillIdxAndPlaceHolder ( _tempIndex , fillspacecnt ) ;
626692 _tempSpriteTag . _UV = tagSprites . spritegroups [ 0 ] . uv ;
627693 }
628694 }
@@ -634,10 +700,11 @@ bool ParseEmoji(string newInfo,int Index, int Id, string TagName, Match match, r
634700 _Tag = TagName ,
635701 _Size = new Vector2 ( autosize * tagSprites . width , autosize ) ,
636702 _Pos = new Vector3 [ 4 ] ,
637- _Position = _tempIndex ,
638703 _UV = tagSprites . spritegroups [ 0 ] . uv
639704 } ;
640705
706+ _tempSpriteTag . FillIdxAndPlaceHolder ( _tempIndex , fillspacecnt ) ;
707+
641708 RenderTagList . Add ( _tempSpriteTag ) ;
642709 }
643710
0 commit comments