using System.Collections; using System.Collections.Generic; using BlueWater.Maps; using UnityEngine; namespace BlueWater.Enemies.Bosses.TitanSlime { public class TitanSlimeAttackedParticle : MonoBehaviour { private ParticleSystem _titanSlimeAttackedParticle; [SerializeField] private Vector2 _randomDestroy = new(5f, 7f); [SerializeField] private GameObject[] _stainPrefabs; private Transform _instantiateLocation; private List _collisionEvents; private void Start() { _titanSlimeAttackedParticle = GetComponent(); _instantiateLocation = FindAnyObjectByType().ParticleInstantiateLocation; _collisionEvents = new List(); } private void OnParticleCollision(GameObject other) { var numCollisionEvents = _titanSlimeAttackedParticle.GetCollisionEvents(other, _collisionEvents); for (var i = 0; i < numCollisionEvents; i++) { InstantiateStain(_collisionEvents[i].intersection); } } private void InstantiateStain(Vector3 position) { position.y += 0.01f; var stain = Instantiate(_stainPrefabs[Random.Range(0, _stainPrefabs.Length)], position, Quaternion.Euler(90, 0, 0), _instantiateLocation); var randomDestroyTime = Random.Range(_randomDestroy.x, _randomDestroy.y); StartCoroutine(DestroyStainCoroutine(stain, randomDestroyTime)); } private IEnumerator DestroyStainCoroutine(GameObject stain, float destroyTime) { var elapsedTime = 0f; while (elapsedTime < destroyTime) { elapsedTime += Time.deltaTime; var remainingTime = destroyTime - elapsedTime; if (remainingTime < 0.5f) { stain.transform.localScale = Vector3.one * (remainingTime / 0.5f); } yield return null; } Destroy(stain); } } }