78 lines
No EOL
2 KiB
C#
78 lines
No EOL
2 KiB
C#
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 Animation startAnimation;
|
|
|
|
[SerializeField] private EventReference growEvent;
|
|
[SerializeField] private EventReference gloomEvent;
|
|
|
|
private Score _score;
|
|
private SpawnRose _spawnRose;
|
|
private bool _firstUpdate = true;
|
|
|
|
public bool Growing { private set; get; } = true;
|
|
|
|
private void Start() {
|
|
_score = FindObjectOfType<Dependencies>().Score;
|
|
_spawnRose = FindObjectOfType<Dependencies>().Spawner;
|
|
|
|
animator.PlayUntil(1f);
|
|
|
|
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") {
|
|
_spawnRose.Execute();
|
|
animator.ChangeAnimation(startAnimation);
|
|
animator.PlayUntil(1f);
|
|
}
|
|
|
|
if (animationName == "Rosa_Start") {
|
|
Growing = true;
|
|
animator.ChangeAnimation(growAnimation);
|
|
animator.PlayUntil(_score.GrowPercentage);
|
|
}
|
|
}
|
|
|
|
public void GrowStep() {
|
|
if (animator.CurrentAnimation == "Rosa_Grow") {
|
|
if (IsLastGrowState())
|
|
Growing = false;
|
|
animator.PlayUntil(IsLastGrowState() ? 1f : _score.GrowPercentage);
|
|
if (_score.GrowPercentage < 1f && !_firstUpdate)
|
|
RuntimeManager.PlayOneShot(growEvent);
|
|
}
|
|
_firstUpdate = false;
|
|
}
|
|
|
|
public bool IsLastGrowState() {
|
|
if (_score.GrowPercentage != 0)
|
|
return false;
|
|
bool isLastFrame = _score.Value % (_score.GrowIterations * _score.SpawnRate) == 0;
|
|
if (!isLastFrame)
|
|
return false;
|
|
if (_firstUpdate)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
}
|
|
} |