备份CatanBuilding瘦身独立工程
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user