public void SwitchPushTitle(HUDTitleInfo title) { title.m_nBatcherIndex = m_ValidTitles.size; m_ValidTitles.Add(title); m_bNeedSort = true; InitTitleHUDMesh(title); }
public void EraseTitle(HUDTitleInfo title) { int nIndex = title.m_nBatcherIndex; title.EraseSpriteFromMesh(); if (nIndex >= 0 && nIndex < m_ValidTitles.size) { if (m_ValidTitles[nIndex] != null && m_ValidTitles[nIndex] == title) { //m_bNeedSort = true; m_bHaveNullTitle = true; m_ValidTitles[nIndex] = null; return; } } for (int i = m_ValidTitles.size - 1; i >= 0; --i) { if (m_ValidTitles[i] != null && m_ValidTitles[i] == title) { //m_bNeedSort = true; m_bHaveNullTitle = true; m_ValidTitles[i] = null; break; } } }
void InitTitleHUDMesh(HUDTitleInfo title) { if (!title.m_bInitHUDMesh && !title.m_bNeedHide) { title.m_bInitHUDMesh = true; for (int i = 0, nSize = title.m_aSprite.size; i < nSize; ++i) { HUDVertex v = title.m_aSprite[i]; if (v.hudMesh == null) { if (v.AtlasID != 0) { v.hudMesh = m_MeshRender.QueryMesh(v.AtlasID); } else { v.hudMesh = m_MeshRender.FontMesh(); } v.hudMesh.PushHUDVertex(v); } } //if (title.m_aSprite.size == 0) // return; //CharacterInfo tempCharInfo = new CharacterInfo(); //title.RebuildCharUV(ref tempCharInfo); } }
public void UpdateLogic(bool bCameraDirty, Vector3 vCameraPos) { if (m_bHaveNullTitle) { m_bHaveNullTitle = false; m_ValidTitles.ClearNullItem(); } // 更新位置信息 for (int i = m_ValidTitles.size - 1; i >= 0; --i) { HUDTitleInfo title = m_ValidTitles[i]; title.m_nBatcherIndex = i; if (title.m_tf != null) { title.ApplyMove(bCameraDirty, vCameraPos); } } if (m_bTitleMove) { m_bTitleMove = false; m_nSortVeresion++; } if (m_bNeedSort || m_nSortVeresion > 10) { bool bNeedSort = m_bNeedSort; int nSortVersion = m_nSortVeresion; m_bTitleMove = false; m_bNeedSort = false; m_nSortVeresion = 0; CompareTitleByDist(); if (m_bRebuildMesh) { //if(m_bStatic) // Debug.Log("Static Need PrepareRebuild, NeedSort=" + bNeedSort + ", Version=" + nSortVersion); //else // Debug.Log("Dynamic Need PrepareRebuild, NeedSort=" + bNeedSort + ", Version=" + nSortVersion); m_bRebuildMesh = false; PrepareRebuild(); } } for (int i = 0, nSize = m_ValidTitles.size; i < nSize; ++i) { HUDTitleInfo title = m_ValidTitles[i]; title.m_nBatcherIndex = i; if (!title.m_bNeedHide && !title.m_bInitHUDMesh) { InitTitleHUDMesh(title); } } m_MeshRender.FillMesh(); }
void PrepareRebuild() { m_MeshRender.FastClearVertex(); for (int i = 0, nSize = m_ValidTitles.size; i < nSize; ++i) { HUDTitleInfo title = m_ValidTitles[i]; title.m_bInitHUDMesh = false; title.PrepareRebuildMesh(); } }
void SwitchDynamieStatic() { float fNow = Time.time; m_fLastCheckMoveTime = fNow; Dictionary <int, HUDTitleInfo> .Enumerator it = m_HudTitles.GetEnumerator(); while (it.MoveNext()) { HUDTitleInfo title = it.Current.Value; if (title.m_tf == null) { m_DelayReleaseTitles.Add(it.Current.Key); } if (title.m_bIsMain) { continue; } if (title.m_pBatcher == null) { title.m_pBatcher = m_StaticBatcher; title.m_pBatcher.PushTitle(title); title.RebuildFontUI(); } if (title.m_pBatcher == m_StaticBatcher) { // 动了 if (title.m_fLastMoveTime + 1.0f > fNow) { title.m_pBatcher.EraseTitle(title); title.m_pBatcher = m_DynamicBatcher; title.m_pBatcher.SwitchPushTitle(title); m_bMeshDirty = true; } } else { // 一秒钟不动就转静态批 if (title.m_fLastMoveTime + 1.0f < fNow && title.m_pBatcher == m_DynamicBatcher) { title.m_pBatcher.EraseTitle(title); title.m_pBatcher = m_StaticBatcher; title.m_pBatcher.SwitchPushTitle(title); m_bMeshDirty = true; } } } // 释放已经无效的 for (int i = m_DelayReleaseTitles.size - 1; i >= 0; --i) { ReleaseTitle(m_DelayReleaseTitles[i]); } m_DelayReleaseTitles.Clear(); }
public int RegisterTitle(Transform tf, float fOffsetY, bool bIsMain) { Camera caMain = HUDMesh.GetHUDMainCamera(); if (bIsMain) { m_tfMain = tf; } Vector3 vPos = tf.position; HUDTitleInfo title = new HUDTitleInfo(); title.m_tf = tf; title.m_bIsMain = bIsMain; title.m_vPos = vPos; title.m_fOffsetY = fOffsetY; if (caMain != null) { vPos.y += fOffsetY + HudSetting.Instance.m_fTitleOffsetY; title.m_vScreenPos = caMain.WorldToScreenPoint(vPos); title.CaleCameraScale(caMain.transform.position); } int nID = ++m_nHudID; title.m_nTitleID = nID; m_HudTitles[nID] = title; if (bIsMain) { title.m_pBatcher = m_StaticBatcher; } else { title.m_pBatcher = m_DynamicBatcher; } title.m_fLastMoveTime = Time.time; title.m_pBatcher.PushTitle(title); if (!m_bAddUpdate) { m_bAddUpdate = true; UpdateManager.AddLateUpdate(null, 0, UpdateLogic); } if (!m_bInitFontCallback) { m_bInitFontCallback = true; UIFont uiFont = HUDTitleInfo.GetHUDTitleFont(); Font.textureRebuilt += OnAllFontChanged; } return(nID); }
public void OnAllFontChanged(UIFont uiFont) { CharacterInfo tempCharInfo = new CharacterInfo(); for (int i = 0, nSize = m_ValidTitles.size; i < nSize; ++i) { HUDTitleInfo title = m_ValidTitles[i]; if (title != null) { title.RebuildCharUV(ref tempCharInfo); } } m_MeshRender.OnChangeFont(uiFont); }
void CompareTitleByDist() { m_bNeedSort = false; bool changed = true; HUDTitleInfo[] buffer = m_ValidTitles.buffer; int nSize = m_ValidTitles.size; HUDTitleInfo temp; int nChangeCount = 0; while (changed) { changed = false; for (int i = 1; i < nSize; ++i) { // 近的排在后面, 数字大的排在前面 if (buffer[i - 1].m_fDistToCamera < buffer[i].m_fDistToCamera) { temp = buffer[i]; buffer[i] = buffer[i - 1]; buffer[i - 1] = temp; changed = true; ++nChangeCount; } } } if (nChangeCount > 0) { if (m_nMaxSortCount < nChangeCount) { m_nMaxSortCount = nChangeCount; //#if UNITY_EDITOR // if (m_bStatic) // Debug.Log("Static Title Render Compare count:" + m_nMaxSortCount); // else // Debug.Log("Dynamic Title Render Compare count:" + m_nMaxSortCount); //#endif } for (int i = m_ValidTitles.size - 1; i >= 0; --i) { HUDTitleInfo title = m_ValidTitles[i]; if (title.m_nBatcherIndex < i) { m_bRebuildMesh = true; } title.m_nBatcherIndex = i; } } }
public void OnLeaveGame() { foreach (var v in m_HudTitles) { HUDTitleInfo title = v.Value; title.m_pBatcher.EraseTitle(title); title.m_pBatcher = null; } HUDMesh.OnLeaveGame(); HUDNumberRender.Instance.OnLeaveGame(); m_DynamicBatcher.m_MeshRender.Release(); m_StaticBatcher.m_MeshRender.Release(); ReleaseCmmmandBuffer(); }
public void OnEnterGame() { HUDMesh.OnEnterGame(); m_nUpdateVer = 0; m_nBaseUpdateVer = 0; m_nCameraUpdateVer = 0; foreach (var v in m_HudTitles) { HUDTitleInfo title = v.Value; if (title.m_pBatcher == null) { title.m_pBatcher = m_StaticBatcher; title.m_pBatcher.PushTitle(title); title.RebuildFontUI(); } } }
void OnAllFontChanged(Font font) { if (font == null) { return; } UIFont uiFont = HUDTitleInfo.GetHUDTitleFont(); if (font.GetInstanceID() != uiFont.dynamicFont.GetInstanceID()) { return; } m_StaticBatcher.OnAllFontChanged(uiFont); m_DynamicBatcher.OnAllFontChanged(uiFont); // 头顶气泡 HUDTalk.HUDTalkRender.Instance.OnAllFontChanged(uiFont); }
public HUDMesh FontMesh() { if (m_curFontMesh != null) { return(m_curFontMesh); } if (m_MeshFont == null) { m_MeshFont = new HUDMesh(); m_MeshList.Add(m_MeshFont); } m_curFontMesh = m_MeshFont; m_ValidList.Add(m_MeshFont); m_bMeshDirty = true; UIFont uiFont = HUDTitleInfo.GetHUDTitleFont(); m_MeshFont.SetFont(uiFont); return(m_MeshFont); }
public void PushTitle(HUDTitleInfo title) { title.m_nBatcherIndex = m_ValidTitles.size; m_ValidTitles.Add(title); m_bNeedSort = true; }
void RefreshTitle() { if (0 == m_nTitleIns) { m_nTitleIns = HUDTitleInfo.HUDTitleRender.Instance.RegisterTitle(transform, 1.8f, m_bMain); } float fOffsetY = GetHeadNameOffsetY(); HUDTitleInfo title = HUDTitleInfo.HUDTitleRender.Instance.GetTitle(m_nTitleIns); title.Clear(); title.SetOffsetY(fOffsetY); title.ShowTitle(true); // 血条 HUDBloodType nBloodType = GetBloodType(); if (nBloodType != HUDBloodType.Blood_None) { title.BeginTitle(); title.PushBlood(nBloodType, curHpBarValue()); title.EndTitle(); } title.BeginTitle(); title.PushTitle(m_szName, HUDTilteType.PlayerName, 0); // 威望 { title.PushTitle("天下无双", HUDTilteType.PlayerPrestige, 1); } // 可反击标识(主角和平模式,并且可以反击) if (!m_bMain) { title.PushIcon(HUDTilteType.PKFlag, HudSetting.Instance.m_nPKFlagPic); } title.EndTitle(); // 帮会名字 string szFamily = "天下第一帮"; if (!string.IsNullOrEmpty(szFamily)) { title.BeginTitle(); title.PushTitle(szFamily, HUDTilteType.PlayerCorp, 0); title.EndTitle(); } // 称号 { { string szDesign = "武林蒙主"; int nFontType = 1; title.BeginTitle(); title.PushTitle(szDesign, HUDTilteType.PlayerDesignation, nFontType); title.EndTitle(); } } // 队长标记 //if (isTeamLeader) { title.BeginTitle(); title.PushIcon(HUDTilteType.HeadIcon, HudSetting.Instance.m_nTeamFlagPic); title.EndTitle(); } }