public static void Add(Transform aTransform, JuiceType aType, AnimationCurve aCurve, float aStart = 0, float aEnd = 1, float aDuration = 1, bool aRelative = false, Action aCallback = null) { JuiceData data = new JuiceData(); data.transform = aTransform; data.type = aType; data.curve = aCurve; data.start = aStart; data.duration = aDuration; data.startTime = Time.time; data.end = aEnd; data.relative = aRelative; data.callback = aCallback; Instance.list.Add(data); data.Update(); }
public bool Update() { if (transform == null) { return(true); } float percent = Mathf.Min((Time.time - startTime) / duration, 1f); float value = start + curve.Evaluate(percent) * (end - start); if (relative) { float prevPercent = Mathf.Max(0, Mathf.Min(((Time.time - Time.deltaTime) - startTime) / duration, 1f)); value = value - (start + curve.Evaluate(prevPercent) * (end - start)); } JuiceType t = type; bool doPos = false; bool doScale = false; bool doRot = false; Vector3 pos = relative ? Vector3.zero : transform.localPosition; Vector3 scale = relative ? Vector3.zero : transform.localScale; Vector3 rot = relative ? Vector3.zero : transform.eulerAngles; // translation if ((t & JuiceType.TranslateX) > 0) { pos.x = value; doPos = true; } if ((t & JuiceType.TranslateY) > 0) { pos.y = value; doPos = true; } if ((t & JuiceType.TranslateZ) > 0) { pos.z = value; doPos = true; } // scale if ((t & JuiceType.ScaleX) > 0) { scale.x = value; doScale = true; } if ((t & JuiceType.ScaleY) > 0) { scale.y = value; doScale = true; } if ((t & JuiceType.ScaleZ) > 0) { scale.z = value; doScale = true; } // rotation if ((t & JuiceType.RotationX) > 0) { rot.x = value; doRot = true; } if ((t & JuiceType.RotationY) > 0) { rot.y = value; doRot = true; } if ((t & JuiceType.RotationZ) > 0) { rot.z = value; doRot = true; } if (doPos && relative) { transform.localPosition += pos; } else if (doPos) { transform.localPosition = pos; } if (doScale && relative) { transform.localScale += scale; } else if (doScale) { transform.localScale = scale; } if (doRot && relative) { transform.localEulerAngles += rot; } else if (doRot) { transform.localEulerAngles = rot; } return(percent >= 1.0f); }