| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- using UnityEngine;
- using UnityEngine.UI;
- using System.Collections.Generic;
- namespace WXB
- {
- [ExecuteInEditMode]
- public class CartoonDraw : EffectDrawObjec, ICanvasElement
- {
- public override DrawType type { get { return DrawType.Cartoon; } }
- public Cartoon cartoon { get; set; }
- int frameIndex = 0;
- float mDelta = 0f;
- int curIdx = -1;
- void UpdateAnim(float deltaTime)
- {
- /*mDelta += Mathf.Min(1f, deltaTime);
- float delta = 5f;
- if (cartoon.fps.Length - 1 > frameIndex)
- {
- delta = cartoon.fps[frameIndex];
- }
- float rate = 1f / delta;
- while (rate < mDelta)
- {
- mDelta = (rate > 0f) ? mDelta - rate : 0f;
- if (++frameIndex >= cartoon.sprites.Length)
- {
- frameIndex = 0;
- }
- }*/
- curIdx += 1;
- int delta = 1;
- if (cartoon.fps.Length - 1 > frameIndex)
- {
- delta = cartoon.fps[frameIndex] - 1;
- }
- if (curIdx >= delta)
- {
- curIdx = -1;
- if (++frameIndex >= cartoon.sprites.Length)
- {
- frameIndex = 0;
- }
- }
- if (frameIndex < 0)
- frameIndex = 0;
- }
- class Data
- {
- public Vector2 leftPos;
- public Color color;
- public float width;
- public float height;
- public void Gen(VertexHelper vh, Vector4 uv, int xOffset, int yOffset)
- {
- int count = vh.currentVertCount;
- vh.AddVert(new Vector3(leftPos.x + xOffset, leftPos.y + yOffset), color, new Vector2(uv.x, uv.y));
- vh.AddVert(new Vector3(leftPos.x + xOffset, leftPos.y + height + yOffset), color, new Vector2(uv.x, uv.w));
- vh.AddVert(new Vector3(leftPos.x + width + xOffset, leftPos.y + height + yOffset), color, new Vector2(uv.z, uv.w));
- vh.AddVert(new Vector3(leftPos.x + width + xOffset, leftPos.y + yOffset), color, new Vector2(uv.z, uv.y));
- vh.AddTriangle(count, count + 1, count + 2);
- vh.AddTriangle(count + 2, count + 3, count);
- }
- }
- List<Data> mData = new List<Data>();
- public bool isOpenAlpha
- {
- get { return GetOpen(0); }
- set { SetOpen<AlphaEffect>(0, value); }
- }
- public bool isOpenOffset
- {
- get { return GetOpen(1); }
- set { SetOpen<OffsetEffect>(1, value); }
- }
- public void Add(Vector2 leftPos, float width, float height, Color color)
- {
- mData.Add(new Data() { leftPos = leftPos, color = color, width = width, height = height });
- }
- public override void UpdateSelf(float deltaTime)
- {
- base.UpdateSelf(deltaTime);
- int f = frameIndex;
- UpdateAnim(deltaTime);
- if (f != frameIndex)
- {
- CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild(this);
- }
- #if UNITY_EDITOR
- else
- {
- if (Application.isEditor)
- {
- CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild(this);
- }
- }
- #endif
- }
- public override void Rebuild(CanvasUpdate executing)
- {
- if (executing != CanvasUpdate.PreRender)
- return;
- if (mData == null)
- return;
- Sprite s = cartoon.sprites[frameIndex];
- var uv = UnityEngine.Sprites.DataUtility.GetOuterUV(cartoon.sprites[frameIndex]);
- VertexHelper vh = Tools.vertexHelper;
- vh.Clear();
- for (int i = 0; i < mData.Count; ++i)
- {
- mData[i].Gen(vh, uv, cartoon.xOffset, cartoon.yOffset);
- }
- Mesh workerMesh = SymbolText.WorkerMesh;
- vh.FillMesh(workerMesh);
- canvasRenderer.SetMesh(workerMesh);
- canvasRenderer.SetTexture(s.texture);
- }
- public override void Release()
- {
- base.Release();
- mData.Clear();
- frameIndex = 0;
- curIdx = -1;
- }
- public override void GraphicUpdateComplete() { }
- public override bool IsDestroyed() { return this == null; }
- public override void LayoutComplete() { }
- }
- }
|