Commit be7d37c6 authored by Gerard Gascón's avatar Gerard Gascón
Browse files

feat: End animation working

parent e74c6808
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -563,6 +563,8 @@ MonoBehaviour:
  m_EditorClassIdentifier: 
  text: {fileID: 379057222}
  animator: {fileID: 902566664}
  growAnimation: {fileID: 11400000, guid: 7f3b3c6fe0a532348bade08980464924, type: 2}
  endAnimation: {fileID: 11400000, guid: 8bca0def51335744994817560a43be74, type: 2}
--- !u!225 &311490074
CanvasGroup:
  m_ObjectHideFlags: 0
+0 −2
Original line number Diff line number Diff line
@@ -29,8 +29,6 @@
			int value = Value % GrowIterations == 0 ? Value : Value / GrowIterations * GrowIterations;

			float relativeScore = value % (GrowIterations * SpawnRate);
			if (relativeScore == 0 && value != 0)
				relativeScore = GrowIterations * SpawnRate;
			GrowPercentage = relativeScore / (SpawnRate * GrowIterations);
		}
	}
+33 −4
Original line number Diff line number Diff line
@@ -4,7 +4,8 @@ using UnityEngine;
namespace FramedAnimator {
	[RequireComponent(typeof(SpriteRenderer))]
	public class Animator : MonoBehaviour {
		[SerializeField] private Animation animation;
		[SerializeField] private new Animation animation;
		public string CurrentAnimation => animation.name;

		private float _currentFrame;
		private int _renderingFrame;
@@ -12,21 +13,49 @@ namespace FramedAnimator {

		private SpriteRenderer _renderer;

		private bool _animationEnded;
		public event Action<string> OnAnimationEnd;

		private void Awake() {
			_renderer = GetComponent<SpriteRenderer>();
		}

		private void Update() {
			if (_renderingFrame >= _limit)
			if (_renderingFrame >= _limit) {
				TryCallAnimationEnd();
				return;
			_currentFrame += Time.deltaTime * animation.FrameRate;
			}
			UpdateAnimationFrame();
		}

		private void UpdateAnimationFrame() {
			_currentFrame += Time.deltaTime * animation.FrameRate;
			_renderingFrame = Mathf.Clamp(Mathf.FloorToInt(_currentFrame), 0, _limit);
			_renderer.sprite = animation.GetFrame(_renderingFrame);
		}

		private void TryCallAnimationEnd() {
			if (_renderingFrame < animation.FrameCount - 1 || _animationEnded) return;

			_currentFrame += Time.deltaTime * animation.FrameRate;
			_renderingFrame = Mathf.FloorToInt(_currentFrame);

			if (_renderingFrame <= _limit) return;
			_animationEnded = true;
			OnAnimationEnd?.Invoke(animation.name);
		}

		public void ChangeAnimation(Animation anim) {
			_animationEnded = false;
			_limit = _renderingFrame = 0;
			_currentFrame = 0f;
			animation = anim;

			_renderer.sprite = animation.GetFrame(_renderingFrame);
		}

		public void PlayUntil(float fraction) {
			_limit = Mathf.RoundToInt(animation.FrameCount * Mathf.Clamp(fraction, 0, 1));
			_limit = Mathf.RoundToInt(animation.FrameCount * Mathf.Clamp01(fraction));
			_limit = Mathf.Clamp(_limit, 0, animation.FrameCount - 1);
		}
	}
+37 −1
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ using Presenter;
using TMPro;
using UnityEngine;
using UnityEngine.Serialization;
using Animation = FramedAnimator.Animation;
using Animator = FramedAnimator.Animator;

namespace View.UI {
@@ -12,12 +13,33 @@ namespace View.UI {

		private ExpressionClick _click;
		private CustomInput _customInput;
		private Score _score;

		private bool _firstUpdate = true;

		[SerializeField] private Animator animator;
		[SerializeField] private Animation growAnimation;
		[SerializeField] private Animation endAnimation;

		private void Start() {
			_click = FindObjectOfType<Dependencies>().ExpressionClick;
			_customInput = FindObjectOfType<Dependencies>().CustomInput;
			_score = FindObjectOfType<Dependencies>().Score;

			animator.OnAnimationEnd += AnimationEnded;
		}

		private void AnimationEnded(string animationName) {
			if (animationName == "Rosa_Grow") {
				animator.ChangeAnimation(endAnimation);
				animator.PlayUntil(1f);
				return;
			}

			if (animationName == "Rosa_End") {
				animator.ChangeAnimation(growAnimation);
				animator.PlayUntil(_score.GrowPercentage);
			}
		}

		private void Update() {
@@ -25,8 +47,22 @@ namespace View.UI {
		}

		public void UpdateView(int score, float growPercentage) {
			animator.PlayUntil(growPercentage);
			if (animator.CurrentAnimation == "Rosa_Grow") {
				animator.PlayUntil(IsLastGrowState(score, growPercentage) ? 1f : growPercentage);
			}
			text.text = score.ToString();
			_firstUpdate = false;
		}

		private bool IsLastGrowState(int score, float growPercentage) {
			if (growPercentage != 0)
				return false;
			bool isLastFrame = score % (_score.GrowIterations * _score.SpawnRate) == 0;
			if (!isLastFrame)
				return false;
			if (_firstUpdate)
				return false;
			return true;
		}

		private void CheckInput() {
+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ TextureImporter:
  spriteMeshType: 1
  alignment: 0
  spritePivot: {x: 0.5, y: 0.5}
  spritePixelsToUnits: 100
  spritePixelsToUnits: 192
  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
  spriteGenerateFallbackPhysicsShape: 1
  alphaUsage: 1
Loading