105 lines
3.6 KiB
C#
105 lines
3.6 KiB
C#
using System.Collections.Generic;
|
|
using Gameplay.Common;
|
|
using PhxhSDK;
|
|
using UnityEngine;
|
|
|
|
namespace Gameplay.Area.BoardView
|
|
{
|
|
public class BoardLineObjPool
|
|
{
|
|
|
|
private Dictionary<int, Stack<GameObject>> _boardLineObjPool = new Dictionary<int, Stack<GameObject>>();
|
|
private Dictionary<int, Stack<GameObject>> _showingBoardLineObj = new Dictionary<int, Stack<GameObject>>();
|
|
private Transform _rootTrans;
|
|
|
|
public void Init()
|
|
{
|
|
var rootObj = new GameObject("[BoardLineObjPool]");
|
|
_rootTrans = rootObj.transform;
|
|
var initPoolCount = 10;
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
var sidePath = PathDefine.BoardSide.SIDE_PATHS[i];
|
|
var sampleObj = AssetManager.Instance.GetPreLoadResult<GameObject>(sidePath);
|
|
for (int j = 0; j < initPoolCount; j++)
|
|
{
|
|
var newObj = Object.Instantiate(sampleObj, _rootTrans);
|
|
newObj.SetActive(false);
|
|
var boardIndex = i + 1;
|
|
if (!_boardLineObjPool.ContainsKey(boardIndex))
|
|
{
|
|
_boardLineObjPool.Add(boardIndex, new Stack<GameObject>());
|
|
}
|
|
_boardLineObjPool[boardIndex].Push(newObj);
|
|
}
|
|
_showingBoardLineObj.Add(i + 1, new Stack<GameObject>());
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
var showStack = _showingBoardLineObj[i + 1];
|
|
while (showStack.Count > 0)
|
|
{
|
|
var obj = showStack.Pop();
|
|
Object.Destroy(obj);
|
|
}
|
|
var poolStack = _boardLineObjPool[i + 1];
|
|
while (poolStack.Count > 0)
|
|
{
|
|
var obj = poolStack.Pop();
|
|
Object.Destroy(obj);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void CreateBoardAt(int boardIndex)
|
|
{
|
|
var centerCellIndex = boardIndex / 10;
|
|
var centerPos = AreaManager.instance.GetWorldPosByIndex(centerCellIndex);
|
|
var side = boardIndex % 10;
|
|
var newObj = _CreateBoardSideObj(side, centerPos);
|
|
var stack = _showingBoardLineObj[side];
|
|
stack.Push(newObj);
|
|
}
|
|
|
|
public void ReturnAll()
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
var sideIndex = i + 1;
|
|
var stack = _showingBoardLineObj[sideIndex];
|
|
while (stack.Count > 0)
|
|
{
|
|
var obj = stack.Pop();
|
|
obj.SetActive(false);
|
|
_boardLineObjPool[sideIndex].Push(obj);
|
|
}
|
|
}
|
|
}
|
|
|
|
private GameObject _CreateBoardSideObj(int side, Vector3 centerPos)
|
|
{
|
|
var poolStack = _boardLineObjPool[side];
|
|
if (poolStack.Count == 0)
|
|
{
|
|
var sidePath = PathDefine.BoardSide.SIDE_PATHS[side - 1];
|
|
var sampleObj = AssetManager.Instance.GetPreLoadResult<GameObject>(sidePath);
|
|
var newObj = Object.Instantiate(sampleObj, _rootTrans);
|
|
newObj.transform.position = centerPos;
|
|
return newObj;
|
|
}
|
|
else
|
|
{
|
|
var newObj = poolStack.Pop();
|
|
newObj.transform.position = centerPos;
|
|
newObj.SetActive(true);
|
|
return newObj;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|