CapersProject/Assets/02.Scripts/Liquid.cs
2024-08-22 19:39:15 +09:00

52 lines
1.5 KiB
C#

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<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, 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();
}
}
}