using UnityEngine; using System; using System.Collections; public class TweenVec : TweenRoot { #region public override bool InOrigin { get { if (Local) { if (Target.localPosition.Equal(Origin)) { InOrigin_ = true; } else { InOrigin_ = false; } } else { if (Target.position.Equal(Origin)) { InOrigin_ = true; } else { InOrigin_ = false; } } BackwardFinish(); return InOrigin_; } set { InOrigin_ = value; InPause = false; InForward = false; InBackward = false; if (InOrigin_) { if (Local) { Target.localPosition = Origin; } else { Target.position = Origin; } BackwardFinish(); } } } public override bool InDestination { get { if (Local) { if (Target.localPosition.Equal(Destination)) { InDestination_ = true; } else { InDestination_ = false; } } else { if (Target.position.Equal(Destination)) { InDestination_ = true; } else { InDestination_ = false; } } ForwardFinish(); return InDestination_; } set { InDestination_ = value; InPause = false; InForward = false; InBackward = false; if (InDestination_) { if (Local) { Target.localPosition = Destination; } else { Target.position = Destination; } ForwardFinish(); } } } public bool Local; public Vector3 Delta; public Vector3 Origin; public Vector3 Destination; public Transform Target; public CurveFunctionV Func; #endregion public TweenVec(Transform target, Vector3 origin, Vector3 destination, float duration, bool local, bool originActive, bool destActive, Curve curve, bool cg = false) : base(cg, curve, target) { CanvasGroup = target.GetComponent(); Curve = curve; Func = AnimManager.CurveFuncDicV[curve]; Target = target; InForward = false; InBackward = false; Local = local; 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; if (Local) { Timer = AnimManager.GetTimerVec(Target.localPosition, Duration, Origin, Delta, Curve); } else { Timer = AnimManager.GetTimerVec(Target.position, Duration, Origin, Delta, Curve); } } return false; } public override bool StartBackward() { if (base.StartBackward()) { return true; } if (InForward) { InForward = false; if (Local) { Timer = AnimManager.GetTimerVec(Target.localPosition, Duration, Destination, -Delta, Curve); } else { Timer = AnimManager.GetTimerVec(Target.position, 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 { if (Local) { Target.localPosition = Func(Timer, Duration, Origin, Delta); } else { Target.position = Func(Timer, Duration, Origin, Delta); } 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 { if (Local) { Target.localPosition = Func(Timer, Duration, Destination, -Delta); } else { Target.position = Func(Timer, Duration, Destination, -Delta); } return false; } } }