47 lines
1.3 KiB
C#
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();
|
|
}
|
|
}
|
|
} |