diff --git a/Assets/Scripts/FramedAnimator/Animator.cs b/Assets/Scripts/FramedAnimator/Animator.cs deleted file mode 100644 index faee8ba..0000000 --- a/Assets/Scripts/FramedAnimator/Animator.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using UnityEngine; - -namespace FramedAnimator { - [RequireComponent(typeof(SpriteRenderer))] - public class Animator : MonoBehaviour { - [SerializeField] private new Animation animation; - public string CurrentAnimation => animation.name; - - private float _currentFrame; - private int _renderingFrame; - private int _limit; - - private SpriteRenderer _renderer; - - private bool _animationEnded; - public event Action OnAnimationEnd; - - private void Awake() { - _renderer = GetComponent(); - } - - private void Update() { - if (_renderingFrame >= _limit) { - TryCallAnimationEnd(); - return; - } - 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.Clamp01(fraction)); - _limit = Mathf.Clamp(_limit, 0, animation.FrameCount - 1); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/FramedAnimator/Domain.meta b/Assets/Scripts/FramedAnimator/Domain.meta new file mode 100644 index 0000000..1ab8011 --- /dev/null +++ b/Assets/Scripts/FramedAnimator/Domain.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2c2047b3315144708938e7d2d9435cb6 +timeCreated: 1713449063 \ No newline at end of file diff --git a/Assets/Scripts/FramedAnimator/Domain/AnimatorModel.cs b/Assets/Scripts/FramedAnimator/Domain/AnimatorModel.cs new file mode 100644 index 0000000..19eb2e9 --- /dev/null +++ b/Assets/Scripts/FramedAnimator/Domain/AnimatorModel.cs @@ -0,0 +1,51 @@ +using UnityEngine; + +namespace FramedAnimator.Domain { + public class AnimatorModel { + public int FrameCount { private set; get; } + public float FrameRate { private set; get; } + + public int Limit { private set; get; } + + public int RenderingFrame { private set; get; } + private float _currentFrame; + + private bool _animationEnded; + + public bool PlayToEnd { set; get; } + + public AnimatorModel(float frameRate, int frameCount) { + _animationEnded = false; + + Limit = RenderingFrame = 0; + _currentFrame = 0f; + + FrameRate = frameRate; + FrameCount = frameCount; + } + + public void PlayUntil(float fraction) { + Limit = Mathf.RoundToInt(FrameCount * Mathf.Clamp01(fraction)); + Limit = Mathf.Clamp(Limit, 0, FrameCount - 1); + } + + public void UpdateAnimationFrame(float deltaTime) { + if (RenderingFrame >= Limit && !PlayToEnd) + return; + + _currentFrame += FrameRate * deltaTime; + RenderingFrame = Mathf.Clamp(Mathf.FloorToInt(_currentFrame), 0, PlayToEnd ? FrameCount - 1: Limit); + } + + public bool AnimationEnded(float deltaTime) { + if (RenderingFrame < FrameCount - 1 || _animationEnded) return false; + + _currentFrame += deltaTime * FrameRate; + RenderingFrame = Mathf.FloorToInt(_currentFrame); + + if (RenderingFrame <= Limit) return false; + _animationEnded = true; + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/FramedAnimator/Domain/AnimatorModel.cs.meta b/Assets/Scripts/FramedAnimator/Domain/AnimatorModel.cs.meta new file mode 100644 index 0000000..5277ebe --- /dev/null +++ b/Assets/Scripts/FramedAnimator/Domain/AnimatorModel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e11aeabcdf97474b9a739f0f42fc8f75 +timeCreated: 1713449229 \ No newline at end of file diff --git a/Assets/Scripts/FramedAnimator/Domain/FramedAnimator.Domain.asmdef b/Assets/Scripts/FramedAnimator/Domain/FramedAnimator.Domain.asmdef new file mode 100644 index 0000000..d070a0e --- /dev/null +++ b/Assets/Scripts/FramedAnimator/Domain/FramedAnimator.Domain.asmdef @@ -0,0 +1,3 @@ +{ + "name": "FramedAnimator.Domain" +} \ No newline at end of file diff --git a/Assets/Scripts/FramedAnimator/Domain/FramedAnimator.Domain.asmdef.meta b/Assets/Scripts/FramedAnimator/Domain/FramedAnimator.Domain.asmdef.meta new file mode 100644 index 0000000..bc29a8c --- /dev/null +++ b/Assets/Scripts/FramedAnimator/Domain/FramedAnimator.Domain.asmdef.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8b3a255fd5084af4883574b9fd6a4b0e +timeCreated: 1713449089 \ No newline at end of file diff --git a/Assets/Scripts/FramedAnimator/SantJordi.FramedAnimator.asmdef b/Assets/Scripts/FramedAnimator/SantJordi.FramedAnimator.asmdef deleted file mode 100644 index 06d03fc..0000000 --- a/Assets/Scripts/FramedAnimator/SantJordi.FramedAnimator.asmdef +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "SantJordi.FramedAnimator" -} diff --git a/Assets/Scripts/FramedAnimator/SantJordi.FramedAnimator.asmdef.meta b/Assets/Scripts/FramedAnimator/SantJordi.FramedAnimator.asmdef.meta deleted file mode 100644 index 134a358..0000000 --- a/Assets/Scripts/FramedAnimator/SantJordi.FramedAnimator.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 246088dd927065946b1746223fef2142 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/FramedAnimator/View.meta b/Assets/Scripts/FramedAnimator/View.meta new file mode 100644 index 0000000..a0a343e --- /dev/null +++ b/Assets/Scripts/FramedAnimator/View.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6f6b70f0fef849dc8986329ff2172b4b +timeCreated: 1713449069 \ No newline at end of file diff --git a/Assets/Scripts/FramedAnimator/Animation.cs b/Assets/Scripts/FramedAnimator/View/Animation.cs similarity index 100% rename from Assets/Scripts/FramedAnimator/Animation.cs rename to Assets/Scripts/FramedAnimator/View/Animation.cs diff --git a/Assets/Scripts/FramedAnimator/Animation.cs.meta b/Assets/Scripts/FramedAnimator/View/Animation.cs.meta similarity index 100% rename from Assets/Scripts/FramedAnimator/Animation.cs.meta rename to Assets/Scripts/FramedAnimator/View/Animation.cs.meta diff --git a/Assets/Scripts/FramedAnimator/View/Animator.cs b/Assets/Scripts/FramedAnimator/View/Animator.cs new file mode 100644 index 0000000..cb7e2b7 --- /dev/null +++ b/Assets/Scripts/FramedAnimator/View/Animator.cs @@ -0,0 +1,50 @@ +using System; +using FramedAnimator.Domain; +using UnityEngine; + +namespace FramedAnimator { + [RequireComponent(typeof(SpriteRenderer))] + public class Animator : MonoBehaviour { + [SerializeField] private new Animation animation; + public string CurrentAnimation => animation.name; + private SpriteRenderer _renderer; + + public event Action OnAnimationEnd; + private AnimatorModel _model; + + private void Awake() { + _renderer = GetComponent(); + _model = new AnimatorModel(animation.FrameRate, animation.FrameCount); + } + + private void Update() { + if (_model.RenderingFrame >= _model.FrameCount - 1) + TryCallAnimationEnd(); + else + UpdateAnimationFrame(); + } + + private void UpdateAnimationFrame() { + _model.UpdateAnimationFrame(Time.deltaTime); + _renderer.sprite = animation.GetFrame(_model.RenderingFrame); + } + + private void TryCallAnimationEnd() { + if(_model.AnimationEnded(Time.deltaTime)) + OnAnimationEnd?.Invoke(animation.name); + } + + public void ChangeAnimation(Animation anim) { + _model = new AnimatorModel(anim.FrameRate, anim.FrameCount); + animation = anim; + _renderer.sprite = animation.GetFrame(0); + } + + public void PlayUntil(float fraction) { + if (fraction >= 1f) + _model.PlayToEnd = true; + else + _model.PlayUntil(fraction); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/FramedAnimator/Animator.cs.meta b/Assets/Scripts/FramedAnimator/View/Animator.cs.meta similarity index 100% rename from Assets/Scripts/FramedAnimator/Animator.cs.meta rename to Assets/Scripts/FramedAnimator/View/Animator.cs.meta diff --git a/Assets/Scripts/FramedAnimator/View/FramedAnimator.View.asmdef b/Assets/Scripts/FramedAnimator/View/FramedAnimator.View.asmdef new file mode 100644 index 0000000..1462322 --- /dev/null +++ b/Assets/Scripts/FramedAnimator/View/FramedAnimator.View.asmdef @@ -0,0 +1,16 @@ +{ + "name": "FramedAnimator.View", + "rootNamespace": "", + "references": [ + "GUID:8b3a255fd5084af4883574b9fd6a4b0e" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Scripts/FramedAnimator/View/FramedAnimator.View.asmdef.meta b/Assets/Scripts/FramedAnimator/View/FramedAnimator.View.asmdef.meta new file mode 100644 index 0000000..b748fb6 --- /dev/null +++ b/Assets/Scripts/FramedAnimator/View/FramedAnimator.View.asmdef.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a8b14a26d6924d6bb65739ca56ae8187 +timeCreated: 1713449102 \ No newline at end of file diff --git a/Assets/Scripts/View/Dependencies.cs b/Assets/Scripts/View/Dependencies.cs index 3148081..c9291e4 100644 --- a/Assets/Scripts/View/Dependencies.cs +++ b/Assets/Scripts/View/Dependencies.cs @@ -15,7 +15,7 @@ namespace View { public LoadGame Loader { private set; get; } private void Awake() { - Score = new Score(20, 5); + Score = new Score(10, 10); IExpressionInput input = FindObjectOfType(); IExpressionInput visibility = FindObjectOfType(); diff --git a/Assets/Scripts/View/SantJordi.View.asmdef b/Assets/Scripts/View/SantJordi.View.asmdef index 3e2fcee..5b7c343 100644 --- a/Assets/Scripts/View/SantJordi.View.asmdef +++ b/Assets/Scripts/View/SantJordi.View.asmdef @@ -7,8 +7,8 @@ "GUID:6055be8ebefd69e48b49212b09b47b2f", "GUID:1220ccfff01d26041a9bb8cd7ae584af", "GUID:58f2f98b0cec4e74998cb65ad59190b4", - "GUID:246088dd927065946b1746223fef2142", - "GUID:0c752da273b17c547ae705acf0f2adf2" + "GUID:0c752da273b17c547ae705acf0f2adf2", + "GUID:a8b14a26d6924d6bb65739ca56ae8187" ], "includePlatforms": [], "excludePlatforms": [],