//create 3 tweens destination while rotating and start climb until TweenData[] InteractBarrierBaseTweens(Barrier barrier, int memberPositionInPass, out Vector3 endPosition, float goStartTime, float goEndTime, Action reachStart = null) { endPosition = barrier.passStartPosition; switch (barrier) { case LadderWall wall: endPosition.y = _mem.transform.localScale.y + barrier.steps[memberPositionInPass].y; Debug.Log($"barrier step position y { barrier.steps[memberPositionInPass]} end target is {endPosition.y} and memberPositionInPass {memberPositionInPass}"); break; default: break; } TweenData goToPassStart = MemberSequenceUtils.GoToDestination(_mem.transform, barrier.passStartPosition, goStartTime); if (reachStart != null) { goToPassStart.SetOnComplete(() => reachStart()); //when member reached to climb point sent another one } goToPassStart.join = true; // Vector3 target = MathfUtils.Clerp( transform.rotation.eulerAngles, barrier.transform.rotation.eulerAngles * -1,1); Quaternion targetRotation = Quaternion.LookRotation(-barrier.transform.forward, Vector3.up); TweenData rotateToPassStart = MemberSequenceUtils.RotateTowardsDestination(_mem.transform, targetRotation.eulerAngles, goStartTime / 2f); rotateToPassStart.join = true; TweenData goToPassEnd = MemberSequenceUtils.GoToDestination(_mem.transform, endPosition, goEndTime); return(new[] { goToPassStart, rotateToPassStart, goToPassEnd }); }
public void MemberJump(Vector3 fellStarPos, Action reachedJumpFrom) { fellStarPos.y = _mem.transform.position.y; float goStartTime = Mathf.Clamp(Vector3.Distance(_anim.transform.position, fellStarPos), 0.5f, 0.7f); TweenData goTowardJumpPos = MemberSequenceUtils.GoToDestination(_anim.transform, fellStarPos, goStartTime); //goTowardJumpPos.SetOnComplete(reachedJumpFrom); goTowardJumpPos.join = true; //_mem.transform.LookAt(fellStarPos); Quaternion targetRot = Quaternion.LookRotation(fellStarPos); TweenData rotateToJumpPos = MemberSequenceUtils.RotateTowardsDestination(_mem.transform, targetRot.eulerAngles, goStartTime / 2f); rotateToJumpPos.join = true; MemberSequenceUtils.BuildTweenSequence(new [] { goTowardJumpPos, rotateToJumpPos }, (() => reachedJumpFrom())); AnimData walkAnim = new AnimData(MemberAnimType.Locomotion, goStartTime); AnimData jumpAnim = new AnimData(MemberAnimType.Jump, 0f); _mem.StartCoroutine(DoAnimSequence(walkAnim, jumpAnim)); }