示例#1
0
        public void AddShader(EntityShaderInfo info)
        {
            RemoveShader(info.entity.m_hid);
            m_entityMap[info.entity.m_hid] = info;
            for (int i = 0; i < info.entity.m_listRenderer.Count; i++)
            {
                Renderer render = info.entity.m_listRenderer[i];
                if (render == null)
                {
                    continue;
                }
                Material mat = render.material;
                switch (info.type)
                {
                case eShaderType.eAlphaToHalf:
                    mat.shader   = GetShader(eShaderRes.eAlphaDiffuse);
                    info.color.a = 1f;
                    mat.SetColor("_TintColor", info.color);
                    break;

                case eShaderType.eAlphaToHide:
                    mat.shader   = GetShader(eShaderRes.eAlphaDiffuse);
                    info.color.a = 1f;
                    mat.SetColor("_TintColor", info.color);
                    break;

                case eShaderType.eNihility:
                    mat.shader = GetShader(eShaderRes.eNihility);
                    mat.SetColor("_TintColor", info.color);
                    break;

                case eShaderType.eRim:
                    mat.shader = GetShader(eShaderRes.eRim);
                    mat.SetColor("_RimColor", info.color);
                    break;
                }
            }
        }
示例#2
0
        public override void Update(float fTime, float fDTime)
        {
            Dictionary <int, EntityShaderInfo> .Enumerator ms = m_entityMap.GetEnumerator();
            while (ms.MoveNext())
            {
                EntityShaderInfo info = ms.Current.Value;
                info.curTime += fDTime;
                if (info.curTime >= info.showTime)
                {
                    if (info.showEnd != null)   // time out,execute callback
                    {
                        info.showEnd();
                        info.showEnd = null;
                    }
                    if (info.bAutoEnd)
                    {
                        m_tempDestoryEntityList.Add(info);
                    }

                    UpdatePower(info, 1.0f);
                }
                else
                {
                    UpdatePower(info, info.curTime / info.showTime);
                }
            }

            List <EntityShaderInfo> .Enumerator del = m_tempDestoryEntityList.GetEnumerator();
            while (del.MoveNext())
            {
                EntityShaderInfo info = del.Current;
                RemoveShader(info.entity.m_hid);
                //info = null;
            }
            m_tempDestoryEntityList.Clear();
        }
示例#3
0
        private void UpdatePower(EntityShaderInfo info, float val)
        {
            //if (info == null)
            //    return;
            Entity ent = info.entity;

            if (ent == null)
            {
                return;
            }
            List <Renderer> list = ent.m_listRenderer;

            if (list == null)
            {
                return;
            }

            for (int i = 0; i < list.Count; i++)
            {
                Renderer render = list[i];
                if (render == null)
                {
                    continue;
                }

                switch (info.type)
                {
                case eShaderType.eAlphaToHalf:
                    info.color.a = val < 0.5f ? 1 - val : 0.5f;
                    render.material.SetColor("_TintColor", info.color);
                    break;

                case eShaderType.eAlphaToHide:
                    if (val < 0.5f)
                    {
                        val = 0.5f;
                    }
                    info.color.a = 1 - val;
                    render.material.SetColor("_TintColor", info.color);
                    break;
                }



                //if (info.type == eShaderType.eColorToBlack)
                //{
                //    float rgb = ((1 - val) * 0.1f + 0.2f);
                //    render.material.SetColor("_Color",
                //    new Color(
                //        info.color.r * rgb,
                //        info.color.g * rgb,
                //        info.color.b * rgb,
                //        1.0f));
                //}
                //else if (info.type == eShaderType.eOutLine)
                //{
                //    render.material.SetFloat("_RimPower", val);
                //}
                //else if (info.type == eShaderType.eDissolve)
                //{
                //    render.material.SetFloat("_Tile", val);
                //    render.material.SetFloat("_Amount", val);
                //    render.material.SetFloat("_DissSize", val * 0.5f);
                //    render.material.SetTexture("_DissolveText", render.material.GetTexture("_MainTex"));
                //}
            }
        }