/// <summary> /// 从缓存中获取节点 /// </summary> /// <param name="cube"></param> /// <returns></returns> public bool TryHitCache(QuadTreeSpaceCube cube) { CubeTime hitCube = null; for (int i = 0; i < cachedCube.Count; ++i) { var cache_info = cachedCube[i]; if (cache_info == null) { continue; } if (cache_info.mCube == cube) { hitCube = cache_info; break; } } if (hitCube != null) { // 将节点移动到队列结尾,并设置新的访问时间 cachedCube.Remove(hitCube); cachedCube.Add(hitCube); hitCube.mTime = Time.unscaledTime; return(true); } else { return(false); } }
/// <summary> /// 释放超过一定时候都还没有显示的节点 /// </summary> void ReleaseTooOld() { cubeNeedDelete.Clear(); for (int i = 0; i < cachedCube.Count; i++) { if (!cachedCube[i].mCube.IsShow) { if (Time.unscaledTime - cachedCube[i].mTime > DIE_TIME) { cubeNeedDelete.Add(cachedCube[i]); } } } if (cubeNeedDelete.Count > 0) { for (int j = 0; j < cubeNeedDelete.Count; j++) { QuadTreeSpaceCube c = cubeNeedDelete[j].mCube; if (c.Release()) { cachedCube.Remove(cubeNeedDelete[j]); } } } }
/// <summary> /// 将场景节点加入到缓存中 /// </summary> /// <param name="cube"></param> public void AddToCache(QuadTreeSpaceCube cube) { cachedCube.Add(new CubeTime(cube, Time.unscaledTime)); cubeNeedDelete.Clear(); int exceed = cachedCube.Count - MAX_CACHE_NUM;// 超出了可用缓存的数量 if (exceed > 0) { for (int i = 0; i < cachedCube.Count; i++) { if (!cachedCube[i].mCube.IsShow)// 如果缓存中的节点没有显示,则将其添加到需要删除的列表中 { cubeNeedDelete.Add(cachedCube[i]); if (cubeNeedDelete.Count >= exceed)// 如果需要删除的节点释放后在最大缓存范围内 { break; } } } } if (cubeNeedDelete.Count > 0) { for (int j = 0; j < cubeNeedDelete.Count; j++)// 释放需要删除节点的资源 { QuadTreeSpaceCube c = cubeNeedDelete[j].mCube; if (c.Release()) { cachedCube.Remove(cubeNeedDelete[j]); } } } }
/// <summary> /// 移除对QuadTreeSpaceCube的监听 /// </summary> /// <param name="cube"></param> public void RemoveListener(QuadTreeSpaceCube cube) { if (!mIsListen) { return; } if (mListenerList.Contains(cube)) { mListenerList.Remove(cube); } }
/// <summary> /// 添加对QuadTreeSpaceCube的监听 /// </summary> /// <param name="cube"></param> public void AddListener(QuadTreeSpaceCube cube) { if (!mIsListen) { return; } if (!mListenerList.Contains(cube)) { mListenerList.Add(cube); mMaxListenerNum++; } }
public float mTime;// 加入缓存的时间 public CubeTime(QuadTreeSpaceCube cube, float time) { mCube = cube; mTime = time; }