summaryrefslogtreecommitdiff
path: root/GameCode/ObjectPool.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-03-21 10:28:46 +0800
committerchai <215380520@qq.com>2024-03-21 10:28:46 +0800
commit3fb2121cc0d00cbd42b2ca10b5dfb399a4df1a04 (patch)
treec1f4683fb021522b459408ab1ad61c40be77ee47 /GameCode/ObjectPool.cs
parent9ee2cfa385ed77c39003f524f5f03079124fc476 (diff)
*misc
Diffstat (limited to 'GameCode/ObjectPool.cs')
-rw-r--r--GameCode/ObjectPool.cs58
1 files changed, 58 insertions, 0 deletions
diff --git a/GameCode/ObjectPool.cs b/GameCode/ObjectPool.cs
new file mode 100644
index 0000000..feb9c40
--- /dev/null
+++ b/GameCode/ObjectPool.cs
@@ -0,0 +1,58 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ObjectPool : MonoBehaviour
+{
+ public enum ObjectType
+ {
+ DamageNumber
+ }
+
+ public static ObjectPool instance;
+
+ [SerializeField]
+ private GameObject damageNumberPrefab;
+
+ [SerializeField]
+ private List<GameObject> pooledDamageNumbers = new List<GameObject>();
+
+ private void Awake()
+ {
+ instance = this;
+ }
+
+ public GameObject SpawnObject(ObjectType type, Vector3 position, Quaternion rotation)
+ {
+ if (type == ObjectType.DamageNumber)
+ {
+ return SpawnDamageNumber(position, rotation);
+ }
+ Debug.LogError("Failed to spawn object from pool");
+ return null;
+ }
+
+ private GameObject SpawnDamageNumber(Vector3 position, Quaternion rotation)
+ {
+ while (pooledDamageNumbers.Count > 0 && pooledDamageNumbers[0] == null)
+ {
+ pooledDamageNumbers.RemoveAt(0);
+ }
+ if (pooledDamageNumbers.Count > 0)
+ {
+ GameObject gameObject = pooledDamageNumbers[0];
+ pooledDamageNumbers.Remove(gameObject);
+ gameObject.SetActive(value: true);
+ gameObject.transform.position = position;
+ gameObject.transform.rotation = rotation;
+ gameObject.GetComponent<DamageNumber>().Start();
+ return gameObject;
+ }
+ return Object.Instantiate(damageNumberPrefab, position, rotation);
+ }
+
+ public void PoolDamageNumber(GameObject damageNumber)
+ {
+ pooledDamageNumbers.Add(damageNumber);
+ damageNumber.SetActive(value: false);
+ }
+}