Files
aibis-dream/Assets/Scripts/FixSystemNew/Screen System/FixPanel/BlockPuzzlePart.cs
T
2026-01-22 18:16:11 +08:00

110 lines
3.3 KiB
C#

using UnityEngine;
using AibisDream.UI;
using UnityEngine.UI;
using System;
using TMPro;
namespace AibisDream.FixSystem
{
public class BlockPuzzlePart : MonoBehaviour, IOperatorPanel
{
private Animator _animator;
// ------------------------ 进度条 -------------------------
[Header("进度条")]
[SerializeField] private ProgressBar _powerProgressBar;
[SerializeField] private ProgressBar _noiseProgressBar;
[SerializeField] private ProgressBar _heatProgressBar;
public void OnProgressChanged(BlockPuzzleParamValue paramValue)
{
// 更新进度条
_powerProgressBar.CurrentValue = paramValue.power;
_noiseProgressBar.CurrentValue = paramValue.noise;
_heatProgressBar.CurrentValue = paramValue.heat;
// TODO 更新通过情况
// TODO 更新提示文本
}
public void OnRangeChanged(BlockPuzzleParamValue paramValue)
{
// TODO 更新进度条范围
}
// ------------------------ 器件选择 -------------------------
[Header("器件选择")]
[SerializeField] private RectTransform _deviceButtonRoot;
[SerializeField] private GameObject _deviceItemPrefab;
public event Action<BlockShapeInfo> OnDeviceSelected;
private void InitDeviceList()
{
// TODO: 初始化器件列表
}
public void OnDeviceRecycle(BlockShape blockShape)
{
// TODO: 播放回收动画
AddDeviceButton(blockShape.BlockShapeData.blockShapeInfo);
}
public void OnDeviceRemove(BlockShape blockShape)
{
// 从传送带获取器件时移除面板上的器件信息
Destroy(blockShape.gameObject);
RemoveDeviceButton(blockShape.BlockShapeData.shapeName);
}
private void AddDeviceButton(BlockShapeInfo blockShapeInfo)
{
var button = Instantiate(_deviceItemPrefab, _deviceButtonRoot);
button.gameObject.name = blockShapeInfo.shapeName;
button.GetComponentInChildren<TMP_Text>().text = blockShapeInfo.shapeName;
button.GetComponentInChildren<Image>().sprite = blockShapeInfo.GetButtonImage();
button.GetComponent<Button>().onClick.AddListener(() => OnDeviceSelected?.Invoke(blockShapeInfo));
}
private void RemoveDeviceButton(string shapeName)
{
var button = _deviceButtonRoot.Find(shapeName).gameObject;
Destroy(button);
}
// ------------------------ 按钮组 ---------------------------
[Header("提交按钮")]
[SerializeField] private Button lockButton;
public Button LockButton => lockButton;
// ------------------------- 模块出口 -------------------------
public void SetRecycleAvailable(bool isAvailable)
{
// TODO: 更新模块出口状态
}
// ------------------------ 面板收放 -------------------------
public void Init()
{
InitDeviceList();
// 初始化进度条部分
}
public void Open()
{
_animator?.Play("Open", 0, 0);
}
public void Close()
{
_animator?.Play("Close", 0, 0);
}
}
}