Files
back_cantanBuilding/Assets/Scripts/UI/PartnerGather/Mining/EventPartnerMiningLevelController.cs
2026-05-26 16:15:54 +08:00

170 lines
5.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using UnityEngine;
namespace UI.PartnerGather.Mining
{
/// <summary>
/// 等级状态枚举
/// </summary>
public enum LevelStatus
{
Normal, // 普通状态(未到达)
Current, // 当前状态(进行中)
Done // 完成状态(已完成)
}
/// <summary>
/// 事件合作伙伴挖矿等级控制器
/// 负责管理单个等级节点的视觉状态切换
///
/// 建议挂载在每个等级节点的UI对象上
///
/// UI结构建议
/// LevelNode (挂载此脚本)
/// ├── bg_normal (普通状态背景)
/// ├── bg_current (当前状态背景,通常高亮显示)
/// └── bg_done (完成状态背景,通常显示勾选标记)
/// </summary>
public class EventPartnerMiningLevelController : MonoBehaviour
{
#region UI引用配置
[Header("=== 状态背景配置 ===")]
[Tooltip("普通状态背景GameObject")]
public GameObject bg_normal;
[Tooltip("当前进行状态背景GameObject")]
public GameObject bg_current;
[Tooltip("已完成状态背景GameObject")]
public GameObject bg_done;
[Header("=== 调试信息 ===")]
[SerializeField] private LevelStatus _currentStatus = LevelStatus.Normal;
#endregion
#region Unity生命周期
private void Awake()
{
ValidateComponents();
// 初始化为普通状态
UpdateStatus(LevelStatus.Normal);
}
/// <summary>
/// 验证必要的UI组件是否设置
/// </summary>
private void ValidateComponents()
{
bool hasError = false;
if (bg_normal == null)
{
Log("错误:缺少普通状态背景组件 (bg_normal)");
hasError = true;
}
if (bg_current == null)
{
Log("错误:缺少当前状态背景组件 (bg_current)");
hasError = true;
}
if (bg_done == null)
{
Log("错误:缺少完成状态背景组件 (bg_done)");
hasError = true;
}
if (!hasError)
{
Log("✓ 等级控制器组件验证完成");
}
}
#endregion
#region
/// <summary>
/// 更新等级状态
/// </summary>
/// <param name="status">新的状态</param>
public void UpdateStatus(LevelStatus status)
{
if (_currentStatus == status) return; // 避免重复设置
_currentStatus = status;
// 先隐藏所有背景
SetAllBackgroundsActive(false);
// 根据状态激活对应背景
switch (status)
{
case LevelStatus.Normal:
if (bg_normal != null) bg_normal.SetActive(true);
break;
case LevelStatus.Current:
if (bg_current != null) bg_current.SetActive(true);
break;
case LevelStatus.Done:
if (bg_done != null) bg_done.SetActive(true);
break;
}
Log($"等级状态已更新为: {status}");
}
/// <summary>
/// 获取当前状态
/// </summary>
public LevelStatus GetCurrentStatus()
{
return _currentStatus;
}
/// <summary>
/// 重置到普通状态
/// </summary>
public void ResetToNormal()
{
UpdateStatus(LevelStatus.Normal);
}
#endregion
#region
/// <summary>
/// 设置所有背景的激活状态
/// </summary>
private void SetAllBackgroundsActive(bool active)
{
if (bg_normal != null) bg_normal.SetActive(active);
if (bg_current != null) bg_current.SetActive(active);
if (bg_done != null) bg_done.SetActive(active);
}
/// <summary>
/// 日志输出
/// </summary>
private static void Log(object message)
{
Debug.Log($"<color=cyan>EventPartnerMiningLevelController-> {message} </color>");
}
#endregion
#region
#if UNITY_EDITOR
/// <summary>
/// 编辑器下的状态预览功能
/// </summary>
[UnityEngine.ContextMenu("预览普通状态")]
private void PreviewNormal() => UpdateStatus(LevelStatus.Normal);
[UnityEngine.ContextMenu("预览当前状态")]
private void PreviewCurrent() => UpdateStatus(LevelStatus.Current);
[UnityEngine.ContextMenu("预览完成状态")]
private void PreviewDone() => UpdateStatus(LevelStatus.Done);
#endif
#endregion
}
}