Exemple #1
0
    /// <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);
        }
    }
Exemple #2
0
    /// <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]);
                }
            }
        }
    }
Exemple #3
0
    /// <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]);
                }
            }
        }
    }
Exemple #4
0
    /// <summary>
    /// 移除对QuadTreeSpaceCube的监听
    /// </summary>
    /// <param name="cube"></param>
    public void RemoveListener(QuadTreeSpaceCube cube)
    {
        if (!mIsListen)
        {
            return;
        }

        if (mListenerList.Contains(cube))
        {
            mListenerList.Remove(cube);
        }
    }
Exemple #5
0
    /// <summary>
    /// 添加对QuadTreeSpaceCube的监听
    /// </summary>
    /// <param name="cube"></param>
    public void AddListener(QuadTreeSpaceCube cube)
    {
        if (!mIsListen)
        {
            return;
        }

        if (!mListenerList.Contains(cube))
        {
            mListenerList.Add(cube);

            mMaxListenerNum++;
        }
    }
Exemple #6
0
        public float mTime;// 加入缓存的时间

        public CubeTime(QuadTreeSpaceCube cube, float time)
        {
            mCube = cube;
            mTime = time;
        }