Roses/Assets/Scripts/View/Scene/GrowParticlesSpawner.cs
2024-04-22 21:59:30 +02:00

46 lines
No EOL
1.2 KiB
C#

using System;
using Domain;
using Pooling;
using Presenter;
using UnityEngine;
using Random = UnityEngine.Random;
namespace View.Scene {
public class GrowParticlesSpawner : MonoBehaviour, IInputCallback {
[SerializeField] private GrowParticle growParticle;
[SerializeField] private Transform[] growParticlePositions;
[SerializeField] private GrowAnimation growAnimation;
private Score _score;
private void Awake() {
growParticle.CreatePool();
}
private void Start() {
_score = FindObjectOfType<Dependencies>().Score;
}
public void OnInputReceived() {
float randomRotation = Random.Range(0, 360);
if(growAnimation.Growing)
growParticle.Spawn(GetGrowParticlePosition(), Quaternion.Euler(0, 0, randomRotation));
}
private Vector3 GetGrowParticlePosition() {
float iterationStep = 1f / _score.SpawnRate;
bool isLastGrowStep = _score.Value % (_score.GrowIterations * _score.SpawnRate) == 0;
if(isLastGrowStep)
return growParticlePositions[^1].position;
for (int i = 0; i < growParticlePositions.Length; i++) {
if (_score.GrowPercentage < (i + 1) * iterationStep - .001f)
return growParticlePositions[i].position;
}
return growParticlePositions[^1].position;
}
}
}