62 lines
2.1 KiB
C#
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);
|
|
}
|
|
}
|
|
} |