﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;


namespace Arugula.Prototypical
{
    public class PickupZone : MonoBehaviour
    {
        public event System.Action<Pickup> OnPickedUp = delegate { };

        public float influenceRadius = 3;
        public float collectRadius = 0.5f;
        public float force = 1;
        public ForceMode forceMode;
        public AnimationCurve falloff;
        public bool autoDestroy = true;

        private void FixedUpdate()
        {
            var subset = Pickup.GetWithin(transform.position, influenceRadius);

            foreach (var p in subset)
            {
                Vector3 dir = transform.position - p.rb.position;
                float dist = dir.magnitude;
                dir.Normalize();
                p.rb.AddForce(dir * (falloff.Evaluate(dist / influenceRadius) * force), forceMode);
            }

            var collectable = Pickup.GetWithin(subset, transform.position, collectRadius);

            foreach (var p in collectable)
            {
                p.Use(this);
                OnPickedUp(p);
                if (autoDestroy)
                    Destroy(p.gameObject);
            }
        }

        private void OnDrawGizmosSelected()
        {
            Gizmos.color = new Color(0.25f, 0.5f, 0.25f, 0.5f);
            Gizmos.DrawWireSphere(transform.position, collectRadius);
            Gizmos.color = new Color(0.5f, 0.5f, 0.5f, 0.5f);
            Gizmos.DrawWireSphere(transform.position, influenceRadius);
        }
    }



}
