static void OnLoadDamageBoard(GameObject resObj, object param) { if (PlayerPreferenceData.SystemDamageBoardEnable == false) { return; } if (null == resObj || null == param) { return; } if (null == GameManager.gameManager.ActiveScene || null == GameManager.gameManager.ActiveScene.DamageBoardRoot) { return; } GameObject resInst = GameObject.Instantiate(resObj) as GameObject; resInst.transform.parent = GameManager.gameManager.ActiveScene.DamageBoardRoot.transform; DamageBoard board = resInst.GetComponentInChildren <DamageBoard>(); if (null == board) { return; } DamageBoardLoadInfo info = param as DamageBoardLoadInfo; if (board.ActiveDamageBoard(info.Type, info.Value, info.Pos, info.IsProfessionSkill) && m_EnabledDictionary.ContainsKey(info.Type)) { m_EnabledDictionary[info.Type].Add(board); } }
/// <summary> /// 显示伤害信息板 /// </summary> /// <param name="nType">伤害信息板类型 对应DamageBoardType表ID</param> /// <param name="nValue">显示的内容</param> public void ShowDamageBoard(int nType, string strValue, Vector3 pos, bool isProfessionSkill = true) { if (mCurType == DAMAGE_BOARD_TYPE.GPUBILLBOARD) { Debug.LogWarning(strValue); if (!PlayerPreferenceData.SystemDamageBoardEnable) { return; } if (!mIsInit) { mIsInit = true; GPUBillboardBuffer.Instance.Init(); GPUBillboardBuffer.Instance.SetupBillboard(1000); Tab_DamageBoardType template = TableManager.GetDamageBoardTypeByID(7, 0); GPUBillboardBuffer.Instance.SetPosOffset(new Vector3(template.OriginX, template.OriginY)); GPUBillboardBuffer.Instance.SetScaleParams(template.ScaleDelayTime, template.ScalePlusTime, template.ScaleMinusTime, template.TextSizeMax, template.TextSizeOver); } Tab_DamageBoardType tabDamageBoardType = TableManager.GetDamageBoardTypeByID(nType, 0); uint color = System.Convert.ToUInt32(tabDamageBoardType.TextColor + "ff", 16); DisplayNumerInputParam param = new DisplayNumerInputParam(); param.RandomXInitialSpeedMin = tabDamageBoardType.VelocityX; param.RandomXInitialSpeedMax = tabDamageBoardType.VelocityX; param.RandomYInitialSpeedMin = tabDamageBoardType.VelocityY; param.RandomYInitialSpeedMax = tabDamageBoardType.VelocityY; param.RandomXaccelerationMin = tabDamageBoardType.AccelerationX; param.RandomXaccelerationMax = tabDamageBoardType.AccelerationX; param.RandomYaccelerationMin = tabDamageBoardType.AccelerationY; param.RandomYaccelerationMax = tabDamageBoardType.AccelerationY; param.FadeTime = tabDamageBoardType.FadeTime; param.NormalTime = tabDamageBoardType.ShowTime; GPUBillboardBuffer.Instance.DisplayNumberRandom( strValue, tabDamageBoardType.TextSize * 0.2f * Vector3.one, pos, NGUIMath.HexToColor(color), tabDamageBoardType.TextSizeMax > 0, param); } else if (mCurType == DAMAGE_BOARD_TYPE.NGUI) { if (false == DebugHelper.m_bShowDamageBoard) { return; } if (DamageBoardType.ContainsKey(nType) == false) { return; } Tab_DamageBoardType tabDamageBoardType = DamageBoardType[nType][0]; if (tabDamageBoardType == null) { tabDamageBoardType = DamageBoardType[0][0]; } int nMaxNum = tabDamageBoardType.MaxNum; // 最大显示数量 DamageBoard damageBoardInfo = null; if (m_DisabledDictionary[nType].Count > 0) { // 若DisabledDictionary对应list中有元素 则不创建新的信息板 直接使用旧的 damageBoardInfo = m_DisabledDictionary[nType][m_DisabledDictionary[nType].Count - 1]; damageBoardInfo.Reuse(pos); m_DisabledDictionary[nType].RemoveAt(m_DisabledDictionary[nType].Count - 1); m_EnabledDictionary[nType].Add(damageBoardInfo); } else { // 若DisabledDictionary对应list中没有元素 if (m_EnabledDictionary[nType].Count < nMaxNum) { // 若EnabledDictionary对应list数量未达到最大值 则直接创建 //damageBoardInfo = new DamageBoard(); //damageBoardInfo.Create(m_Font, gameObject.transform.position); //m_EnabledDictionary[nType].Add(damageBoardInfo); DamageBoardLoadInfo info = new DamageBoardLoadInfo(nType, strValue, pos, isProfessionSkill); UIManager.LoadItem(UIInfo.DamageBoard, OnLoadDamageBoard, info); } else { // 若EnabledDictionary对应list数量已达到最大值 则Remove第一个 再Add出来一个 damageBoardInfo = m_EnabledDictionary[nType][m_EnabledDictionary[nType].Count - 1]; damageBoardInfo.Reuse(pos); m_EnabledDictionary[nType].RemoveAt(m_EnabledDictionary[nType].Count - 1); m_EnabledDictionary[nType].Add(damageBoardInfo); } } if (null != damageBoardInfo) { damageBoardInfo.ActiveDamageBoard(nType, strValue, pos, isProfessionSkill); } } }