public class Attractable : MonoBehaviour
{
    [SerializeField] private bool rotateToCenter = true;
    [HideInInspector] public Attractor currentAttractor;
    [SerializeField] private float gravityStrength = 100;

    Transform m_transform;
    Collider2D m_collider;
    Rigidbody2D m_rigidbody;
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    private void Start()
    {
        m_transform = GetComponent<Transform>();
        m_collider = GetComponent<Collider2D>();
        m_rigidbody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    private void Update()
    {
        if (currentAttractor != null) 
        {
            if (!currentAttractor.AttractedObjects.Contains(m_collider))
            {
                currentAttractor = null;
                return;
            }
            if (rotateToCenter) RotateToCenter();
            m_rigidbody.gravityScale = 0;
        }
        else
        {
            m_rigidbody.gravityScale = 1;
        }
    }
    public void Attract(Attractor attractorObj)
    {
        Vector2 attractDir = ((Vector2)attractorObj.attractorTransform.position - m_rigidbody.position).normalized;
        m_rigidbody.AddForce(attractDir*-attractorObj.gravity *gravityStrength * Time.fixedDeltaTime);

        if(currentAttractor == null)
        {
            currentAttractor = attractorObj;
        }
    }

    void RotateToCenter()
    {
        if (currentAttractor != null)
        {
            Vector2 distanceVector = (Vector2)currentAttractor.attractorTransform.position - (Vector2)(m_transform.position);
            float angle = Mathf.Atan2(distanceVector.y, distanceVector.x) * Mathf.Rad2Deg;
            m_transform.rotation = Quaternion.AngleAxis(angle + 90, Vector3.forward);
        }
    }
}