generic pool made

This commit is contained in:
Mausham
2025-12-17 15:50:28 -08:00
parent ff062d4c3d
commit 2a7759228f
29 changed files with 265 additions and 227 deletions

View File

@@ -0,0 +1,25 @@
using Darkmatter.Core;
using TMPro;
using UnityEngine;
using VContainer;
namespace Darkmatter.Presentation
{
public class LeaderBoardData : MonoBehaviour,IPoolable, ILeaderBoardData
{
public TextMeshProUGUI posNumber;
public TextMeshProUGUI playerName;
public TextMeshProUGUI playerScore;
public void OnDespawn()
{
Debug.Log("LB data Despawnned");
}
public void OnSpawn()
{
Debug.Log("LB data spawnned");
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 19899d49b8ee4db41a4ca8dd590ad4a1

View File

@@ -4,13 +4,14 @@ using System.Collections.Generic;
using UnityEngine;
using VContainer;
public class Platform : MonoBehaviour, IPlatform
public class Platform : MonoBehaviour, IPlatform , IPoolable
{
[SerializeField] private List<GameObject> _platformPiece = new List<GameObject>();
[SerializeField] private Material _safeMaterial;
[SerializeField] private Material _deathMaterial;
[SerializeField] private ParticleSystem _particleSystem;
//for selecting random color
[SerializeField]private Color[] safeMaterialColors;
[SerializeField] private Color[] deathMaterialColors;
@@ -75,7 +76,15 @@ public class Platform : MonoBehaviour, IPlatform
}
}
public void OnSpawn()
{
hasAchievedScore = false;
}
public void OnDespawn()
{
}
}

View File

@@ -1,4 +1,5 @@
using Darkmatter.Core;
using Darkmatter.Domain;
using UnityEngine;
using VContainer;
@@ -11,6 +12,7 @@ public class PlatformManager : MonoBehaviour,IPlatformManager
[SerializeField] private float inputScale = 360f;
float rotAmount = 0;
public bool hasFirstPlatformBuilt = false;
private void Start()
@@ -47,6 +49,15 @@ public class PlatformManager : MonoBehaviour,IPlatformManager
{
foreach (Platform platform in pool.All)
{
if (!hasFirstPlatformBuilt)
{
platform.SetPlatformRule(new FirstPlatformRule());
hasFirstPlatformBuilt=true;
}
else
{
platform.SetPlatformRule(new OtherPlatformRule());
}
platform.gameObject.SetActive(true);
platform.transform.position = new Vector3(0, yPos, 0);
yPos--;
@@ -56,6 +67,8 @@ public class PlatformManager : MonoBehaviour,IPlatformManager
public void BuildNewPlatform()
{
Platform platform = pool.GetFromPool();
platform.SetPlatformRule(new OtherPlatformRule());
platform.gameObject.SetActive(true);
platform.transform.position = new Vector3(0, yPos, 0);
yPos--;
}

View File

@@ -1,63 +0,0 @@
using Darkmatter.Core;
using Darkmatter.Domain;
using System.Collections.Generic;
using UnityEngine;
using VContainer;
public class PlatformPool : MonoBehaviour, IPool<Platform>
{
[SerializeField] private Platform platformPrefab;
[SerializeField] private Transform platformParent;
[SerializeField] private int poolSize = 10;
private Queue<Platform> _queue = new Queue<Platform>();
public IReadOnlyCollection<Platform> All => _queue;
[Inject] IObjectResolver resolver;
private void Awake()
{
SetupPool();
}
void SetupPool()
{
Platform instance = null;
for(int i = 0; i < poolSize; i++)
{
instance = Instantiate(platformPrefab,platformParent);
resolver.Inject(instance);
if (i == 0) instance.SetPlatformRule(new FirstPlatform());
else instance.SetPlatformRule(new OtherPlatform());
instance.gameObject.SetActive(false);
_queue.Enqueue(instance);
}
}
public Platform GetFromPool()
{
if(_queue.Count == 0)
{
Platform newObj = Instantiate(platformPrefab,platformParent);
newObj.SetPlatformRule(new OtherPlatform());
_queue.Enqueue(newObj);
return newObj;
}
Platform pooledObj = _queue.Dequeue();
pooledObj.SetPlatformRule(new OtherPlatform());
pooledObj.gameObject.SetActive(true);
return pooledObj;
}
public void ReturnToPool(Platform obj)
{
obj.gameObject.SetActive(false);
_queue.Enqueue(obj);
}
}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f2ae9fae8b6113648a92ce517dda7dd9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,6 @@
using Darkmatter.Domain;
namespace Darkmatter.Presentation
{
public class LeaderBoardDataPool : ObjectPool<LeaderBoardData> { }
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c15c9d815e963334384a40fbc8e84f23

View File

@@ -0,0 +1,60 @@
using Darkmatter.Core;
using System.Collections.Generic;
using System.Runtime.InteropServices.WindowsRuntime;
using UnityEngine;
using VContainer;
using VContainer.Unity;
namespace Darkmatter.Presentation
{
public class ObjectPool<T> : MonoBehaviour,IPool<T> where T : MonoBehaviour, IPoolable
{
[SerializeField] T prefab;
[SerializeField] private Transform prefabParent;
[SerializeField] private int poolSize = 15;
public Queue<T> pool = new Queue<T>();
[Inject] IObjectResolver resolver;
public IReadOnlyCollection<T> All => pool;
private void Awake()
{
CreateObjectPool();
}
private void CreateObjectPool()
{
for(int i=0;i<poolSize; i++)
{
T obj = Instantiate(prefab, prefabParent);
resolver.InjectGameObject(obj.gameObject);
obj.OnSpawn();
obj.gameObject.SetActive(false);
pool.Enqueue(obj);
}
}
public T GetFromPool()
{
if(pool.Count == 0)
{
T obj = Instantiate(prefab, prefabParent);
resolver.InjectGameObject(obj.gameObject);
obj.OnSpawn();
obj.gameObject.SetActive(true);
pool.Enqueue(obj);
return obj;
}
T returningObj = pool.Dequeue();
return returningObj;
}
public void ReturnToPool(T obj)
{
obj.OnDespawn();
obj.gameObject.SetActive(false);
pool.Enqueue(obj);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 6751a0040c85b7441a706516d36a4762

View File

@@ -0,0 +1,9 @@
using Darkmatter.Presentation;
public class PlatformPool : ObjectPool<Platform> { }

View File

@@ -10,7 +10,7 @@ namespace Darkmatter.Presentation
public GameObject leaderBoardScreen;
public Button ExitButton;
public Transform LBDataContainer;
public LeaderboardData LBplayerData;
public LeaderBoardData LBplayerData;
public void Show()
{
@@ -19,7 +19,7 @@ namespace Darkmatter.Presentation
public void UpdateData(int rank,string name, string score)
{
LeaderboardData data = Instantiate(LBplayerData, LBDataContainer);
LeaderBoardData data = Instantiate(LBplayerData, LBDataContainer);
data.posNumber.text = rank.ToString();
data.playerName.text = name;
data.playerScore.text = score;