refactor(fix-system): 重构维修侧边栏面板架构并整合方块拼图

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