Example #1
0
    void Update()
    {
        timeSpan += Time.deltaTime;
        if (timeSpan > 0.05f)
        {
            timeSpan = 0.0f;
            //GPUBillboardBuffer.Instance.DisplayNumber(
            //    Random.Range( 1, 200).ToString(),
            //    new Vector2( 1.0f, 1.0f ),
            //    new Vector3( Random.Range( -10, 10 ),-2,0 ),
            //    //new Color( Random.Range(0.0f,1.0f), Random.Range(0.0f,1.0f), Random.Range(0.0f,1.0f) ) );
            //    new Color( 1,1,1 ),
            //    true );

            DisplayNumerInputParam param = new DisplayNumerInputParam();
            param.RandomXInitialSpeedMin = 1;
            param.RandomXInitialSpeedMax = 1;

            param.RandomYInitialSpeedMin = 1;
            param.RandomYInitialSpeedMax = 1;

            param.RandomXaccelerationMin = 1;
            param.RandomXaccelerationMax = 1;

            param.RandomYaccelerationMin = 1;
            param.RandomYaccelerationMax = 1;

            param.FadeTime   = 1;
            param.NormalTime = 1;

            GPUBillboardBuffer.Instance.DisplayNumberRandom(
                Random.Range(1, 200).ToString(),
                new Vector2(1.0f, 1.0f),
                new Vector3(Random.Range(-10, 10), -2, 0),
                new Color(1, 1, 1),
                true, param);
        }
    }
    /// <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);
            }
        }
    }
Example #3
0
    public void DisplayNumberRandom(string numString, Vector2 size, Vector3 center, Color clr, bool haveScale, DisplayNumerInputParam inpuParam)
    {
        //mGameObject.transform.position = center;
        //int temp = num;
        //num = num < 0 ? -num : num;
        float time = Time.timeSinceLevelLoad;

        center += mPosOffset;

        //string numString = num.ToString();
        //if (temp >= 0)
        //{
        //    numString = numString.Insert(0, "+");
        //}
        //		else
        //		{
        //			numString = numString.Insert( 0, "-" );
        //		}


        int numLength = numString.Length;

        Vector2 halfSize = new Vector2(size.x * 0.5f, size.y * 0.5f);
        float   leftBio  = -size.x * 0.5f * BC_FONT_WIDTH * numLength;

        int inthaveScale = 1;

        if (!haveScale)
        {
            inthaveScale = 0;
        }

        randomspeed.x        = Random.Range(inpuParam.RandomXInitialSpeedMin, inpuParam.RandomXInitialSpeedMax);
        randomspeed.y        = Random.Range(inpuParam.RandomYInitialSpeedMin, inpuParam.RandomYInitialSpeedMax);
        randomacceleration.x = Random.Range(inpuParam.RandomXaccelerationMin, inpuParam.RandomXaccelerationMax);
        randomacceleration.y = Random.Range(inpuParam.RandomYaccelerationMin, inpuParam.RandomYaccelerationMax);



        lifeParam.x = inpuParam.NormalTime;
        lifeParam.y = inpuParam.FadeTime;
        lifeParam.z = Random.Range(inpuParam.RandomXaccelerationMin, inpuParam.RandomXaccelerationMax);

        for (int i = 0; i < numLength; ++i)
        {
            uint indexPos = mBoardIndex * BC_VERTEX_EACH_BOARD;
            mPosXYLifeScale[indexPos].Set(-halfSize.x + leftBio + i * size.x * BC_FONT_WIDTH, halfSize.y, time, inthaveScale);
            mPosXYLifeScale[indexPos + 1].Set(-halfSize.x + leftBio + i * size.x * BC_FONT_WIDTH, -halfSize.y, time, inthaveScale);
            mPosXYLifeScale[indexPos + 2].Set(halfSize.x + leftBio + i * size.x * BC_FONT_WIDTH, halfSize.y, time, inthaveScale);
            mPosXYLifeScale[indexPos + 3].Set(halfSize.x + leftBio + i * size.x * BC_FONT_WIDTH, -halfSize.y, time, inthaveScale);

            mCenters[indexPos]     = center;
            mCenters[indexPos + 1] = center;
            mCenters[indexPos + 2] = center;
            mCenters[indexPos + 3] = center;

            mColors[indexPos]     = clr;
            mColors[indexPos + 1] = clr;
            mColors[indexPos + 2] = clr;
            mColors[indexPos + 3] = clr;

            mInitialSpeedXY[indexPos]     = randomspeed;
            mInitialSpeedXY[indexPos + 1] = randomspeed;
            mInitialSpeedXY[indexPos + 2] = randomspeed;
            mInitialSpeedXY[indexPos + 3] = randomspeed;

            mAccelerationXY[indexPos]     = randomacceleration;
            mAccelerationXY[indexPos + 1] = randomacceleration;
            mAccelerationXY[indexPos + 2] = randomacceleration;
            mAccelerationXY[indexPos + 3] = randomacceleration;

            mLifeSpanParam[indexPos]     = lifeParam;
            mLifeSpanParam[indexPos + 1] = lifeParam;
            mLifeSpanParam[indexPos + 2] = lifeParam;
            mLifeSpanParam[indexPos + 3] = lifeParam;

            {//计算UV//
                int eachNum = 0;
                switch (numString[i])
                {
                case '-':
                {
                    eachNum = 10;
                } break;

                case 'M':
                {
                    eachNum = 11;
                } break;

                case 'I':
                {
                    eachNum = 12;
                } break;

                case 'S':
                {
                    eachNum = 13;
                } break;

                default:
                {
                    eachNum = numString[i] - '0';
                } break;
                }
                int     row     = eachNum / BC_TEXTURE_ROW_COLUMN;
                int     col     = eachNum % BC_TEXTURE_ROW_COLUMN;
                Vector2 uvBegin = new Vector2(mUVIncrease.x * col, 1 - mUVIncrease.y * row);
                mUv[indexPos] = uvBegin;
                mUv[indexPos + 1].Set(uvBegin.x, uvBegin.y - mUVIncrease.y);
                mUv[indexPos + 2].Set(uvBegin.x + mUVIncrease.x, uvBegin.y);
                mUv[indexPos + 3].Set(uvBegin.x + mUVIncrease.x, uvBegin.y - mUVIncrease.y);
            }

            mBoardIndex = ++mBoardIndex < mMaxBoardSize ? mBoardIndex : 0;
        }


        mMesh.vertices = mCenters;
        mMesh.tangents = mPosXYLifeScale;
        mMesh.colors   = mColors;
        mMesh.uv       = mUv;

        mMesh.uv2 = mInitialSpeedXY;
        //mMesh.uv2 = mAccelerationXY;
        mMesh.normals = mLifeSpanParam;
    }