c1_unity/Assets/Scripts/Component/UI/UIEffect/UIDynamicBrightEffect.cs
2023-04-03 11:04:31 +08:00

85 lines
2.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
namespace BF
{
[RequireComponent(typeof(MaskableGraphic))]
[DisallowMultipleComponent]
[ExecuteInEditMode]
public class UIDynamicBrightEffect : BaseMeshEffect
{
[SerializeField]
[Range(0, 3)]
float brightness = 1.0f;
public float Brightness
{
get { return brightness; }
set { brightness = value; SetDirty(); }
}
public bool Brighting { get { return Math.Abs(brightness - 1.0f) > 0 && IsActive(); } }
public Material effectmat;
static List<UIVertex> Vertexs = new List<UIVertex>();
const string SHADER_NAME = "BF/UI/UIDynamicBright";
protected override void OnEnable()
{
if (effectmat == null)
{
var shader = Shader.Find(SHADER_NAME);
effectmat = new Material(shader);
}
graphic.material = effectmat;
}
protected override void OnDisable()
{
graphic.material = BFMain.Instance.RenderMgr.UIDefaultMat;
}
public override void ModifyMesh(VertexHelper vh)
{
if (!IsActive())
{
return;
}
vh.GetUIVertexStream(Vertexs);
vh.Clear();
for (int i = 0; i < Vertexs.Count; i++)
{
UIVertex vertex = new UIVertex();
vertex.color = Vertexs[i].color;
vertex.position = Vertexs[i].position;
vertex.uv0 = Vertexs[i].uv0;
vertex.uv2 = new Vector2(brightness, 0f);
Vertexs[i] = vertex;
}
vh.AddUIVertexTriangleStream(Vertexs);
Vertexs.Clear();
}
public void SetMarterial(Material material)
{
effectmat = material;
}
public void SetBright(float brightness = 1.25f)
{
Brightness = Math.Max(0f, brightness);
}
void SetDirty()
{
if (graphic)
{
graphic.SetVerticesDirty();
}
}
}
}