using Framework;
using UnityEngine;
public class UIActivityNode : UINode
{
public enum ActivityType
{
Group,
Normal
}
[SerializeField]
private ActivityType _activityType;
[SerializeField]
private int _activityID;
public int activityID
{
get { return _activityID; }
set
{
_activityID = value;
logic?.FakeAwake(); // Re-bind or refresh
}
}
private IActivityEntranceNode _logic;
public IActivityEntranceNode logic
{
get
{
return _logic;
}
set
{
_logic = value;
_logic?.FakeAwake();
}
}
private void Awake()
{
// 发送事件,通知逻辑层创建和绑定逻辑实例
EventManager.Instance.Send(EventManager.EventName.ActivityNodeCreated, this);
EventManager.Instance.Register(EventManager.EventName.RefreshUIActivity, RefreshVisibility);
}
private void OnEnable()
{
RefreshVisibility();
}
///
/// 改变该节点活动
///
///
///
public void SetActivity(int newId,ActivityType type = ActivityType.Normal)
{
this.activityID = newId;
this._activityType = type;
RefreshVisibility();
}
///
/// 无绑定逻辑、无活动或不在活动组时间窗内时隐藏(scale=0);否则按时间窗显示。
///
private void RefreshVisibility()
{
if (logic == null)
{
DebugUtil.Log("UIActivityNode logic is null");
gameObject.IsScaleShow(false);
return;
}
/*var start_time = _activityType==ActivityType.Group?
logic.GetActivityGroupOpenTime(activityID):logic.GetActivityOpenTime(activityID);
var end_time = _activityType==ActivityType.Group?
logic.GetActivityGroupCloseTime(activityID):logic.GetActivityCloseTime(activityID);
// 该组没有任何活动时,起止为 MaxValue / MinValue,必然 start > end,统一视为不显示
if (start_time > end_time)
{
DebugUtil.Log((_activityType== ActivityType.Group ? "Activity Group " : "Activity ") + activityID + " has no valid time:" +
" start_time: " + start_time + " end_time: " + end_time);
gameObject.IsScaleShow(false);
return;
}
var curTime = logic.GetCurTime();
bool is_active = curTime >= start_time && curTime <= end_time;*/
bool is_active = _activityType == ActivityType.Group ? logic.IsActivityGroupActive(activityID) : logic.IsActivityActive(activityID);
gameObject.IsScaleShow(is_active);
DebugUtil.Log("UIActivityNode logic active is " + is_active);
}
private void OnDestroy()
{
EventManager.Instance.Unregister(EventManager.EventName.RefreshUIActivity, RefreshVisibility);
logic?.FakeOnDestroy();
}
}