94 lines
3.1 KiB
C#
94 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using AibisDream.Framework;
|
|
using AibisDream.Utility;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class BlockShapeRack : MonoBehaviour, IBlockShapeFactory
|
|
{
|
|
[SerializeField] private Transform shapeRoot;
|
|
[SerializeField] private ScrollRect scrollRect;
|
|
[SerializeField] private RackDataInfo[] blockShapeDataList;
|
|
private Dictionary<string, ShapeCreateButton> buttonDict;
|
|
private GameObject _shapeCreateButtonPrefab;
|
|
|
|
private void Awake()
|
|
{
|
|
InitPrefab();
|
|
InitShapeButtons();
|
|
}
|
|
|
|
private void InitPrefab()
|
|
{
|
|
_shapeCreateButtonPrefab = ResourceKit.LoadAssetSync<GameObject>(ConstRef.ShapeCreateButtonPrefab);
|
|
_blockShapePrefab = ResourceKit.LoadAssetSync<GameObject>(ConstRef.BlockShapePrefab);
|
|
}
|
|
|
|
private void InitShapeButtons()
|
|
{
|
|
buttonDict = new Dictionary<string, ShapeCreateButton>();
|
|
foreach (var blockShapeData in blockShapeDataList)
|
|
{
|
|
var button = Instantiate(_shapeCreateButtonPrefab, scrollRect.content).GetComponent<ShapeCreateButton>();
|
|
button.SetButtonInfo(blockShapeData.key, blockShapeData.count);
|
|
button.OnClick += CreateShapeByButton;
|
|
buttonDict.Add(blockShapeData.key, button);
|
|
}
|
|
}
|
|
|
|
private void CreateShapeByButton(string key)
|
|
{
|
|
// 获取配置信息
|
|
if (!BlockPuzzleKit.TryLoadBlockShapeData(key, out var blockShapeData))
|
|
{
|
|
Debug.LogError($"获取配置信息失败: {key}");
|
|
return;
|
|
}
|
|
|
|
// 创建形状并开始拖拽
|
|
var blockShape = CreateBlockShape(blockShapeData);
|
|
blockShape.ShapeDragger.StartDrag();
|
|
}
|
|
|
|
public void RecycleBlockShape(BlockShape blockShape)
|
|
{
|
|
// 将数据加回对象池
|
|
if (buttonDict.TryGetValue(blockShape.ShapeName, out var oldButton))
|
|
{
|
|
oldButton.AddCount();
|
|
}
|
|
else
|
|
{
|
|
// 创建新的按钮
|
|
var button = Instantiate(_shapeCreateButtonPrefab, scrollRect.content).GetComponent<ShapeCreateButton>();
|
|
button.SetButtonInfo(blockShape.ShapeName, 1);
|
|
button.OnClick += CreateShapeByButton;
|
|
buttonDict.Add(blockShape.ShapeName, button);
|
|
}
|
|
// 销毁物体
|
|
Destroy(blockShape.gameObject);
|
|
}
|
|
|
|
|
|
// ------------------------------ 图形工厂类实现 ------------------------------
|
|
|
|
private GameObject _blockShapePrefab;
|
|
|
|
public BlockShape CreateBlockShape(BlockShapeData blockShapeData)
|
|
{
|
|
var blockShape = Instantiate(_blockShapePrefab, shapeRoot).GetComponent<BlockShape>();
|
|
blockShape.Init(blockShapeData);
|
|
return blockShape;
|
|
}
|
|
|
|
[Serializable]
|
|
public struct RackDataInfo
|
|
{
|
|
public string key;
|
|
public int count;
|
|
}
|
|
}
|
|
} |