/// <summary> /// 接受逻辑层数据 /// </summary> /// <param name="ptr"></param> /// <param name="nLen"></param> /// <param name="utn">头顶信息实例</param> private void SetNameInfo(IntPtr ptr, int nLen, UTopName utn) { if (null == utn) { return; } utn.ClearName(); IntPtrVaArgParseHelper helper = new IntPtrVaArgParseHelper(ptr, nLen); cmd_count cmdCount = helper.get <cmd_count>(); for (int i = 0; i < cmdCount.nCount; ++i) { cmd_entity_show_title_node node = helper.get <cmd_entity_show_title_node>(); switch (node.nTitleID) { case 0: utn.SetRoleName(node.szTitleName); break; case 1: utn.SetKinName(node.szTitleName); break; case 2: utn.SetClanName(node.szTitleName); break; default: break; } } }
/// <summary> /// 销毁实例 /// </summary> /// <param name="instance"></param> private void DestroyTopName(UTopName instance) { if (null == instance) { return; } int id = instance.ID; if (instance.CanvasNode.isValid) { m_UnUseCanvasNodeList.Enqueue(instance.CanvasNode); } var temp = instance.gameObject; instance.resNode.DestroyInstanceRes(ref temp); instance.Clear(true); if (m_TopNameMap.ContainsKey(id)) { m_TopNameMap[id] = null; m_TopNameMap.Remove(id); } }
public void SetPKMode(int entityID, bool bIsPK) { if (m_TopNameMap.ContainsKey(entityID)) { UTopName ut = m_TopNameMap[entityID]; ut.SetPKMode(bIsPK); } }
public UTopName FindTopName(int entityID) { if (m_TopNameMap.ContainsKey(entityID)) { UTopName ut = m_TopNameMap[entityID]; return(ut); } return(null); }
/// <summary> /// 创建头顶信息实例 /// </summary> /// <param name="objev"></param> /// <param name="entityID"></param> /// <param name="host"></param> /// <param name="ptr"></param> /// <param name="nLen"></param> /// <returns></returns> public UTopName CreateTopName(EntityView objev, IntPtr ptr, int nLen) { if (!bInit) { Trace.LogError("UTopNameManager必须初始化!"); return(null); } if (EntityView.isNullOrEmpty(objev)) { Trace.LogWarning("TopName--实体视图无效!"); return(null); } int entityID = objev.ID; //如果表里面已含,则更新信息并返回 if (m_TopNameMap.ContainsKey(entityID)) { Trace.LogWarning(entityID + "已经有TopName,返回已有的实例"); UTopName ut = m_TopNameMap[entityID]; //接受逻辑层信息并更新 SetNameInfo(ptr, nLen, ut); return(ut); } //分配一个节点 TopNameNode bcn = new TopNameNode(); UTopName utn = GetTopName(ref bcn); if (null == utn) { return(null); } utn.CreatBillBoard(); utn.ChangeCanvasNode(bcn); utn.Init(objev); m_TopNameMap.Add(entityID, utn); SetNameInfo(ptr, nLen, utn); if (objev.Property) { int nMatchType = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MATCHTYPE); int nRankScore = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_RANKSCORE); int nRankGrade = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_RANKGRADE); int nRankIcon = GameLogicAPI.getRankIconIDByGrade(nMatchType, nRankGrade); if (nRankIcon > 0) { utn.SetRankLv(nRankIcon); } int nSex = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_SEX); utn.SetSex(nSex); } return(utn); }
/// <summary> /// 实例化创建头顶称号 /// </summary> /// <param name="bcn">节点信息</param> /// <returns></returns> private UTopName InstanceUTopName(TopNameNode bcn) { GameObject go = TopNamePrefabRes.InstanceMainRes(); if (RectPosition(go, bcn)) { UTopName ut = go.GetComponent <UTopName>(); ut.resNode = TopNamePrefabRes; return(ut); } return(null); }
private void CacheTopName(UTopName ut) { if (null == ut) { return; } if (m_TopNameMap.ContainsKey(ut.ID)) { ut.SetEnable(false); ut.Reset(); ut.ChangeParent(CacheTopNameRoot.transform); m_CacheTopName.Enqueue(ut); m_TopNameMap.Remove(ut.ID); } }
public void UpdateTopName(EntityView ev, IntPtr ptr, int nLen) { int entityID = -1; if (!EntityView.isNullOrEmpty(ev)) { entityID = ev.ID; } if (m_TopNameMap.ContainsKey(entityID)) { UTopName ut = m_TopNameMap[entityID]; ut.Entity = ev; SetNameInfo(ptr, nLen, ut); } }
private UTopName GetTopName(ref TopNameNode canvNode) { UTopName ut = null; if (m_CacheTopName.Count > 0) { ut = m_CacheTopName.Dequeue(); canvNode = ut.CanvasNode; ut.RefreshTexture(); } else { if (!AllocTopNamePos(ref canvNode)) { return(null); } ut = InstanceUTopName(canvNode); } return(ut); }
private void NormalUpdate() { m_InvalidList.Clear(); if (null != m_TopNameMap) { foreach (UTopName var in m_TopNameMap.Values) { UTopName utn = var; EntityView view = utn.Entity; if (EntityView.isNullOrEmpty(view)) { m_InvalidList.Enqueue(utn); continue; } //如果实体未激活则隐藏头顶称号 if (!view.gameObject.activeSelf || !view.StateMachine.GetVisible()) { if (utn.GetEnable()) { utn.SetEnable(false); } } else { if (!utn.GetEnable()) { utn.SetEnable(true); } //需要更新的头顶称号进行正常更新 utn.OnUpdate(); } } } //把无效的头顶称号缓存起来 while (m_InvalidList.Count > 0) { UTopName ut = m_InvalidList.Dequeue(); CacheTopName(ut); } m_InvalidList.Clear(); }
/// <summary> /// 销毁所有头顶信息实例 /// </summary> public void DestroyALL() { ClearCache(); if (null != m_TopNameMap) { foreach (KeyValuePair <int, UTopName> var in m_TopNameMap) { UTopName utn = var.Value; if (utn != null) { var temp = utn.gameObject; utn.resNode.DestroyInstanceRes(ref temp); utn.Clear(true); } } currentColIndex = 0; currentRowIndex = 0; m_UnUseCanvasNodeList.Clear(); m_TopNameMap.Clear(); } }
//预加载 public void PreWarmTopName() { if (bPreWarmTopName) { return; } bPreWarmTopName = true; for (int i = 0; i < TopNameCacheCount; i++) { TopNameNode canvNode = new TopNameNode(); if (!AllocTopNamePos(ref canvNode)) { continue; } UTopName utn = InstanceUTopName(canvNode); utn.CreatBillBoard(); utn.ChangeParent(CacheTopNameRoot.transform); utn.Init(null); utn.ChangeParent(CacheTopNameRoot.transform); utn.SetEnable(false); utn.ChangeCanvasNode(canvNode); m_CacheTopName.Enqueue(utn); } }
/// <summary> /// 数值属性回调 /// </summary> /// <param name="e"></param> private void ResponseEntityNumPropEvent(EntityNumPropEventArgs e) { switch (e.data.nPropID) { case (int)ENTITY_PROPERTY.PROPERTY_RANKGRADE: { if (EntityView.isNullOrEmpty(e.objev) || null == e.objev.Property) { return; } UTopName ut = FindTopName(e.data.nEntityID); if (ut != null) { int nMatchType = e.objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MATCHTYPE); int nRankGrade = e.data.nValue; int nRankIcon = GameLogicAPI.getRankIconIDByGrade(nMatchType, nRankGrade); if (nRankIcon > 0) { ut.SetRankLv(nRankIcon); } } } break; case (int)ENTITY_PROPERTY.PROPERTY_RANKSCORE: { if (EntityView.isNullOrEmpty(e.objev) || null == e.objev.Property) { return; } UTopName ut = FindTopName(e.data.nEntityID); if (ut != null) { int nMatchType = e.objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MATCHTYPE); int nRankScore = e.objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_RANKGRADE); int nRankIcon = GameLogicAPI.getRankIconIDByGrade(nMatchType, nRankScore); if (nRankIcon > 0) { ut.SetRankLv(nRankIcon); } } } break; case (int)ENTITY_PROPERTY.PROPERTY_SEX: { if (EntityView.isNullOrEmpty(e.objev) || null == e.objev.Property) { return; } UTopName ut = FindTopName(e.data.nEntityID); if (ut != null) { ut.SetSex(e.data.nValue); } } break; default: break; } }