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

110 lines
2.1 KiB
C#

using UnityEngine;
[AddComponentMenu("Modifiers/Warps/FFD 4x4x4")]
public class MegaFFD4x4x4Warp : MegaFFDWarp
{
public override string WarpName()
{
return "FFD4x4x4";
}
public override int GridSize()
{
return 4;
}
public override Vector3 Map(int ii, Vector3 p)
{
Vector3 zero = Vector3.zero;
Vector3 vector = tm.MultiplyPoint3x4(p);
if (inVol)
{
for (int i = 0; i < 3; i++)
{
if (vector[i] < 0f - EPSILON || vector[i] > 1f + EPSILON)
{
return p;
}
}
}
Vector3 a = vector;
float magnitude = vector.magnitude;
float t = Mathf.Exp((0f - totaldecay) * Mathf.Abs(magnitude));
float num = 1f - vector.x;
float num2 = 1f - vector.y;
float num3 = 1f - vector.z;
float num4 = num2 * num2;
float num5 = vector.y * vector.y;
float num6 = num3 * num3;
float num7 = vector.z * vector.z;
for (int j = 0; j < 4; j++)
{
float num8;
switch (j)
{
case 0:
num8 = num * num * num;
break;
case 1:
num8 = 3f * vector.x * num * num;
break;
case 2:
num8 = 3f * vector.x * vector.x * num;
break;
default:
num8 = vector.x * vector.x * vector.x;
break;
}
for (int k = 0; k < 4; k++)
{
float num9;
switch (k)
{
case 0:
num9 = num8 * (num2 * num4);
break;
case 1:
num9 = num8 * (3f * vector.y * num4);
break;
case 2:
num9 = num8 * (3f * num5 * num2);
break;
default:
num9 = num8 * (num5 * vector.y);
break;
}
for (int l = 0; l < 4; l++)
{
float num10;
switch (l)
{
case 0:
num10 = num9 * (num3 * num6);
break;
case 1:
num10 = num9 * (3f * vector.z * num6);
break;
case 2:
num10 = num9 * (3f * num7 * num3);
break;
default:
num10 = num9 * (num7 * vector.z);
break;
}
int num11 = (j << 4) + (k << 2) + l;
zero.x += pt[num11].x * num10;
zero.y += pt[num11].y * num10;
zero.z += pt[num11].z * num10;
}
}
}
zero = Vector3.Lerp(a, zero, t);
return invtm.MultiplyPoint3x4(zero);
}
public override int GridIndex(int i, int j, int k)
{
return (i << 4) + (j << 2) + k;
}
}