Loading Assets/Scenes/SampleScene.unity +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Assets/Scripts/Domain/Score.cs +0 −2 Original line number Diff line number Diff line Loading @@ -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); } } Loading Assets/Scripts/FramedAnimator/Animator.cs +33 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); } } Loading Assets/Scripts/View/UI/ExpressionInput.cs +37 −1 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ using Presenter; using TMPro; using UnityEngine; using UnityEngine.Serialization; using Animation = FramedAnimator.Animation; using Animator = FramedAnimator.Animator; namespace View.UI { Loading @@ -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() { Loading @@ -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() { Loading Assets/Sprites/Rosa/End/Rosa_End_0001.png.meta +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
Assets/Scenes/SampleScene.unity +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
Assets/Scripts/Domain/Score.cs +0 −2 Original line number Diff line number Diff line Loading @@ -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); } } Loading
Assets/Scripts/FramedAnimator/Animator.cs +33 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); } } Loading
Assets/Scripts/View/UI/ExpressionInput.cs +37 −1 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ using Presenter; using TMPro; using UnityEngine; using UnityEngine.Serialization; using Animation = FramedAnimator.Animation; using Animator = FramedAnimator.Animator; namespace View.UI { Loading @@ -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() { Loading @@ -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() { Loading
Assets/Sprites/Rosa/End/Rosa_End_0001.png.meta +1 −1 Original line number Diff line number Diff line Loading @@ -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