45 lines
1.1 KiB
C#
45 lines
1.1 KiB
C#
using System.Collections;
|
|
using Boxes;
|
|
using UnityEngine;
|
|
|
|
[RequireComponent(typeof(Rigidbody))]
|
|
public class Box : MonoBehaviour
|
|
{
|
|
public BoxData boxData;
|
|
private Coroutine _lifetimeCoroutine;
|
|
|
|
public void Init(BoxData data)
|
|
{
|
|
boxData = data;
|
|
if (_lifetimeCoroutine != null) StopCoroutine(_lifetimeCoroutine);
|
|
_lifetimeCoroutine = StartCoroutine(LifetimeRoutine());
|
|
}
|
|
|
|
private void OnCollisionEnter(Collision collision)
|
|
{
|
|
if (collision.gameObject.CompareTag("Player"))
|
|
{
|
|
if (boxData != null)
|
|
{
|
|
GameEvents.OnBoxCollected?.Invoke(boxData);
|
|
}
|
|
CollectAndReturn();
|
|
}
|
|
}
|
|
|
|
IEnumerator LifetimeRoutine()
|
|
{
|
|
yield return new WaitForSeconds(15f);
|
|
CollectAndReturn();
|
|
}
|
|
|
|
private void CollectAndReturn()
|
|
{
|
|
if (_lifetimeCoroutine != null) StopCoroutine(_lifetimeCoroutine);
|
|
|
|
if (boxData != null && boxData.boxPrefab != null)
|
|
{
|
|
SimpleObjectPool.Instance.ReturnToPool(boxData.boxPrefab, gameObject);
|
|
}
|
|
}
|
|
} |