Browse Source

Update 3.29 18:07

LiuQilin 8 năm trước cách đây
mục cha
commit
d6faf9f542

BIN
.vs/MyLovelyGarden/v14/.suo


BIN
Assets/Resources/Garden.unity


+ 1 - 1
Assets/Script/Manage/ManaAnim.cs

@@ -29,7 +29,7 @@ public class ManaAnim : Regist
     public static Dictionary<Curve, CurveFunctionF> FunctionDicF;
     public static Dictionary<Curve, CurveFunctionC> FunctionDicC;
     public static Dictionary<Curve, CurveFunctionV> FunctionDicV;
-
+    
     public static Dictionary<Transform, MoveVec> MoveVecDic;
     public static Dictionary<Transform, TweenCG> TweenCgDic;
     public static Dictionary<Transform, TweenGra> TweenGraDic;

+ 0 - 1
Assets/Script/Manage/ManaData.cs

@@ -100,7 +100,6 @@ public class ManaData : Regist
         }
     }
 
-
     private static int _Slot;
     private static int _Level;
     private static bool _Pause;

+ 316 - 0
Assets/TestText.cs

@@ -0,0 +1,316 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+
+public class LineInfo
+{
+    public int EndIndex;
+    public int StartIndex;
+
+    public LineInfo(int startIndex, int endIndex)
+    {
+        EndIndex = endIndex;
+        StartIndex = startIndex;
+    }
+}
+
+public class RenderInfo
+{
+    public LineInfo LineInfo;
+    public SpriteInfo SpriteInfo;
+
+    public RenderInfo(LineInfo lineInfo, SpriteInfo spriteInfo)
+    {
+        LineInfo = lineInfo;
+        SpriteInfo = spriteInfo;
+    }
+}
+
+public class TestText : Text
+{
+	#region 变量
+
+    public int LeftIndex;
+    public int RightIndex;
+
+    public bool Draw;
+    public float Width;
+    public float Height;
+    public string SpriteName;
+    public SpriteInfo SpriteInfo;
+    public List<LineInfo> LineInfoList;
+    public List<UIVertex> VertexImage;
+    public List<UIVertex> VertexStream;
+    public List<RenderInfo> RenderInfoList;
+
+    public ImagePlus ImagePlus
+    {
+        get
+        {
+            if (_ImagePlus == null)
+            {
+                _ImagePlus = GetComponentInChildren<ImagePlus>();
+
+                if (_ImagePlus == null)
+                {
+                    GameObject go = new GameObject("ImagePlus", typeof(ImagePlus));
+
+                    RectTransform rectTra = go.GetComponent<RectTransform>();
+
+                    rectTra.SetParent(rectTransform);
+                }
+            }
+
+            return _ImagePlus;
+        }
+        set { _ImagePlus = value; }
+    }
+
+    private ImagePlus _ImagePlus;
+
+    #endregion
+
+    protected override void Awake()
+    {
+        base.Awake();
+
+        verticalOverflow = VerticalWrapMode.Overflow;
+        horizontalOverflow = HorizontalWrapMode.Wrap;
+    }
+
+    protected override void OnPopulateMesh(VertexHelper toFill)
+    {
+        base.OnPopulateMesh(toFill);
+
+        if (ImagePlus == null)
+        {
+            Debug.LogWarning("There is no ImagePlus");
+
+            return;
+        }
+
+        LeftIndex = text.IndexOf("<(");
+        RightIndex = text.IndexOf(")>");
+
+        if (LeftIndex == -1 || RightIndex == -1)
+        {
+            Draw = false;
+        }
+        else
+        {
+            SpriteName = text.Between(LeftIndex + 2, RightIndex - 1);
+
+            if (SpriteAsset.SpriteInfoDic.TryGetValue(SpriteName, out SpriteInfo))
+            {
+                Draw = true;
+            }
+            else
+            {
+                Draw = false;
+            }
+        }
+
+        if (Draw)
+        {
+            Draw = false;
+
+            VertexImage = new List<UIVertex>();
+            VertexStream = new List<UIVertex>();
+
+            toFill.GetUIVertexStream(VertexStream);
+
+            Height = preferredHeight / cachedTextGenerator.lineCount;
+
+            Width = (Height / SpriteInfo.Height) * SpriteInfo.Width;
+
+            LineInfoList = GetLineInfo();
+
+            RenderInfoList = GetRenderInfo();
+
+            RenderLine(RenderInfoList[0], VertexImage, VertexStream, toFill);
+
+            ImagePlus.UpdateStatus(true, new VertexHelper(), VertexImage);
+        }
+        else
+        {
+            ImagePlus.UpdateStatus(false, new VertexHelper(), null);
+        }
+    }
+
+
+    protected void RenderLine(RenderInfo renderInfo, List<UIVertex> vertexImage, List<UIVertex> vertexStream, VertexHelper toFill)
+    {
+        Vector3 centerLeft = new Vector3();
+
+        if (LeftIndex == renderInfo.LineInfo.StartIndex)
+        {
+            centerLeft = (vertexStream[LeftIndex * 6 + 4].position + vertexStream[LeftIndex * 6 + 5].position) / 2;
+        }
+        else
+        {
+            centerLeft = (vertexStream[(LeftIndex - 1) * 6 + 1].position + vertexStream[(LeftIndex - 1) * 6 + 2].position) / 2;
+        }
+
+        UIVertex[] vertices = new UIVertex[4];
+
+        vertices[0].position = centerLeft + new Vector3(0, -Height / 2, 0);
+        vertices[1].position = centerLeft + new Vector3(0, Height / 2, 0);
+        vertices[2].position = centerLeft + new Vector3(Width, Height / 2, 0);
+        vertices[3].position = centerLeft + new Vector3(Width, -Height / 2, 0);
+
+        vertices[0].color = Color.white;
+        vertices[1].color = Color.white;
+        vertices[2].color = Color.white;
+        vertices[3].color = Color.white;
+
+        vertices[0].uv0 = SpriteAsset.SpriteInfoDic[SpriteName].UvList[0];
+        vertices[1].uv0 = SpriteAsset.SpriteInfoDic[SpriteName].UvList[1];
+        vertices[2].uv0 = SpriteAsset.SpriteInfoDic[SpriteName].UvList[2];
+        vertices[3].uv0 = SpriteAsset.SpriteInfoDic[SpriteName].UvList[3];
+
+        UIVertex vertex = new UIVertex();
+
+        for (int i = LeftIndex; i < RightIndex + 2; i++)
+        {
+            toFill.SetUIVertex(vertex, i * 4);
+            toFill.SetUIVertex(vertex, i * 4 + 1);
+            toFill.SetUIVertex(vertex, i * 4 + 2);
+            toFill.SetUIVertex(vertex, i * 4 + 3);
+        }
+
+        if (LeftIndex == renderInfo.LineInfo.StartIndex)
+        {
+            float offsetX1 = VertexStream[(RightIndex + 2) * 6].position.x - vertices[3].position.x;
+
+            float offsetX2 = (VertexStream[(BreakIndex - 1) * 6 + 1].position.x + vertices[0].position.x - offsetX1) / 2;
+
+            for (int i = RightIndex + 2; i < BreakIndex; i++)
+            {
+                vertex = VertexStream[i * 6];
+                vertex.position.x -= offsetX1 + offsetX2;
+                toFill.SetUIVertex(vertex, i * 4);
+
+                vertex = VertexStream[i * 6 + 1];
+                vertex.position.x -= offsetX1 + offsetX2;
+                toFill.SetUIVertex(vertex, i * 4 + 1);
+
+                vertex = VertexStream[i * 6 + 2];
+                vertex.position.x -= offsetX1 + offsetX2;
+                toFill.SetUIVertex(vertex, i * 4 + 2);
+
+                vertex = VertexStream[i * 6 + 4];
+                vertex.position.x -= offsetX1 + offsetX2;
+                toFill.SetUIVertex(vertex, i * 4 + 3);
+            }
+
+            vertices[0].position.x -= offsetX2;
+            vertices[1].position.x -= offsetX2;
+            vertices[2].position.x -= offsetX2;
+            vertices[3].position.x -= offsetX2;
+        }
+        else
+        {
+            float offsetX1 = VertexStream[(RightIndex + 2) * 6].position.x - vertices[3].position.x;
+
+            float offsetX2 = (VertexStream[(BreakIndex - 1) * 6 + 1].position.x + VertexStream[0].position.x - offsetX1) / 2;
+
+            for (int i = 0; i < LeftIndex; i++)
+            {
+                vertex = VertexStream[i * 6];
+                vertex.position.x -= offsetX2;
+                toFill.SetUIVertex(vertex, i * 4);
+
+                vertex = VertexStream[i * 6 + 1];
+                vertex.position.x -= offsetX2;
+                toFill.SetUIVertex(vertex, i * 4 + 1);
+
+                vertex = VertexStream[i * 6 + 2];
+                vertex.position.x -= offsetX2;
+                toFill.SetUIVertex(vertex, i * 4 + 2);
+
+                vertex = VertexStream[i * 6 + 4];
+                vertex.position.x -= offsetX2;
+                toFill.SetUIVertex(vertex, i * 4 + 3);
+            }
+
+            for (int i = RightIndex + 2; i < BreakIndex; i++)
+            {
+                vertex = VertexStream[i * 6];
+                vertex.position.x -= offsetX1 + offsetX2;
+                toFill.SetUIVertex(vertex, i * 4);
+
+                vertex = VertexStream[i * 6 + 1];
+                vertex.position.x -= offsetX1 + offsetX2;
+                toFill.SetUIVertex(vertex, i * 4 + 1);
+
+                vertex = VertexStream[i * 6 + 2];
+                vertex.position.x -= offsetX1 + offsetX2;
+                toFill.SetUIVertex(vertex, i * 4 + 2);
+
+                vertex = VertexStream[i * 6 + 4];
+                vertex.position.x -= offsetX1 + offsetX2;
+                toFill.SetUIVertex(vertex, i * 4 + 3);
+            }
+
+            vertices[0].position.x -= offsetX2;
+            vertices[1].position.x -= offsetX2;
+            vertices[2].position.x -= offsetX2;
+            vertices[3].position.x -= offsetX2;
+        }
+    }
+
+
+    protected List<LineInfo> GetLineInfo()
+    {
+        int startIndex = 0;
+
+        List<LineInfo> lineInfoList = new List<LineInfo>();
+
+        if (cachedTextGenerator.lineCount > 1)
+        {
+            for (int i = 0; i < text.Length; i++)
+            {
+                if (text[i] == '\n')
+                {
+                    if (text[startIndex] != '\n')
+                    {
+                        lineInfoList.Add(new LineInfo(startIndex, i));
+                    }
+                    
+                    if (i + 1 == text.Length)
+                    {
+                        return lineInfoList;
+                    }
+                    else
+                    {
+                        startIndex = i + 1;
+                    }
+                }
+            }
+        }
+        
+        lineInfoList.Add(new LineInfo(startIndex, text.Length - 1));
+
+        return lineInfoList;
+    }
+
+    protected List<RenderInfo> GetRenderInfo()
+    {
+        List<RenderInfo> renderInfoList = new List<RenderInfo>();
+
+        for (int i = 0; i < LineInfoList.Count; i++)
+        {
+            if (LeftIndex >= LineInfoList[i].StartIndex && LeftIndex < LineInfoList[i].EndIndex)
+            {
+                renderInfoList.Add(new RenderInfo(LineInfoList[i], SpriteInfo));
+
+                break;
+            }
+        }
+
+        return renderInfoList;
+    }
+}

+ 12 - 0
Assets/TestText.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9a904f40657a1fc44ad84109ff8999c9
+timeCreated: 1490772216
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 5 - 0
MyLovelyGarden.txt

@@ -1,3 +1,8 @@
+能显示多个图片 图片能出现在任意位置
+
+TextPlus更具Alignment设置位置
+
+
 字体
 
 Anchor