Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/CharacterCapsule.cs
2026-02-21 16:45:37 +08:00

173 lines
4.6 KiB
C#

using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class CharacterCapsule : MonoBehaviour
{
private CharacterController _character;
private MeshFilter _meshFilter;
private float _height;
private float _radius;
[Range(4f, 32f)]
public int SubdivisionsU;
[Range(4f, 32f)]
public int SubdivisionsV;
private int _subdivisionU;
private int _subdivisionV;
private Vector3[] _vertices;
private int[] _triangles;
private void Update()
{
if (_character == null)
{
_character = GetComponentInParent<CharacterController>();
if (_character == null)
{
return;
}
}
if (_height == _character.height && _radius == _character.radius && _subdivisionU == SubdivisionsU && _subdivisionV == SubdivisionsV)
{
return;
}
_height = _character.height;
_radius = _character.radius;
_subdivisionU = SubdivisionsU;
_subdivisionV = SubdivisionsV;
List<Vector3> list = new List<Vector3>();
Vector3 vector = new Vector3(1f, 0f, 0f);
Vector3 vector2 = new Vector3(0f, _height / 2f - _radius, 0f);
Vector3 vector3 = new Vector3(0f, _radius - _height / 2f, 0f);
list.Add(new Vector3(0f, _height / 2f, 0f));
for (int num = SubdivisionsU - 1; num >= 0; num--)
{
float num2 = (float)num / (float)SubdivisionsU;
for (int i = 0; i < SubdivisionsV; i++)
{
float num3 = (float)i / (float)SubdivisionsV;
Quaternion quaternion = Quaternion.Euler(0f, num3 * 360f, num2 * 90f);
Vector3 vector4 = quaternion * vector;
vector4 *= _radius;
Vector3 item = vector4 + vector2;
list.Add(item);
}
}
for (int j = 0; j < SubdivisionsU; j++)
{
float num4 = (float)j / (float)SubdivisionsU;
for (int k = 0; k < SubdivisionsV; k++)
{
float num5 = (float)k / (float)SubdivisionsV;
Quaternion quaternion2 = Quaternion.Euler(0f, num5 * 360f + 180f, num4 * 90f);
Vector3 vector5 = quaternion2 * vector;
vector5 *= _radius;
Vector3 item2 = vector3 - vector5;
list.Add(item2);
}
}
list.Add(new Vector3(0f, (0f - _height) / 2f, 0f));
List<int> list2 = new List<int>();
int item3;
for (int l = 0; l < SubdivisionsV; l++)
{
item3 = 0;
list2.Add(item3);
list2.Add(l);
list2.Add(l + 1);
}
list2.Add(0);
list2.Add(SubdivisionsV);
list2.Add(1);
int num6;
for (int m = 0; m < SubdivisionsU - 1; m++)
{
num6 = m * SubdivisionsV + 1;
for (int n = 0; n < SubdivisionsV - 1; n++)
{
item3 = num6 + n;
list2.Add(item3);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + 1);
list2.Add(item3 + 1);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + SubdivisionsV + 1);
}
item3 = num6 + SubdivisionsV - 1;
list2.Add(item3);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + 1 - SubdivisionsV);
list2.Add(item3 + 1 - SubdivisionsV);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + 1);
}
num6 = (SubdivisionsU - 1) * SubdivisionsV + 1;
for (int num7 = 0; num7 < SubdivisionsV - 1; num7++)
{
item3 = num6 + num7;
list2.Add(item3);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + 1);
list2.Add(item3 + 1);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + SubdivisionsV + 1);
}
item3 = num6 + SubdivisionsV - 1;
list2.Add(item3);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + 1 - SubdivisionsV);
list2.Add(item3 + 1 - SubdivisionsV);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + 1);
for (int num8 = 0; num8 < SubdivisionsU - 1; num8++)
{
num6 = num8 * SubdivisionsV + SubdivisionsU * SubdivisionsV + 1;
for (int num9 = 0; num9 < SubdivisionsV - 1; num9++)
{
item3 = num6 + num9;
list2.Add(item3);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + 1);
list2.Add(item3 + 1);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + SubdivisionsV + 1);
}
item3 = num6 + SubdivisionsV - 1;
list2.Add(item3);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + 1 - SubdivisionsV);
list2.Add(item3 + 1 - SubdivisionsV);
list2.Add(item3 + SubdivisionsV);
list2.Add(item3 + 1);
}
int num10 = list.Count - 1;
int num11 = num10 - SubdivisionsV;
for (int num12 = 0; num12 < SubdivisionsV; num12++)
{
item3 = 0;
list2.Add(num10);
list2.Add(num11 + num12 + 1);
list2.Add(num11 + num12);
}
list2.Add(num10);
list2.Add(num11);
list2.Add(num10 - 1);
_vertices = list.ToArray();
_triangles = list2.ToArray();
_meshFilter = base.gameObject.GetComponent<MeshFilter>();
_meshFilter.mesh = new Mesh();
_meshFilter.sharedMesh.vertices = _vertices;
_meshFilter.sharedMesh.triangles = _triangles;
_meshFilter.sharedMesh.RecalculateNormals();
}
}