Files

344 lines
13 KiB
C#
Raw Permalink Normal View History

2022-12-14 18:33:44 +02:00
using System.Collections.Generic;
using UnityEngine;
public class ObjectPoolingManager : MonoBehaviour
{
2022-12-15 21:13:43 +02:00
[SerializeField] private Transform _playerOnePool = default;
[SerializeField] private Transform _playerTwoPool = default;
2023-01-12 19:12:56 +02:00
[SerializeField] private Transform _playerOneProjectilePool = default;
[SerializeField] private Transform _playerTwoProjectilePool = default;
[SerializeField] private Transform _playerOneParticlesPool = default;
[SerializeField] private Transform _playerTwoParticlesPool = default;
2022-12-14 18:33:44 +02:00
private List<GameObject> _objects = new List<GameObject>();
public static ObjectPoolingManager Instance { get; private set; }
2022-12-15 17:53:32 +02:00
private List<GameObject> _jumpOneEffects = new List<GameObject>();
private List<GameObject> _jumpTwoEffects = new List<GameObject>();
2022-12-15 21:13:43 +02:00
private List<ObjectPoolGroup> _objectsPoolOne = new List<ObjectPoolGroup>();
private List<ObjectPoolGroup> _objectsPoolTwo = new List<ObjectPoolGroup>();
private List<ObjectPoolGroup> _objectsParticlesPoolOne = new List<ObjectPoolGroup>();
private List<ObjectPoolGroup> _objectsParticlesPoolTwo = new List<ObjectPoolGroup>();
2023-01-12 19:12:56 +02:00
private List<ObjectPoolGroup> _objectsProjectilePoolOne = new List<ObjectPoolGroup>();
private List<ObjectPoolGroup> _objectsProjectilePoolTwo = new List<ObjectPoolGroup>();
2023-01-13 15:28:18 +02:00
private List<ObjectPoolGroup> _objectsAssistsPoolOne = new List<ObjectPoolGroup>();
private List<ObjectPoolGroup> _objectsAssistsPoolTwo = new List<ObjectPoolGroup>();
2023-01-12 19:12:56 +02:00
public static bool HasPooled;
2022-12-14 18:33:44 +02:00
void Awake()
{
2022-12-20 18:23:28 +02:00
DontDestroyOnLoad(this.gameObject);
2022-12-14 18:33:44 +02:00
CheckInstance();
}
2022-12-18 16:17:31 +02:00
public void PoolInitialize(EffectsLibrarySO effectsLibraryOne, EffectsLibrarySO effectsLibraryTwo)
2022-12-14 18:33:44 +02:00
{
2023-01-12 19:12:56 +02:00
if (!HasPooled)
2022-12-14 18:33:44 +02:00
{
2022-12-18 16:17:31 +02:00
for (int i = 0; i < effectsLibraryOne._objectPools.Count; i++)
2022-12-15 21:13:43 +02:00
{
2022-12-18 16:17:31 +02:00
_objectsPoolOne.Add(new ObjectPoolGroup() { groupName = effectsLibraryOne._objectPools[i].groupName, objects = new List<GameObject>() });
for (int j = 0; j < effectsLibraryOne._objectPools[i].size; ++j)
2022-12-15 21:13:43 +02:00
{
2022-12-18 16:17:31 +02:00
GameObject effect = Instantiate(effectsLibraryOne._objectPools[i].prefab, _playerOnePool).gameObject;
2022-12-24 23:21:00 +02:00
effect.gameObject.SetActive(false);
2022-12-15 21:13:43 +02:00
_objectsPoolOne[i].objects.Add(effect);
}
}
2022-12-18 16:17:31 +02:00
for (int i = 0; i < effectsLibraryTwo._objectPools.Count; i++)
2022-12-15 21:13:43 +02:00
{
2022-12-18 16:17:31 +02:00
_objectsPoolTwo.Add(new ObjectPoolGroup() { groupName = effectsLibraryTwo._objectPools[i].groupName, objects = new List<GameObject>() });
for (int j = 0; j < effectsLibraryTwo._objectPools[i].size; ++j)
2022-12-15 21:13:43 +02:00
{
2022-12-18 16:17:31 +02:00
GameObject effect = Instantiate(effectsLibraryTwo._objectPools[i].prefab, _playerTwoPool).gameObject;
2022-12-24 23:21:00 +02:00
effect.gameObject.SetActive(false);
2022-12-15 21:13:43 +02:00
_objectsPoolTwo[i].objects.Add(effect);
}
}
2023-01-12 19:12:56 +02:00
}
}
public void PoolParticlesInitialize(EffectsLibrarySO particlesLibraryOne, EffectsLibrarySO particlesLibraryTwo)
{
if (!HasPooled)
{
for (int i = 0; i < particlesLibraryOne._objectPools.Count; i++)
{
_objectsParticlesPoolOne.Add(new ObjectPoolGroup() { groupName = particlesLibraryOne._objectPools[i].groupName, objects = new List<GameObject>() });
for (int j = 0; j < particlesLibraryOne._objectPools[i].size; ++j)
{
GameObject effect = Instantiate(particlesLibraryOne._objectPools[i].prefab, _playerOneParticlesPool).gameObject;
effect.gameObject.SetActive(false);
_objectsParticlesPoolOne[i].objects.Add(effect);
}
}
for (int i = 0; i < particlesLibraryTwo._objectPools.Count; i++)
{
_objectsParticlesPoolTwo.Add(new ObjectPoolGroup() { groupName = particlesLibraryTwo._objectPools[i].groupName, objects = new List<GameObject>() });
for (int j = 0; j < particlesLibraryTwo._objectPools[i].size; ++j)
{
GameObject effect = Instantiate(particlesLibraryTwo._objectPools[i].prefab, _playerTwoParticlesPool).gameObject;
effect.gameObject.SetActive(false);
_objectsParticlesPoolTwo[i].objects.Add(effect);
}
}
}
}
2023-01-12 19:12:56 +02:00
public void PoolProjectileInitialize(EffectsLibrarySO effectsLibraryOne, EffectsLibrarySO effectsLibraryTwo)
{
if (!HasPooled)
{
for (int i = 0; i < effectsLibraryOne._objectPools.Count; i++)
{
_objectsProjectilePoolOne.Add(new ObjectPoolGroup() { groupName = effectsLibraryOne._objectPools[i].groupName, objects = new List<GameObject>() });
for (int j = 0; j < effectsLibraryOne._objectPools[i].size; ++j)
{
GameObject effect = Instantiate(effectsLibraryOne._objectPools[i].prefab, _playerOneProjectilePool).gameObject;
effect.gameObject.SetActive(false);
_objectsProjectilePoolOne[i].objects.Add(effect);
}
}
for (int i = 0; i < effectsLibraryTwo._objectPools.Count; i++)
{
_objectsProjectilePoolTwo.Add(new ObjectPoolGroup() { groupName = effectsLibraryTwo._objectPools[i].groupName, objects = new List<GameObject>() });
for (int j = 0; j < effectsLibraryTwo._objectPools[i].size; ++j)
{
GameObject effect = Instantiate(effectsLibraryTwo._objectPools[i].prefab, _playerTwoProjectilePool).gameObject;
effect.gameObject.SetActive(false);
_objectsProjectilePoolTwo[i].objects.Add(effect);
}
}
2022-12-14 18:33:44 +02:00
}
}
2023-01-13 15:28:18 +02:00
public void PoolAssistInitialize(ObjectPool assistOne, ObjectPool assistTwo)
{
if (!HasPooled)
{
2023-03-22 01:25:58 +02:00
2023-01-13 15:28:18 +02:00
_objectsAssistsPoolOne.Add(new ObjectPoolGroup() { groupName = assistOne.groupName, objects = new List<GameObject>() });
GameObject assistObjectOne = Instantiate(assistOne.prefab, _playerOneProjectilePool).gameObject;
assistObjectOne.gameObject.SetActive(false);
_objectsAssistsPoolOne[0].objects.Add(assistObjectOne);
_objectsAssistsPoolTwo.Add(new ObjectPoolGroup() { groupName = assistTwo.groupName, objects = new List<GameObject>() });
GameObject assistObjectTwo = Instantiate(assistTwo.prefab, _playerTwoProjectilePool).gameObject;
assistObjectTwo.gameObject.SetActive(false);
_objectsAssistsPoolTwo[0].objects.Add(assistObjectTwo);
}
}
2022-12-14 18:33:44 +02:00
private void CheckInstance()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
}
else
{
Instance = this;
}
}
2022-12-15 21:13:43 +02:00
public GameObject[] GetPool(int index, string name)
2022-12-14 18:33:44 +02:00
{
2022-12-15 17:53:32 +02:00
if (index == 0)
2022-12-15 13:25:22 +02:00
{
2022-12-15 21:13:43 +02:00
for (int i = 0; i < _objectsPoolOne.Count; i++)
{
if (_objectsPoolOne[i].groupName == name)
{
return _objectsPoolOne[i].objects.ToArray();
}
}
2022-12-15 17:53:32 +02:00
}
else
{
2022-12-15 21:13:43 +02:00
for (int i = 0; i < _objectsPoolTwo.Count; i++)
{
if (_objectsPoolTwo[i].groupName == name)
{
return _objectsPoolTwo[i].objects.ToArray();
}
}
2022-12-15 13:25:22 +02:00
}
2022-12-15 21:13:43 +02:00
return null;
2022-12-14 18:33:44 +02:00
}
public GameObject[] GetParticlePool(int index, string name)
{
if (index == 0)
{
for (int i = 0; i < _objectsParticlesPoolOne.Count; i++)
{
if (_objectsParticlesPoolOne[i].groupName == name)
{
return _objectsParticlesPoolOne[i].objects.ToArray();
}
}
}
else
{
for (int i = 0; i < _objectsParticlesPoolTwo.Count; i++)
{
if (_objectsParticlesPoolTwo[i].groupName == name)
{
return _objectsParticlesPoolTwo[i].objects.ToArray();
}
}
}
return null;
}
2023-01-12 19:12:56 +02:00
public GameObject[] GetProjectilePool(int index, string name)
{
if (index == 0)
{
for (int i = 0; i < _objectsProjectilePoolOne.Count; i++)
{
if (_objectsProjectilePoolOne[i].groupName == name)
{
return _objectsProjectilePoolOne[i].objects.ToArray();
}
}
}
else
{
for (int i = 0; i < _objectsProjectilePoolTwo.Count; i++)
{
if (_objectsProjectilePoolTwo[i].groupName == name)
{
return _objectsProjectilePoolTwo[i].objects.ToArray();
}
}
}
return null;
}
2023-01-13 15:28:18 +02:00
public GameObject GetAssistPool(int index, string name)
{
if (index == 0)
{
for (int i = 0; i < _objectsAssistsPoolOne.Count; i++)
{
if (_objectsAssistsPoolOne[i].groupName == name)
{
return _objectsAssistsPoolOne[i].objects[0];
}
}
}
else
{
for (int i = 0; i < _objectsAssistsPoolTwo.Count; i++)
{
if (_objectsAssistsPoolTwo[i].groupName == name)
{
return _objectsAssistsPoolTwo[i].objects[0];
}
}
}
return null;
}
2022-12-15 21:13:43 +02:00
public DemonicsAnimator GetObjectAnimation(int index, string name)
2022-12-14 18:33:44 +02:00
{
2022-12-15 21:13:43 +02:00
if (index == 0)
{
for (int i = 0; i < _objectsPoolOne.Count; i++)
{
if (_objectsPoolOne[i].groupName == name)
{
return _objectsPoolOne[i].objects[0].GetComponent<DemonicsAnimator>();
}
}
}
else
{
for (int i = 0; i < _objectsPoolTwo.Count; i++)
{
if (_objectsPoolTwo[i].groupName == name)
{
return _objectsPoolTwo[i].objects[0].GetComponent<DemonicsAnimator>();
}
}
}
return null;
2022-12-14 18:33:44 +02:00
}
2023-01-12 19:12:56 +02:00
public DemonicsAnimator GetObjectPoolAnimation(int index, string name)
{
if (index == 0)
{
for (int i = 0; i < _objectsProjectilePoolOne.Count; i++)
{
if (_objectsProjectilePoolOne[i].groupName == name)
{
return _objectsProjectilePoolOne[i].objects[0].GetComponent<DemonicsAnimator>();
}
}
}
else
{
for (int i = 0; i < _objectsProjectilePoolTwo.Count; i++)
{
if (_objectsProjectilePoolTwo[i].groupName == name)
{
return _objectsProjectilePoolTwo[i].objects[0].GetComponent<DemonicsAnimator>();
}
}
}
return null;
}
2023-01-14 19:39:35 +02:00
public DemonicsAnimator GetAssistPoolAnimation(int index, string name)
{
if (index == 0)
{
for (int i = 0; i < _objectsAssistsPoolOne.Count; i++)
{
if (_objectsAssistsPoolOne[i].groupName == name)
{
return _objectsAssistsPoolOne[i].objects[0].GetComponent<DemonicsAnimator>();
}
}
}
else
{
for (int i = 0; i < _objectsAssistsPoolTwo.Count; i++)
{
if (_objectsAssistsPoolTwo[i].groupName == name)
{
return _objectsAssistsPoolTwo[i].objects[0].GetComponent<DemonicsAnimator>();
}
}
}
return null;
}
2022-12-14 18:33:44 +02:00
public void DisableAllObjects()
{
for (int i = 0; i < _objects.Count; i++)
{
if (_objects[i] != null)
{
_objects[i].SetActive(false);
}
}
}
2023-03-22 01:25:58 +02:00
public void DestroyAllObjects()
{
foreach (Transform child in _playerOnePool)
Destroy(child.gameObject);
foreach (Transform child in _playerTwoPool)
Destroy(child.gameObject);
_objectsPoolOne.Clear();
_objectsProjectilePoolOne.Clear();
2023-12-05 04:01:01 +02:00
_objectsParticlesPoolOne.Clear();
2023-03-22 01:25:58 +02:00
_objectsAssistsPoolOne.Clear();
_objectsPoolTwo.Clear();
_objectsProjectilePoolTwo.Clear();
2023-12-05 04:01:01 +02:00
_objectsParticlesPoolTwo.Clear();
2023-03-22 01:25:58 +02:00
_objectsAssistsPoolTwo.Clear();
HasPooled = false;
}
2022-12-14 18:33:44 +02:00
}
2022-12-15 21:13:43 +02:00
public struct ObjectPoolGroup
{
public string groupName;
public List<GameObject> objects;
}