树状结构 每一个红点脚本 拥有多少父节点 和当前孩子显示的数量底层数据发生变化上层跟着变换。支持主动查询和被动通知。
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;}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;foreach (var trackPoint in ParentTrackPoints){trackPoint.OnSubDisplayCountChange(DisPlay);}_OnChange?.Invoke(DisPlay);}}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);}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!