CapersProject/Assets/02.Scripts/BlueWater/Character/Enemy/Boss/TitanSlime/TitanSlimeAttackedParticle.cs
2025-02-03 19:03:41 +09:00

62 lines
2.1 KiB
C#

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<ParticleCollisionEvent> _collisionEvents;
private void Start()
{
_titanSlimeAttackedParticle = GetComponent<ParticleSystem>();
_instantiateLocation = FindAnyObjectByType<TitanSlimeMapController>().ParticleInstanceLocation;
_collisionEvents = new List<ParticleCollisionEvent>();
}
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);
}
}
}