Files
BH3/Assets/Scripts/Assembly-CSharp/MoleMole/MonoLightTriangleShadow.cs
2025-08-13 09:26:42 +08:00

115 lines
2.1 KiB
C#

using UnityEngine;
namespace MoleMole
{
public class MonoLightTriangleShadow : MonoLightShadow
{
public float zlen = 1f;
public float pXlen = 1f;
public float nXlen = 1f;
private Mesh meshUp;
private Mesh meshDown;
private void validateInput()
{
if (zlen < 0f)
{
zlen = 0f - zlen;
}
if (pXlen < 0f)
{
pXlen = 0f - pXlen;
}
if (nXlen < 0f)
{
nXlen = 0f - nXlen;
}
}
private void UpdateMesh()
{
if (meshUp == null)
{
meshUp = new Mesh();
}
if (meshDown == null)
{
meshDown = new Mesh();
}
validateInput();
meshUp.vertices = new Vector3[3]
{
new Vector3(pXlen, 0f, 0f),
new Vector3(0f, 0f, zlen),
new Vector3(0f - nXlen, 0f, 0f)
};
meshUp.triangles = new int[3] { 0, 1, 2 };
meshUp.normals = new Vector3[3]
{
Vector3.up,
Vector3.up,
Vector3.up
};
meshDown.vertices = new Vector3[3]
{
new Vector3(pXlen, 0f, 0f),
new Vector3(0f, 0f, zlen),
new Vector3(0f - nXlen, 0f, 0f)
};
meshDown.triangles = new int[3] { 0, 2, 1 };
meshDown.normals = new Vector3[3]
{
Vector3.down,
Vector3.down,
Vector3.down
};
}
public override float Evaluate(Vector3 pos)
{
Vector3 vector = Matrix4x4.TRS(base.transform.position, base.transform.rotation, Vector3.one).inverse.MultiplyPoint3x4(pos);
validateInput();
float num = 0f;
float num2 = 0f;
if (vector.z < 0f)
{
return 0f;
}
num2 = (zlen - 2f * vector.z) / zlen;
if (vector.x >= 0f)
{
num = (pXlen * vector.z + vector.x * zlen) / (pXlen * zlen);
if (num > 1f)
{
return 0f;
}
}
else
{
num = (nXlen * vector.z - vector.x * zlen) / (nXlen * zlen);
if (num > 1f)
{
return 0f;
}
}
return attenuateCurve.Evaluate(Mathf.Max(num, num2));
}
private void OnDrawGizmosSelected()
{
Color color = new Color(0.5f, 0.5f, 0.5f);
Matrix4x4 matrix = Matrix4x4.TRS(base.transform.position, base.transform.rotation, Vector3.one);
Gizmos.matrix = matrix;
UpdateMesh();
color.a = 0.5f;
Gizmos.color = color;
Gizmos.DrawMesh(meshUp);
Gizmos.DrawMesh(meshDown);
}
}
}