This commit is contained in:
2026-07-09 21:33:33 +02:00
commit 84a2a365f3
2364 changed files with 950134 additions and 0 deletions
@@ -0,0 +1,100 @@
using System.Linq;
using Sirenix.OdinInspector;
using UnityEngine;
namespace VOID.Generic.AreaOfEffect
{
[TypeRegistryItem("Cone")]
public class ConeAreaOfEffect : AbstractAreaOfEffect
{
[SerializeField, Required, MinValue(0.5), MaxValue(10)]
private float length;
[SerializeField, Required, MinValue(10), MaxValue(350)]
private float degree;
public override Mesh GetMesh()
{
var mesh = GenerateConeMesh();
mesh.vertices = mesh.vertices.Select(vertex => Vector3.Scale(vertex, new Vector3(length, 1, length))).ToArray();
return mesh;
}
public override Collider AddCollider(GameObject gameObject)
{
var collider = gameObject.AddComponent<MeshCollider>();
collider.sharedMesh = GetMesh();
collider.convex = true;
collider.isTrigger = true;
return collider;
}
private Mesh GenerateConeMesh()
{
var sections = Mathf.FloorToInt(degree / 10);
var mesh = new Mesh();
var vertices = new Vector3[4 + sections * 2];
var uv = new Vector2[vertices.Length];
var triangles = new int[(4 + sections * 4) * 3];
var currentAngle = -sections * 10 / 2;
var vertexIndex = 0;
var triangleIndex = 0;
vertices[0] = new Vector3(0,-0.5f,0);
vertices[1] = new Vector3(0,0.5f,0);
vertices[2] = new Vector3(Mathf.Sin(Mathf.Deg2Rad * currentAngle), -0.5f, Mathf.Cos(Mathf.Deg2Rad * currentAngle));
vertices[3] = new Vector3(Mathf.Sin(Mathf.Deg2Rad * currentAngle), 0.5f, Mathf.Cos(Mathf.Deg2Rad * currentAngle));
triangles[0] = 0;
triangles[1] = 3;
triangles[2] = 1;
triangles[3] = 0;
triangles[4] = 2;
triangles[5] = 3;
for (var i = 0; i < sections; i++)
{
vertexIndex = 4 + i*2;
triangleIndex = (2 + i*4) * 3;
currentAngle += 10;
vertices[vertexIndex+0] = new Vector3(Mathf.Sin(Mathf.Deg2Rad * currentAngle), -0.5f, Mathf.Cos(Mathf.Deg2Rad * currentAngle));
vertices[vertexIndex+1] = new Vector3(Mathf.Sin(Mathf.Deg2Rad * currentAngle), 0.5f, Mathf.Cos(Mathf.Deg2Rad * currentAngle));
triangles[triangleIndex+0] = 0;
triangles[triangleIndex+1] = vertexIndex;
triangles[triangleIndex+2] = vertexIndex-2;
triangles[triangleIndex+3] = 1;
triangles[triangleIndex+4] = vertexIndex-1;
triangles[triangleIndex+5] = vertexIndex+1;
triangles[triangleIndex+6] = vertexIndex-2;
triangles[triangleIndex+7] = vertexIndex;
triangles[triangleIndex+8] = vertexIndex-1;
triangles[triangleIndex+9] = vertexIndex;
triangles[triangleIndex+10] = vertexIndex+1;
triangles[triangleIndex+11] = vertexIndex-1;
}
triangleIndex += 12;
triangles[triangleIndex+0] = 0;
triangles[triangleIndex+1] = vertexIndex+1;
triangles[triangleIndex+2] = vertexIndex;
triangles[triangleIndex+3] = 0;
triangles[triangleIndex+4] = 1;
triangles[triangleIndex+5] = vertexIndex+1;
mesh.vertices = vertices;
mesh.uv = uv;
mesh.triangles = triangles;
return mesh;
}
}
}