using UnityEngine; using UnityEngine.Pool; namespace BlueWater { public class Liquid : MonoBehaviour { [SerializeField] private SpriteRenderer _spriteRenderer; [SerializeField] private Rigidbody2D _rigidbody2D; [SerializeField, Range(0f, 2f)] private float _distanceThreshold = 0.5f; private IObjectPool _managedPool; private LiquidController _liquidController; private Collider2D _targetCollider; public void SetManagedPool(IObjectPool pool) => _managedPool = pool; public void Destroy() => _managedPool.Release(this); public void Initialize(LiquidController liquidController, Collider2D targetCollider, Color color, Vector3 pushForce) { _liquidController = liquidController; _targetCollider = targetCollider; _spriteRenderer.color = color; _rigidbody2D.linearVelocity = Vector2.zero; _rigidbody2D.AddForce(pushForce, ForceMode2D.Impulse); } 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(); } } }