85 lines
2.2 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
} |