小红点模块

树状结构 每一个红点脚本 拥有多少父节点 和当前孩子显示的数量底层数据发生变化上层跟着变换。支持主动查询和被动通知。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public delegate void OnRedPointChange(bool disPlay);public class TrackPoint
{/// /// 当前红点是否显示/// public bool DisPlay { get; private set; }/// /// 当前红点状态发生改变的回调/// private OnRedPointChange _OnChange = null;/// /// 红点回调事件/// public event OnRedPointChange OnChange{add{_OnChange += value;value(DisPlay);}remove { _OnChange -= value; }}/// /// 当前红点拥有的孩子数量 /// public int SubDisplayCount { get; private set; }/// /// 当前红点的父节点集合/// private List<TrackPoint> ParentTrackPoints = new List<TrackPoint>();/// /// 构造函数/// public TrackPoint(){DisPlay = false;}/// /// 通过implicit隐身转换 可以主动查询当前红点状态 将TrackPoint类当作Bool值来用 提高代码可读性/// /// public static implicit operator bool (TrackPoint trackPoint){return trackPoint != null && trackPoint.DisPlay;}/// /// 注册父节点 可以多个/// /// public void SetParent(TrackPoint parent){if (parent == null){Debug.LogError("注册父节点不能为空");return;}if (ParentTrackPoints.Contains(parent)){Debug.LogError("当前红点已经注册过这个父节点了");return;}ParentTrackPoints.Add(parent);if (DisPlay){parent.OnSubDisplayCountChange(true);}}/// /// 改变当前红点状态/// /// public void Change(bool disPlay){if (DisPlay != disPlay){DisPlay = disPlay;//通知父节点 孩子减少1foreach (var trackPoint in ParentTrackPoints){trackPoint.OnSubDisplayCountChange(DisPlay);}_OnChange?.Invoke(DisPlay);}}/// /// 改变孩子SubCount数量/// /// public void OnSubDisplayCountChange(bool disPlay){if (disPlay){SubDisplayCount++;}else{SubDisplayCount--;}Change(SubDisplayCount > 0);}/// /// 重置当前红点/// public void Reset(){SubDisplayCount = 0;Change(false);ParentTrackPoints = new List<TrackPoint>();_OnChange = null;}/// /// 清理孩子状态/// public void ClearSub(){SubDisplayCount = 0;Change(false);}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部