using UnityEngine; using UnityEngine.VFX; using RR.Common.Interfaces; using RR.Common.Audio; using RR.Game2D.Core.Managers; using RR.Game2D.FX; namespace RR.Common.Entities.Props { [RequireComponent(typeof(Collider2D))] public class Collectible : MonoBehaviour, IPickable { [SerializeField] private SoundEffect pickupSFX; [SerializeField] private VisualEffect pickupVFX; [SerializeField] private VisualEffectAsset pickupVFXAsset; [SerializeField] private string pickupVFXResourcePath = "VFX/MVP_PickupSparkle_VFX"; [SerializeField] private float pickupVFXLifetime = 1f; [SerializeField] private MvpVFXSpawnSettings pickupVFXSettings = new MvpVFXSpawnSettings { spreadRadiusX = 0.08f, spreadRadiusY = 0.08f }; private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) TryPickup(other.gameObject); } public virtual bool TryPickup(GameObject newOwner, Transform optionalAttachPoint = null) { if (pickupSFX.sound != null) GameManager.Instance.Audio.PlaySfxAt(pickupSFX.sound, transform.position, pickupSFX.volume, pickupSFX.pitch); MvpVFXUtility.Spawn(pickupVFXAsset, pickupVFXResourcePath, transform.position, pickupVFXLifetime, pickupVFXSettings); if (pickupVFX != null && pickupVFXAsset == null && string.IsNullOrWhiteSpace(pickupVFXResourcePath)) { pickupVFX.transform.position = transform.position; pickupVFX.Play(); pickupVFX.Stop(); } return true; } } }