Files
aibis-dream/Assets/Scripts/FixSystemNew/Screen System/FixPanel/BlockPuzzlePart.cs
T
2026-02-04 23:53:16 +08:00

121 lines
3.7 KiB
C#

using UnityEngine;
using AibisDream.UI;
using UnityEngine.UI;
using System;
using UnityEngine.Events;
namespace AibisDream.FixSystem
{
public class BlockPuzzlePart : MonoBehaviour, IOperatorPanel
{
public UnityEvent OnSubmit => lockButton.onClick;
public UnityEvent OnPopUp => popUpButton.onClick;
private Animator _animator;
// ------------------------ 进度条 -------------------------
// [Header("进度条")]
[SerializeField] private SpriteProgressBar powerProgressBar;
[SerializeField] private SpriteProgressBar noiseProgressBar;
[SerializeField] private SpriteProgressBar heatProgressBar;
/// <summary>
/// 设置进度条最大值
/// </summary>
/// <param name="paramValue"></param>
public void SetProgressMaxValue(BlockPuzzleParamValue paramValue)
{
powerProgressBar.MaxValue = paramValue.power;
noiseProgressBar.MaxValue = paramValue.noise;
heatProgressBar.MaxValue = paramValue.heat;
}
public void OnProgressChanged(ValidateResult validateResult)
{
var paramValue = validateResult.propValue;
// 更新进度条
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;
private BlockShapeData[] deviceButtonDatas;
public BlockShapeData[] DeviceButtonDatas { set => deviceButtonDatas = value; }
public event Action<BlockShapeInfo> OnDeviceSelected;
private void InitDeviceList()
{
foreach (var data in deviceButtonDatas)
{
AddDeviceButton(data.blockShapeInfo);
}
}
public void OnDeviceRecycle(BlockShape blockShape)
{
AddDeviceButton(blockShape.BlockShapeData.blockShapeInfo);
}
private void AddDeviceButton(BlockShapeInfo blockShapeInfo)
{
var button = Instantiate(_deviceItemPrefab, _deviceButtonRoot).GetComponent<ShapeCreateButton>();
button.SetInfo(blockShapeInfo);
button.OnClicked.AddListener(() => OnDeviceSelected?.Invoke(blockShapeInfo));
}
public void RemoveDeviceButton(string shapeName)
{
var button = _deviceButtonRoot.Find(shapeName).gameObject;
Destroy(button);
}
// ------------------------ 按钮组 ---------------------------
[Header("提交按钮")]
[SerializeField] private Button lockButton;
[SerializeField] private Button popUpButton;
public Button LockButton => lockButton;
public Button PopUpButton => popUpButton;
public void SetVaildState(ValidateResult validateResult)
{
lockButton.GetComponent<BlockSubmitHander>().SetValidState(validateResult.isPass);
}
// ------------------------ 面板收放 -------------------------
public void Init()
{
InitDeviceList();
// 初始化进度条部分
}
public void Open()
{
_animator?.Play("Open", 0, 0);
}
public void Close()
{
_animator?.Play("Close", 0, 0);
}
}
}