CapersProject/Assets/02.Scripts/Liquid.cs
2024-08-19 17:14:35 +09:00

47 lines
1.3 KiB
C#

using UnityEngine;
using UnityEngine.Pool;
namespace BlueWater
{
public class Liquid : MonoBehaviour
{
[SerializeField]
private SpriteRenderer _spriteRenderer;
[SerializeField, Range(0f, 2f)]
private float _distanceThreshold = 0.5f;
private IObjectPool<Liquid> _managedPool;
private LiquidController _liquidController;
private Collider2D _targetCollider;
public void SetManagedPool(IObjectPool<Liquid> pool) => _managedPool = pool;
public void Destroy() => _managedPool.Release(this);
public void Initialize(LiquidController liquidController, Collider2D targetCollider, Color color)
{
_liquidController = liquidController;
_targetCollider = targetCollider;
_spriteRenderer.color = color;
}
private void Update()
{
if (!_targetCollider) return;
var closestPoint = _targetCollider.ClosestPoint(transform.position);
var distance = Vector2.Distance(transform.position, closestPoint);
if (distance < _distanceThreshold)
{
OnReached();
}
}
private void OnReached()
{
Destroy();
_liquidController.OnLiquidReached();
}
}
}