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

217 lines
5.7 KiB
C#

using System;
using UnityEngine;
[ExecuteInEditMode]
public class MegaWarp : MonoBehaviour
{
public float Width = 1f;
public float Height = 1f;
public float Length = 1f;
public float Decay;
public bool Enabled = true;
public bool DisplayGizmo = true;
public Color GizCol1 = Color.yellow;
public Color GizCol2 = Color.green;
[NonSerialized]
public Matrix4x4 tm = default(Matrix4x4);
[NonSerialized]
public Matrix4x4 invtm = default(Matrix4x4);
private Vector3 Offset = Vector3.zero;
private int steps = 50;
[NonSerialized]
public float totaldecay;
[HideInInspector]
public Vector3[] corners = new Vector3[8];
public static Color gCol1;
public static Color gCol2;
public virtual string WarpName()
{
return "None";
}
public virtual string GetHelpURL()
{
return "Warp.htm";
}
public virtual Vector3 Map(int i, Vector3 p)
{
return p;
}
public virtual bool Prepare(float decay)
{
return true;
}
public virtual string GetIcon()
{
return "MegaWave icon.png";
}
[ContextMenu("Help")]
public void Help()
{
Application.OpenURL("http://www.west-racing.com/mf/" + GetHelpURL());
}
public virtual void SetAxis(Matrix4x4 tmAxis)
{
Matrix4x4 inverse = tmAxis.inverse;
tm = tmAxis * tm;
invtm *= inverse;
}
public void DrawEdge(Vector3 p1, Vector3 p2)
{
Vector3 vector = Map(-1, p1);
Vector3 zero = Vector3.zero;
for (int i = 1; i <= steps; i++)
{
zero = p1 + (p2 - p1) * ((float)i / (float)steps);
zero = Map(-1, zero);
if ((i & 4) == 0)
{
Gizmos.color = gCol1;
}
else
{
Gizmos.color = gCol2;
}
Gizmos.DrawLine(vector, zero);
vector = zero;
}
Gizmos.color = gCol1;
}
public void DrawEdgeCol(Vector3 p1, Vector3 p2)
{
Vector3 vector = Map(-1, p1);
Vector3 zero = Vector3.zero;
for (int i = 1; i <= steps; i++)
{
zero = p1 + (p2 - p1) * ((float)i / (float)steps);
zero = Map(-1, zero);
Gizmos.DrawLine(vector, zero);
vector = zero;
}
}
public void SetGizCols(float a)
{
gCol1 = GizCol1;
gCol1.a *= a;
gCol2 = GizCol2;
gCol2.a *= a;
}
public virtual void DrawGizmo(Color col)
{
SetGizCols(col.a);
tm = Matrix4x4.identity;
invtm = tm.inverse;
if (Prepare(0f))
{
tm *= base.transform.localToWorldMatrix;
invtm = tm.inverse;
Vector3 vector = new Vector3((0f - Width) * 0.5f, 0f, (0f - Length) * 0.5f);
Vector3 vector2 = new Vector3(Width * 0.5f, Height, Length * 0.5f);
Gizmos.matrix = base.transform.localToWorldMatrix;
corners[0] = new Vector3(vector.x, vector.y, vector.z);
corners[1] = new Vector3(vector.x, vector2.y, vector.z);
corners[2] = new Vector3(vector2.x, vector2.y, vector.z);
corners[3] = new Vector3(vector2.x, vector.y, vector.z);
corners[4] = new Vector3(vector.x, vector.y, vector2.z);
corners[5] = new Vector3(vector.x, vector2.y, vector2.z);
corners[6] = new Vector3(vector2.x, vector2.y, vector2.z);
corners[7] = new Vector3(vector2.x, vector.y, vector2.z);
DrawEdge(corners[0], corners[1]);
DrawEdge(corners[1], corners[2]);
DrawEdge(corners[2], corners[3]);
DrawEdge(corners[3], corners[0]);
DrawEdge(corners[4], corners[5]);
DrawEdge(corners[5], corners[6]);
DrawEdge(corners[6], corners[7]);
DrawEdge(corners[7], corners[4]);
DrawEdge(corners[0], corners[4]);
DrawEdge(corners[1], corners[5]);
DrawEdge(corners[2], corners[6]);
DrawEdge(corners[3], corners[7]);
ExtraGizmo();
}
}
public virtual void ExtraGizmo()
{
}
public void DrawFromTo(MegaAxis axis, float from, float to)
{
Vector3 vector = new Vector3((0f - Width) * 0.5f, 0f, (0f - Length) * 0.5f);
Vector3 vector2 = new Vector3(Width * 0.5f, Height, Length * 0.5f);
switch (axis)
{
case MegaAxis.X:
corners[0] = new Vector3(0f - from, vector.y, vector.z);
corners[1] = new Vector3(0f - from, vector2.y, vector.z);
corners[2] = new Vector3(0f - from, vector2.y, vector2.z);
corners[3] = new Vector3(0f - from, vector.y, vector2.z);
corners[4] = new Vector3(0f - to, vector.y, vector.z);
corners[5] = new Vector3(0f - to, vector2.y, vector.z);
corners[6] = new Vector3(0f - to, vector2.y, vector2.z);
corners[7] = new Vector3(0f - to, vector.y, vector2.z);
break;
case MegaAxis.Y:
corners[0] = new Vector3(vector.x, vector.y, 0f - from);
corners[1] = new Vector3(vector.x, vector2.y, 0f - from);
corners[2] = new Vector3(vector2.x, vector2.y, 0f - from);
corners[3] = new Vector3(vector2.x, vector.y, 0f - from);
corners[4] = new Vector3(vector.x, vector.y, 0f - to);
corners[5] = new Vector3(vector.x, vector2.y, 0f - to);
corners[6] = new Vector3(vector2.x, vector2.y, 0f - to);
corners[7] = new Vector3(vector2.x, vector.y, 0f - to);
break;
case MegaAxis.Z:
corners[0] = new Vector3(vector.x, from, vector.z);
corners[1] = new Vector3(vector.x, from, vector2.z);
corners[2] = new Vector3(vector2.x, from, vector2.z);
corners[3] = new Vector3(vector2.x, from, vector.z);
corners[4] = new Vector3(vector.x, to, vector.z);
corners[5] = new Vector3(vector.x, to, vector2.z);
corners[6] = new Vector3(vector2.x, to, vector2.z);
corners[7] = new Vector3(vector2.x, to, vector.z);
break;
}
Color red = Color.red;
red.a = gCol1.a;
Gizmos.color = red;
DrawEdgeCol(corners[0] - Offset, corners[1] - Offset);
DrawEdgeCol(corners[1] - Offset, corners[2] - Offset);
DrawEdgeCol(corners[2] - Offset, corners[3] - Offset);
DrawEdgeCol(corners[3] - Offset, corners[0] - Offset);
red = Color.green;
red.a = gCol1.a;
Gizmos.color = red;
DrawEdgeCol(corners[4] - Offset, corners[5] - Offset);
DrawEdgeCol(corners[5] - Offset, corners[6] - Offset);
DrawEdgeCol(corners[6] - Offset, corners[7] - Offset);
DrawEdgeCol(corners[7] - Offset, corners[4] - Offset);
}
}