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; /// /// 设置进度条最大值 /// /// 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 OnDeviceSelected; public void LoadBackupDevices() { 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(); 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().SetValidState(validateResult.isPass); } // ------------------------ 面板收放 ------------------------- public void Init() { } public void Open() { _animator?.Play("Open", 0, 0); } public void Close() { _animator?.Play("Close", 0, 0); } } }