118 lines
4.3 KiB
C#
118 lines
4.3 KiB
C#
|
|
using UnityEngine;
|
||
|
|
using UnityEngine.UI;
|
||
|
|
using TMPro;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 主菜单:实验类型选择 + 模式选择 + 固定方式选择。
|
||
|
|
/// 挂在主菜单场景的 Canvas 上。
|
||
|
|
/// </summary>
|
||
|
|
public class MainMenu : MonoBehaviour
|
||
|
|
{
|
||
|
|
[Header("主标题")]
|
||
|
|
[SerializeField] private TMP_Text _titleText;
|
||
|
|
|
||
|
|
[Header("实验选择按钮 - 底部图标")]
|
||
|
|
[SerializeField] private Button _btnCPR;
|
||
|
|
[SerializeField] private Button _btnFracture;
|
||
|
|
[SerializeField] private Button _btnSprain;
|
||
|
|
[SerializeField] private Button _btnBleeding;
|
||
|
|
[SerializeField] private Button _btnTransport;
|
||
|
|
|
||
|
|
[Header("模式选择")]
|
||
|
|
[SerializeField] private TMP_Text _tipText;
|
||
|
|
[SerializeField] private Button _btnLearnMode;
|
||
|
|
[SerializeField] private Button _btnExamMode;
|
||
|
|
[SerializeField] private TMP_Text _selectedModeLabel;
|
||
|
|
|
||
|
|
[Header("固定方式选择(仅骨折固定)")]
|
||
|
|
[SerializeField] private GameObject _fixationPanel;
|
||
|
|
[SerializeField] private Button _btnLimbFixation;
|
||
|
|
[SerializeField] private Button _btnSplintFixation;
|
||
|
|
[SerializeField] private TMP_Text _selectedFixationLabel;
|
||
|
|
|
||
|
|
[Header("开始按钮")]
|
||
|
|
[SerializeField] private Button _btnStart;
|
||
|
|
|
||
|
|
[Header("提示")]
|
||
|
|
[SerializeField] private TMP_Text _selectionTip;
|
||
|
|
|
||
|
|
// 当前选择
|
||
|
|
private ExperimentType _selectedType = ExperimentType.FractureFixation;
|
||
|
|
private ExperimentMode _selectedMode = ExperimentMode.Learn;
|
||
|
|
private FixationMethod _selectedFixation = FixationMethod.LimbFixation;
|
||
|
|
|
||
|
|
private void Start()
|
||
|
|
{
|
||
|
|
BindExperimentButtons();
|
||
|
|
_btnLearnMode?.onClick.AddListener(() => SelectMode(ExperimentMode.Learn));
|
||
|
|
_btnExamMode?.onClick.AddListener(() => SelectMode(ExperimentMode.Exam));
|
||
|
|
_btnLimbFixation?.onClick.AddListener(() => SelectFixation(FixationMethod.LimbFixation));
|
||
|
|
_btnSplintFixation?.onClick.AddListener(() => SelectFixation(FixationMethod.SplintFixation));
|
||
|
|
_btnStart?.onClick.AddListener(StartExperiment);
|
||
|
|
|
||
|
|
// 默认选中骨折固定
|
||
|
|
SelectExperiment(ExperimentType.FractureFixation);
|
||
|
|
SelectMode(ExperimentMode.Learn);
|
||
|
|
SelectFixation(FixationMethod.LimbFixation);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void BindExperimentButtons()
|
||
|
|
{
|
||
|
|
_btnCPR?.onClick.AddListener(() => SelectExperiment(ExperimentType.CPR));
|
||
|
|
_btnFracture?.onClick.AddListener(() => SelectExperiment(ExperimentType.FractureFixation));
|
||
|
|
_btnSprain?.onClick.AddListener(() => SelectExperiment(ExperimentType.SprainBandaging));
|
||
|
|
_btnBleeding?.onClick.AddListener(() => SelectExperiment(ExperimentType.BleedingBandaging));
|
||
|
|
_btnTransport?.onClick.AddListener(() => SelectExperiment(ExperimentType.CasualtyTransport));
|
||
|
|
}
|
||
|
|
|
||
|
|
private void SelectExperiment(ExperimentType type)
|
||
|
|
{
|
||
|
|
_selectedType = type;
|
||
|
|
// 骨折固定显示固定方式面板
|
||
|
|
bool isFracture = type == ExperimentType.FractureFixation;
|
||
|
|
if (_fixationPanel != null) _fixationPanel.SetActive(isFracture);
|
||
|
|
if (_selectionTip != null)
|
||
|
|
_selectionTip.text = isFracture ? "Tip:请选择固定方式" : "";
|
||
|
|
UpdateStartButton();
|
||
|
|
}
|
||
|
|
|
||
|
|
private void SelectMode(ExperimentMode mode)
|
||
|
|
{
|
||
|
|
_selectedMode = mode;
|
||
|
|
if (_selectedModeLabel != null)
|
||
|
|
_selectedModeLabel.text = mode == ExperimentMode.Learn ? "学习模式" : "考核模式";
|
||
|
|
UpdateStartButton();
|
||
|
|
}
|
||
|
|
|
||
|
|
private void SelectFixation(FixationMethod fixation)
|
||
|
|
{
|
||
|
|
_selectedFixation = fixation;
|
||
|
|
if (_selectedFixationLabel != null)
|
||
|
|
_selectedFixationLabel.text = fixation == FixationMethod.LimbFixation ? "肢体固定" : "夹板固定";
|
||
|
|
UpdateStartButton();
|
||
|
|
}
|
||
|
|
|
||
|
|
private void UpdateStartButton()
|
||
|
|
{
|
||
|
|
if (_btnStart == null) return;
|
||
|
|
_btnStart.interactable = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
private void StartExperiment()
|
||
|
|
{
|
||
|
|
var gm = GameManager.Instance;
|
||
|
|
if (gm == null)
|
||
|
|
{
|
||
|
|
Debug.LogError("MainMenu: GameManager.Instance 为空!请确保场景中有 GameManager。");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
gm.CurrentExperimentType = _selectedType;
|
||
|
|
gm.CurrentMode = _selectedMode;
|
||
|
|
gm.CurrentFixationMethod = _selectedFixation;
|
||
|
|
|
||
|
|
// 加载实验场景(所有实验共用一个场景,StepManager 根据配置区分)
|
||
|
|
UnityEngine.SceneManagement.SceneManager.LoadScene("Experiment");
|
||
|
|
}
|
||
|
|
}
|