/// <summary> /// starts a tween to the target spot, optionally setting the destination position to a "GoodSpotForCmder" /// </summary> /// <param name="trans"></param> /// <param name="destSpot"></param> /// <param name="cmderAdjusted"></param> public void StartTween(Transform trans, ZoneSpot destSpot, bool cmderAdjusted) { TransformTween newTween = GetATween(); newTween.ResetData(trans, destSpot, cmderAdjusted); activeTweens.Add(newTween); StartCoroutine(TweenRoutine(newTween)); }
/// <summary> /// recycles or creates a new tween /// </summary> /// <returns></returns> public TransformTween GetATween() { TransformTween returnedTween = null; if (inactiveTweens.Count > 0) { returnedTween = inactiveTweens[0]; inactiveTweens.RemoveAt(0); } else { returnedTween = new TransformTween(); } return(returnedTween); }
IEnumerator TweenRoutine(TransformTween tween) { Vector3 originalCmderPos = tween.movingTrans.transform.position; tween.destPos = tween.cmderAdjusted ? tween.destSpot.GetGoodSpotForCommander( GameController.GetCommandersInZone(tween.destSpot.data as Zone).Count - 1) : tween.destSpot.transform.position; while (tween.elapsedTweenTime < TWEEN_ANIM_MOVE_DURATION) { tween.movingTrans.transform.position = Vector3.Slerp(originalCmderPos, tween.destPos, tween.elapsedTweenTime / TWEEN_ANIM_MOVE_DURATION); tween.elapsedTweenTime += Time.deltaTime; yield return(null); } tween.movingTrans.transform.position = tween.destPos; activeTweens.Remove(tween); inactiveTweens.Add(tween); }
void Start() { TransformTween.SwingTransform(transform, 2, 2).Repeat(-1).Start(); }