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

301 lines
5.9 KiB
C#

using UnityEngine;
[AddComponentMenu("Modifiers/Melt")]
public class MegaMelt : MegaModifier
{
public float Amount;
public float Spread = 19f;
public MegaMeltMat MaterialType;
public float Solidity = 1f;
public MegaAxis axis;
public bool FlipAxis;
private float zba;
public float flatness;
private float size;
private float bulger;
private float ybr;
private float zbr;
private float visvaluea;
private int confiner;
private int vistypea;
private float cx;
private float cy;
private float cz;
private float xsize;
private float ysize;
private float zsize;
private float ooxsize;
private float ooysize;
private float oozsize;
public override string ModName()
{
return "Melt";
}
public override string GetHelpURL()
{
return "?page_id=225";
}
private float hypot(float x, float y)
{
return Mathf.Sqrt(x * x + y * y);
}
public override Vector3 Map(int i, Vector3 p)
{
float num = 0f;
float num2 = 0f;
float num3 = 0f;
p = tm.MultiplyPoint3x4(p);
float num4 = p.x;
float num5 = p.y;
float num6 = p.z;
float num7 = num4 - cx;
float num8 = num5 - cy;
float num9 = num6 - cz;
if (num7 == 0f && num8 == 0f && num9 == 0f)
{
num7 = (num8 = (num9 = 1f));
}
if (num4 == 0f && num5 == 0f && num6 == 0f)
{
num4 = (num5 = (num6 = 1f));
}
float num10 = Mathf.Sqrt(num7 * num7 + num8 * num8 + num9 * num9);
float num11 = size / num10;
if (axis == MegaAxis.Y)
{
float num12 = num7 + Mathf.Sign(num7) * (Mathf.Abs(num7 * num11) * (bulger * ybr));
float num13 = num8 + Mathf.Sign(num8) * (Mathf.Abs(num8 * num11) * (bulger * ybr));
num4 = num12 + cx;
num5 = num13 + cy;
}
if (axis == MegaAxis.Z)
{
float num12 = num7 + Mathf.Sign(num7) * (Mathf.Abs(num7 * num11) * (bulger * ybr));
float num13 = num9 + Mathf.Sign(num9) * (Mathf.Abs(num9 * num11) * (bulger * ybr));
num4 = num12 + cx;
num6 = num13 + cz;
}
if (axis == MegaAxis.X)
{
float num12 = num9 + Mathf.Sign(num9) * (Mathf.Abs(num9 * num11) * (bulger * ybr));
float num13 = num8 + Mathf.Sign(num8) * (Mathf.Abs(num8 * num11) * (bulger * ybr));
num6 = num12 + cz;
num5 = num13 + cy;
}
if ((axis != MegaAxis.Y || !(p.z < bbox.min.z + zbr)) && (axis != MegaAxis.Z || !(p.y < bbox.min.y + zbr)) && (axis != MegaAxis.X || !(p.x < bbox.min.x + zbr)))
{
if (axis == MegaAxis.Y)
{
num3 = hypot(bbox.max.x - cx, bbox.max.y - cy);
}
if (axis == MegaAxis.Z)
{
num3 = hypot(bbox.max.x - cx, bbox.max.z - cz);
}
if (axis == MegaAxis.X)
{
num3 = hypot(bbox.max.z - cz, bbox.max.y - cy);
}
if (axis == MegaAxis.Y)
{
num = hypot(num4 - cx, num5 - cy);
num2 = num3 - hypot(num4 - cx, num5 - cy);
}
if (axis == MegaAxis.Z)
{
num = hypot(num4 - cx, num6 - cz);
num2 = num3 - hypot(num4 - cx, num6 - cz);
}
if (axis == MegaAxis.X)
{
num = hypot(num6 - cz, num5 - cy);
num2 = num3 - hypot(num6 - cz, num5 - cy);
}
if (num2 < 0f)
{
num2 = 0f;
}
num += num2 / visvaluea;
if (axis == MegaAxis.Y)
{
if (FlipAxis)
{
float num14 = bbox.min.z + (num6 - bbox.min.z) * oozsize * flatness;
num6 -= num * bulger;
if (num6 <= num14)
{
num6 = num14;
}
if (num6 <= num14 + zbr)
{
num6 = num14 + zbr;
}
}
else
{
float num15 = bbox.max.z - (bbox.max.z - num6) * oozsize * flatness;
num6 += num * bulger;
if (num6 >= num15)
{
num6 = num15;
}
if (num6 >= num15 + zbr)
{
num6 = num15 + zbr;
}
}
}
if (axis == MegaAxis.Z)
{
if (!FlipAxis)
{
float num16 = bbox.min.y + (num5 - bbox.min.y) * ooysize * flatness;
num5 -= num * bulger;
if (num5 <= num16)
{
num5 = num16;
}
if (num5 <= num16 + zbr)
{
num5 = num16 + zbr;
}
}
else
{
float num17 = bbox.max.y - (bbox.max.y - num5) * ooysize * flatness;
num5 += num * bulger;
if (num5 >= num17)
{
num5 = num17;
}
if (num5 >= num17 + zbr)
{
num5 = num17 + zbr;
}
}
}
if (axis == MegaAxis.X)
{
if (!FlipAxis)
{
float num18 = bbox.min.x + (num4 - bbox.min.x) * ooxsize * flatness;
num4 -= num * bulger;
if (num4 <= num18)
{
num4 = num18;
}
if (num4 <= num18 + zbr)
{
num4 = num18 + zbr;
}
}
else
{
float num19 = bbox.max.x - (bbox.max.x - num4) * ooxsize * flatness;
num4 += num * bulger;
if (num4 >= num19)
{
num4 = num19;
}
if (num4 >= num19 + zbr)
{
num4 = num19 + zbr;
}
}
}
}
p.x = num4;
p.y = num5;
p.z = num6;
p = invtm.MultiplyPoint3x4(p);
return p;
}
public override void ModStart(MegaModifiers mc)
{
cx = bbox.center.x;
cy = bbox.center.y;
cz = bbox.center.z;
xsize = bbox.max.x - bbox.min.x;
ysize = bbox.max.y - bbox.min.y;
zsize = bbox.max.z - bbox.min.z;
size = ((!(xsize > ysize)) ? ysize : xsize);
size = ((!(zsize > size)) ? size : zsize);
size /= 2f;
}
public override bool ModLateUpdate(MegaModContext mc)
{
return Prepare(mc);
}
public override bool Prepare(MegaModContext mc)
{
cx = bbox.center.x;
cy = bbox.center.y;
cz = bbox.center.z;
xsize = bbox.max.x - bbox.min.x;
ysize = bbox.max.y - bbox.min.y;
zsize = bbox.max.z - bbox.min.z;
ooxsize = 1f / xsize;
ooysize = 1f / ysize;
oozsize = 1f / zsize;
size = ((!(xsize > ysize)) ? ysize : xsize);
size = ((!(zsize > size)) ? size : zsize);
size /= 2f;
switch (MaterialType)
{
case MegaMeltMat.Ice:
visvaluea = 2f;
break;
case MegaMeltMat.Glass:
visvaluea = 12f;
break;
case MegaMeltMat.Jelly:
visvaluea = 0.4f;
break;
case MegaMeltMat.Plastic:
visvaluea = 0.7f;
break;
case MegaMeltMat.Custom:
visvaluea = Solidity;
break;
}
if (Amount < 0f)
{
Amount = 0f;
}
ybr = Spread / 100f;
zbr = zba / 10f;
bulger = Amount / 100f;
return true;
}
}