55 lines
2.2 KiB
C#
55 lines
2.2 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using Pooling;
|
|||
|
|
|
|||
|
|
namespace Minigames.DivingForPictures
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// Manages a pool of floating obstacle objects to reduce garbage collection overhead.
|
|||
|
|
/// Optimized for handling a large number of different obstacle prefab types.
|
|||
|
|
/// </summary>
|
|||
|
|
public class ObstaclePool : MultiPrefabPool<FloatingObstacle>
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// Returns an obstacle to the pool
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="obstacle">The obstacle to return to the pool</param>
|
|||
|
|
/// <param name="prefabIndex">The index of the prefab this obstacle was created from</param>
|
|||
|
|
public void ReturnObstacle(GameObject obstacle, int prefabIndex)
|
|||
|
|
{
|
|||
|
|
if (obstacle != null)
|
|||
|
|
{
|
|||
|
|
FloatingObstacle obstacleComponent = obstacle.GetComponent<FloatingObstacle>();
|
|||
|
|
if (obstacleComponent != null)
|
|||
|
|
{
|
|||
|
|
Debug.Log($"[ObstaclePool] Returning obstacle {obstacle.name} to pool");
|
|||
|
|
Return(obstacleComponent, prefabIndex);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Debug.LogWarning($"Attempted to return a GameObject without a FloatingObstacle component: {obstacle.name}");
|
|||
|
|
Destroy(obstacle);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Gets an obstacle from the pool, or creates a new one if the pool is empty
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns>An obstacle instance ready to use</returns>
|
|||
|
|
public GameObject GetObstacle(int prefabIndex)
|
|||
|
|
{
|
|||
|
|
Debug.Log($"[ObstaclePool] GetObstacle called for prefab index {prefabIndex}");
|
|||
|
|
FloatingObstacle obstacleComponent = Get(prefabIndex);
|
|||
|
|
|
|||
|
|
if (obstacleComponent == null)
|
|||
|
|
{
|
|||
|
|
Debug.LogError($"[ObstaclePool] Get() returned null for prefab index {prefabIndex}");
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Debug.Log($"[ObstaclePool] Get() returned obstacle {obstacleComponent.name}, active state: {obstacleComponent.gameObject.activeInHierarchy}");
|
|||
|
|
return obstacleComponent.gameObject;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|