Files
ft/Client/Assets/Scripts/UI/PinataPack/PinataEffect.cs
2026-06-29 21:18:33 +08:00

60 lines
1.6 KiB
C#

using asap.core;
using asap.core.common;
using System;
using UnityEngine;
namespace Assets.Scripts.UI.PinataPack
{
public class PinataEffect : MonoBehaviour, IPoolableObject
{
private IObjectPool _pool;
private Transform _parent;
private ParticleSystem[] _particleSystems;
private void Awake()
{
if (_particleSystems == null)
_particleSystems = GetComponentsInChildren<ParticleSystem>();
}
public ParticleSystem[] GetParticleSystems()
{
if (_particleSystems == null)
_particleSystems = GetComponentsInChildren<ParticleSystem>();
return _particleSystems;
}
public void OnDespawn()
{
this.gameObject.SetActive(false);
}
public void OnPoolCreate(IObjectPool objectPool)
{
_pool = objectPool;
}
public void OnPoolDestroy()
{
_pool = null;
}
public void OnSpawn()
{
if (_parent == null)
{
var packData = GContext.container.Resolve<EventPinataPackData>();
var packMain = packData?.EventPinataPackMain;
var iAct = GContext.container.ResolveAct(packMain.ActPrefab);
if (iAct is PinataPackAct pinataPackAct)
_parent = pinataPackAct.transform;
}
if (_parent != null)
transform.SetParent(_parent);
transform.localScale = Vector3.one;
}
public void ReturnPool()
{
_pool?.DespawnObject(this);
}
}
}