using UnityEngine; using System; using System.Collections; using System.Collections.Generic; using System.Linq; public class TweenGrayMesh : TweenRoot { #region 变量 public override bool InOrigin { get { if (Target.mesh.uv2[0].x.Equal(Origin)) { InOrigin_ = true; } else { InOrigin_ = false; } return InOrigin_; } set { InOrigin_ = value; InPause = false; InForward = false; InBackward = false; if (InOrigin_) { for (int i = 0; i < UV2.Count; i++) { UV2[i] = new Vector2(Origin, 1); } Target.mesh.SetUVs(1, UV2); BackwardFinish(); } } } public override bool InDestination { get { if (Target.mesh.uv2[0].x.Equal(Destination)) { InDestination_ = true; } else { InDestination_ = false; } return InDestination_; } set { InDestination_ = value; InPause = false; InForward = false; InBackward = false; if (InDestination_) { for (int i = 0; i < UV2.Count; i++) { UV2[i] = new Vector2(Destination, 1); } Target.mesh.SetUVs(1, UV2); ForwardFinish(); } } } public float Delta; public float Origin; public float Destination; public MeshFilter Target; public List UV2 = new List(); public CurveFunctionF Func; #endregion public TweenGrayMesh(MeshFilter target, float origin, float destination, float duration, bool originActive, bool destActive, Curve curve) : base(false, curve, target) { Func = AnimManager.CurveFuncDicF[curve]; Target = target; UV2 = Enumerable.Repeat(new Vector2(target.mesh.uv2[0].x, 1), target.mesh.vertices.Length).ToList(); InForward = false; InBackward = false; Delta = destination - origin; Origin = origin; Duration = duration; DestActive = destActive; Destination = destination; OriginActive = originActive; } public override bool StartForward() { if (base.StartForward()) { return true; } if (InBackward) { InBackward = false; Timer = AnimManager.GetTimerFloat(Target.mesh.uv2[0].x, Duration, Origin, Delta, Curve); } return false; } public override bool StartBackward() { if (base.StartBackward()) { return true; } if (InForward) { InForward = false; Timer = AnimManager.GetTimerFloat(Target.mesh.uv2[0].x, Duration, Destination, -Delta, Curve); } return false; } public override bool DoForward() { Timer += Time.deltaTime; if (Timer > Duration) { InDestination = true; if (OnForwardFinish != null) { OnForwardFinish.Invoke(); } SetLoop(EventType.ForwardFinish); return true; } else { float value = Func(Timer, Duration, Origin, Delta); for (int i = 0; i < UV2.Count; i++) { UV2[i] = new Vector2(value, 1); } Target.mesh.SetUVs(1, UV2); return false; } } public override bool DoBackward() { Timer += Time.deltaTime; if (Timer > Duration) { InOrigin = true; if (OnBackwardFinish != null) { OnBackwardFinish.Invoke(); } SetLoop(EventType.BackwardFinish); return true; } else { float value = Func(Timer, Duration, Destination, -Delta); for (int i = 0; i < UV2.Count; i++) { UV2[i] = new Vector2(value, 1); } Target.mesh.SetUVs(1, UV2); return false; } } }