using UnityEngine;
/// <summary>
/// GAME 1303 Tier 5 — Food knocked loose by a monster. Run over it to get it back before
/// a monster carries it off. Last Delivery.
///
/// SETUP
/// - Prefab: sprite + Rigidbody2D (Gravity 0, Linear Damping 3) + trigger Collider2D +
/// this script. Assign it as DeliveryObjective's Dropped Cargo Prefab.
/// - Despawn After: seconds before it's gone for good (0 = never). Blink Before Despawn
/// warns the player.
/// - Monsters can steal it too: give the monster a trigger and wire its collision to
/// Consume(), or leave it and let dropped food only be lost to the timer.
/// </summary>
[RequireComponent(typeof(Collider2D))]
public class DroppedCargo : MonoBehaviour
{
public float despawnAfter = 8f;
public float blinkBeforeDespawn = 3f;
[Tooltip("Ignore the player for a moment so it isn't instantly re-collected.")]
public float pickupDelay = 0.4f;
private float age;
private SpriteRenderer sr;
void Reset() { GetComponent<Collider2D>().isTrigger = true; }
void Awake() { sr = GetComponentInChildren<SpriteRenderer>(); }
void Update()
{
age += Time.deltaTime;
if (despawnAfter <= 0f) return;
float remaining = despawnAfter - age;
if (remaining <= 0f) { Destroy(gameObject); return; }
if (sr != null && remaining < blinkBeforeDespawn)
sr.enabled = Mathf.FloorToInt(remaining * 8f) % 2 == 0;
}
void OnTriggerEnter2D(Collider2D other)
{
if (age < pickupDelay || !other.CompareTag("Player")) return;
var cargo = other.GetComponentInParent<DeliveryObjective>();
if (cargo == null) return;
cargo.PickUpOne();
Destroy(gameObject);
}
/// <summary>A monster made off with it.</summary>
public void Consume() => Destroy(gameObject);
}