refactor: 重构 BlockPuzzle 迷你游戏系统

Made-with: Cursor
This commit is contained in:
2026-03-03 21:46:24 +08:00
parent 62f39cd591
commit 617c6573b8
@@ -1,4 +1,4 @@
using UnityEngine;
using UnityEngine;
using Cinemachine;
using AibisDream.Kit;
using AibisDream.Utility;
@@ -15,7 +15,7 @@ namespace AibisDream
// 物体索引
[SerializeField] public BlockPuzzleGrid grid;
[SerializeField] private Transform shapeRoot;
[SerializeField] public BlockPuzzlePart blockPuzzlePart;
[SerializeField] public BlockPuzzlePanel blockPuzzlePanel;
[SerializeField] private ShapeRecycleSlot shapeRecycleSlot;
[Header("数据")]
@@ -81,11 +81,11 @@ namespace AibisDream
// 加载验证器
validator = ResourceKit.LoadAssetSync<BlockPuzzleValidator>(puzzleData.validatorName);
blockPuzzlePart.SetProgressMaxValue(validator.CollectThresholds());
blockPuzzlePanel.SetProgressMaxValue(validator.CollectThresholds());
// 初始化侧边栏
var deviceDatas = BlockPuzzleKit.LoadBlockShapeDataBatch(puzzleData.shapeInRack);
blockPuzzlePart.DeviceButtonDatas = deviceDatas.Values.ToArray();
blockPuzzlePanel.DeviceButtonDatas = deviceDatas.Values.ToArray();
// 组装事件逻辑
@@ -150,15 +150,15 @@ namespace AibisDream
}
// 更新按钮的交互状态
if (blockPuzzlePart != null)
if (blockPuzzlePanel != null)
{
if (blockPuzzlePart.LockButton != null)
if (blockPuzzlePanel.LockButton != null)
{
blockPuzzlePart.LockButton.GetComponent<BlockSubmitHander>().SetLockedState(IsLocked);
blockPuzzlePanel.LockButton.GetComponent<BlockSubmitHander>().SetLockedState(IsLocked);
}
if (blockPuzzlePart.PopUpButton != null)
if (blockPuzzlePanel.PopUpButton != null)
{
blockPuzzlePart.PopUpButton.interactable = !IsLocked;
blockPuzzlePanel.PopUpButton.interactable = !IsLocked;
}
}
}
@@ -176,7 +176,7 @@ namespace AibisDream
public void LoadShapeRack()
{
blockPuzzlePart.LoadBackupDevices();
blockPuzzlePanel.LoadBackupDevices();
}
// --------------------- 维修面板同步 -------------------
@@ -189,9 +189,9 @@ namespace AibisDream
private void AssembleEventLogic()
{
// 由面板触发
blockPuzzlePart.OnDeviceSelected += OnPanelShapeSelected;
blockPuzzlePart.OnSubmit.AddListener(SubmitGameResult);
blockPuzzlePart.OnPopUp.AddListener(PopUpShape);
blockPuzzlePanel.OnDeviceSelected += OnPanelShapeSelected;
blockPuzzlePanel.OnSubmit.AddListener(SubmitGameResult);
blockPuzzlePanel.OnPopUp.AddListener(PopUpShape);
// 由Shape触发 - 使用新的事件系统
shapeFactory.OnDragStartDetailed += OnShapeDragStartDetailed;
@@ -200,15 +200,15 @@ namespace AibisDream
shapeFactory.OnClick += OnShapeClick;
// 由系统触发
validator.OnValidate.AddListener(blockPuzzlePart.SetVaildState);
validator.OnValidate.AddListener(blockPuzzlePart.OnProgressChanged);
validator.OnValidate.AddListener(blockPuzzlePanel.SetVaildState);
validator.OnValidate.AddListener(blockPuzzlePanel.OnProgressChanged);
}
private void OnPanelShapeSelected(BlockShapeInfo shapeData)
{
// 在屏幕上更新选中的图形
selectedShapeName = shapeData.shapeName;
blockPuzzlePart.ShowShapeInScreen(shapeData);
blockPuzzlePanel.ShowShapeInScreen(shapeData);
}
// 旧的事件处理方法已迁移到新的详细事件处理器
@@ -219,7 +219,7 @@ namespace AibisDream
public void OnShapeClick(BlockShape blockShape)
{
// 点击形状
blockPuzzlePart.ShowShapeInScreen(blockShape.BlockShapeData.blockShapeInfo);
blockPuzzlePanel.ShowShapeInScreen(blockShape.BlockShapeData.blockShapeInfo);
}
#region
@@ -238,7 +238,7 @@ namespace AibisDream
// 显示Info
if (blockShape?.BlockShapeData.blockShapeInfo.shapeName != null)
{
blockPuzzlePart.ShowShapeInScreen(blockShape.BlockShapeData.blockShapeInfo);
blockPuzzlePanel.ShowShapeInScreen(blockShape.BlockShapeData.blockShapeInfo);
EventSystem.current.SetSelectedGameObject(null);
selectedShapeName = null;
}
@@ -308,11 +308,11 @@ namespace AibisDream
shapeRecycleSlot.RecycleShape(args.Shape);
// 清空屏幕并切换回LogScreen
blockPuzzlePart.ClearShapeInScreen();
blockPuzzlePart.SwitchToLogScreen();
blockPuzzlePanel.ClearShapeInScreen();
blockPuzzlePanel.SwitchToLogScreen();
// 向面板添加回收的形状
blockPuzzlePart.OnDeviceRecycle(args.Shape);
blockPuzzlePanel.OnDeviceRecycle(args.Shape);
// 更新事件参数
args.IsHandled = true;
@@ -390,7 +390,7 @@ namespace AibisDream
blockShape.GetComponent<ShapeDragger>().CurrentState = DragState.Idle;
// 删除按钮
blockPuzzlePart.RemoveDeviceButton(selectedShapeName);
blockPuzzlePanel.RemoveDeviceButton(selectedShapeName);
selectedShapeName = null;
}