Asteroid

GIT REPOSITORY

The purpose of this small project is to show my programming skills.

Some code snip

public class InitManager : MonoBehaviour
{
	[SerializeField] private DataManager _dataManager;
	[SerializeField] private UiMainWindow _mainWindow;

	private IGameManager _gameManager;
    
	private void Start()
	{
		LoadGame();
	}

	private void LoadGame(){
		CreateManagers();
		EndLoad();
	}

	private void CreateManagers()
	{
		var bulletsPool = new BulletsPool(_dataManager.BaseGameData.BaseBulletPrefab);
		var playerManager = new PlayerManager(_dataManager, bulletsPool); 
		var rocksManager = new RocksManager(_dataManager);
		var scoreManager = new ScoreManager(rocksManager);
		_gameManager = new GameManager(_dataManager, playerManager, rocksManager, scoreManager);
		_mainWindow.Init(scoreManager, _gameManager);
	}

	private void EndLoad()
	{
		_gameManager.Idle();
	}
}

Some other snip

public abstract class APoolObject<T> : IPoolManager<T> where T : class, IPoolObject
{
	private IObjectPool<T> _pool;
	private IObjectPool<T> Pool
	{
		get
		{
			if (_pool == null)
			{
				_pool = new LinkedPool<T>(CreateObject);
			}

				return _pool;
		}
	}

	protected abstract T CreateObject();
	
	public T GetObject()
	{
		var poolObject = Pool.Get();
		poolObject.AfterGet();
		return poolObject;
	}

	public void ReleaseObject(T poolObject)
	{
		poolObject.BeforeRelease();
		Pool.Release(poolObject);
	}
}