public void StartAnimation(Player player, Field targetField) { _player = player; _targetField = targetField; _playerPosition = _player.transform.position; _animationStep = TunnelAnimationStep.GoInTunnel; _moveTimer = 0f; }
private void LerpTo(Vector3 start, Vector3 end, TunnelAnimationStep nextStep) { _player.transform.position = Vector3.Lerp(start, end, _moveTimer); _moveTimer += Player.LerpingModifier * Time.deltaTime; if (_moveTimer >= 1f) { _animationStep = nextStep; _moveTimer = 0f; } }
private void Update() { if (_animationStep == TunnelAnimationStep.Idle) { return; } if (_animationStep == TunnelAnimationStep.GoInTunnel) { var pA = _playerPosition; var pB = tunnelEntryPosition.position; var d = Vector3.Distance(pA, pB); var m = (pA + pB) / 2; var h = d * .3f; var q1 = m + new Vector3(0, h, 0); LerpTo(pA, q1, TunnelAnimationStep.MoveToExit); return; } if (_animationStep == TunnelAnimationStep.MoveToExit) { var pA = tunnelEntryPosition.position; var pB = tunnelExitPosition.position; var d = Vector3.Distance(pA, pB); var m = (pA + pB) / 2; var h = d * .3f; var q1 = m + new Vector3(0, h, 0); LerpTo(pA, q1, TunnelAnimationStep.MoveToField); return; } Game.Instance.GetWalkAudio().Play(); Game.Instance.StopWaiting(); _player.RegisterMovementFinishedCallback(() => { Game.Instance.HandleFinishedMovement(_player); }); _player.SetField(_targetField); _animationStep = TunnelAnimationStep.Idle; }