refactor: moved grow animation to its own class
This commit is contained in:
parent
150b602dc3
commit
779af276d3
14 changed files with 224 additions and 116 deletions
62
Assets/Scripts/View/Scene/GrowAnimation.cs
Normal file
62
Assets/Scripts/View/Scene/GrowAnimation.cs
Normal file
|
@ -0,0 +1,62 @@
|
|||
using System;
|
||||
using Domain;
|
||||
using FMODUnity;
|
||||
using Presenter;
|
||||
using UnityEngine;
|
||||
using Animation = FramedAnimator.Animation;
|
||||
using Animator = FramedAnimator.Animator;
|
||||
|
||||
namespace View.Scene {
|
||||
public class GrowAnimation : MonoBehaviour, IRoseGrow {
|
||||
[SerializeField] private Animator animator;
|
||||
[SerializeField] private Animation growAnimation;
|
||||
[SerializeField] private Animation endAnimation;
|
||||
|
||||
[SerializeField] private EventReference growEvent;
|
||||
[SerializeField] private EventReference gloomEvent;
|
||||
|
||||
private Score _score;
|
||||
private bool _firstUpdate;
|
||||
|
||||
private void Start() {
|
||||
_score = FindObjectOfType<Dependencies>().Score;
|
||||
|
||||
animator.OnAnimationEnd += AnimationEnded;
|
||||
}
|
||||
|
||||
private void AnimationEnded(string animationName) {
|
||||
if (animationName == "Rosa_Grow") {
|
||||
animator.ChangeAnimation(endAnimation);
|
||||
RuntimeManager.PlayOneShot(gloomEvent);
|
||||
animator.PlayUntil(1f);
|
||||
return;
|
||||
}
|
||||
|
||||
if (animationName == "Rosa_End") {
|
||||
animator.ChangeAnimation(growAnimation);
|
||||
animator.PlayUntil(_score.GrowPercentage);
|
||||
}
|
||||
}
|
||||
|
||||
public void GrowStep() {
|
||||
if (animator.CurrentAnimation == "Rosa_Grow") {
|
||||
animator.PlayUntil(IsLastGrowState(_score.Value, _score.GrowPercentage) ? 1f : _score.GrowPercentage);
|
||||
if (_score.GrowPercentage < 1f)
|
||||
RuntimeManager.PlayOneShot(growEvent);
|
||||
}
|
||||
_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;
|
||||
}
|
||||
}
|
||||
}
|
3
Assets/Scripts/View/Scene/GrowAnimation.cs.meta
Normal file
3
Assets/Scripts/View/Scene/GrowAnimation.cs.meta
Normal file
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a0d2d820274a46d68d83fd6ddef1c431
|
||||
timeCreated: 1713516930
|
|
@ -4,18 +4,16 @@ using UnityEngine;
|
|||
using Random = UnityEngine.Random;
|
||||
|
||||
namespace View.Scene {
|
||||
public class GrowParticlesSpawner : MonoBehaviour, IRoseGrow {
|
||||
public class GrowParticlesSpawner : MonoBehaviour, IInputCallback {
|
||||
[SerializeField] private GrowParticle growParticle;
|
||||
[SerializeField] private Transform growParticlePositions;
|
||||
[SerializeField, Range(0, 180)] private float angleRange;
|
||||
|
||||
public void Grow() {
|
||||
public void OnInputReceived() {
|
||||
float randomRotation = Random.Range(-angleRange / 2f, angleRange / 2f);
|
||||
Instantiate(growParticle, growParticlePositions.position, Quaternion.Euler(0f, 0f, randomRotation));
|
||||
}
|
||||
|
||||
public void GrowStep() { }
|
||||
|
||||
private void OnDrawGizmosSelected() {
|
||||
Gizmos.color = Color.red;
|
||||
float angle = angleRange / 2f + 90f;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue