示例#1
0
    public static void Update()
    {
        if (!bInit)
        {
            return;
        }

        InvalidList.Clear();

        U3D_Render.EntityView view;
        foreach (TopName var in m_TopNameMap.Values)
        {
            TopName tn = var;
            view = EntityFactory.getEntityViewByID(tn.ID);

            if (view == null)
            {
                InvalidList.Enqueue(tn);
                continue;
            }

            if (!tn.Entry)//实体被删除
            {
                InvalidList.Enqueue(tn);
                continue;
            }

            if (!tn.Entry.activeSelf || !view.StateMachine.GetVisible())//实体没有被激活或者不可见
            {
                if (tn.GetEnable())
                {
                    tn.SetEnable(false);
                }
            }
            else//正常的实体
            {
                if (!tn.GetEnable())
                {
                    tn.SetEnable(true);
                }
                tn.OnUpdate();
            }
        }

        while (InvalidList.Count > 0)
        {
            //移除无效的TopName节点
            TopName b = InvalidList.Dequeue();
            if (OptimitzedControlPlane.Instance.EnityCreateOptimize)
            {
                CacheTopName(b);
            }
            else
            {
                TopNameManager.Destroy(b);
            }
        }

        InvalidList.Clear();
    }
    /// <summary>
    /// 取得头顶名字
    /// </summary>
    /// <param name="moveNode"></param>
    /// <returns></returns>
    static TopName GetTopName(ref MovieNode moveNode)
    {
        TopName tp = null;

        if (!OptimitzedControlPlane.Instance.EnityCreateOptimize)
        {
            tp       = CreateTopNameInstance();
            moveNode = new MovieNode();
            return(tp);
        }

        if (m_CacheTopName.Count > 0)
        {
            tp = m_CacheTopName.Dequeue();
            tp.SetEnable(true);
            moveNode = tp.movieNode;
        }
        else
        {
            if (!AllocTopNamePos(ref moveNode))
            {
                //Debug.LogWarning("Movie空间不足,最多只能容纳:" + MaxColCount * MaxRowCount + "个头顶名!!");
                return(null);
            }
            tp = CreateTopNameInstance();
        }
        return(tp);
    }
 /// <summary>
 /// 预热
 /// </summary>
 public static void PreWarmTopName()
 {
     if (bPreWarmTopName)
     {
         return;
     }
     bPreWarmTopName = true;
     for (int i = 0; i < CacheCout; i++)
     {
         TopName tp = CreateTopNameInstance();
         tp.Init(CacheTopNameRoot, -1, "temp", Color.white);
         tp.CreateBillBorad();
         tp.ChangeParent(CacheTopNameRoot.transform);
         tp.SetEnable(false);
         m_CacheTopName.Enqueue(tp);
     }
 }
    /// <summary>
    /// 缓存
    /// </summary>
    /// <param name="tp"></param>
    static void CacheTopName(TopName tp)
    {
        if (!OptimitzedControlPlane.Instance.EnityCreateOptimize || null == tp)
        {
            return;
        }

        int id = tp.ID;

        if (m_TopNameMap.ContainsKey(id))
        {
            tp.SetEnable(false);
            tp.ChangeParent(CacheTopNameRoot.transform);
            m_CacheTopName.Enqueue(tp);
            m_TopNameMap.Remove(id);
        }
    }