- Simulated "fake" physics and collisions - Object pooling for tiles, obstacles and monster spawns - Base monster scoring with proximity triggers and depth multiplier Co-authored-by: AlexanderT <alexander@foolhardyhorizons.com> Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com> Reviewed-on: #5
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;
|
|
}
|
|
}
|
|
}
|