170 lines
5.1 KiB
C#
170 lines
5.1 KiB
C#
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
|
||
}
|
||
} |