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

70 lines
2.8 KiB
C#

using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class MegaTrainFollow : MonoBehaviour
{
public MegaShape path;
public int curve;
public List<MegaCarriage> carriages = new List<MegaCarriage>();
public float distance;
public float speed;
public bool showrays;
private void Update()
{
distance += speed * Time.deltaTime;
if (!path)
{
return;
}
float num = distance;
MegaSpline megaSpline = path.splines[curve];
for (int i = 0; i < carriages.Count; i++)
{
float num2 = num / megaSpline.length;
MegaCarriage megaCarriage = carriages[i];
float twist = 0f;
float twist2 = 0f;
megaCarriage.b1 = path.transform.TransformPoint(path.InterpCurve3D(curve, num2, true, ref twist));
float num3 = num - megaCarriage.length;
float num4 = num3 / megaSpline.length;
megaCarriage.b2 = path.transform.TransformPoint(path.InterpCurve3D(curve, num4, true, ref twist2));
megaCarriage.cp = (megaCarriage.b1 + megaCarriage.b2) * 0.5f;
if ((bool)megaCarriage.carriage)
{
megaCarriage.carriage.transform.position = megaCarriage.cp + megaCarriage.carriageOffset;
Quaternion quaternion = Quaternion.Euler(megaCarriage.rot);
Quaternion quaternion2 = Quaternion.LookRotation(megaCarriage.b1 - megaCarriage.b2);
megaCarriage.carriage.transform.rotation = quaternion2 * quaternion;
}
if ((bool)megaCarriage.bogey1 && (bool)megaCarriage.carriage)
{
megaCarriage.bogey1.transform.position = megaCarriage.carriage.transform.localToWorldMatrix.MultiplyPoint(megaCarriage.bogey1Offset);
Quaternion quaternion3 = Quaternion.Euler(megaCarriage.bogey1Rot);
float num5 = num2 - megaCarriage.bogeyoff / megaSpline.length;
megaCarriage.bp1 = path.transform.TransformPoint(path.InterpCurve3D(curve, num5, true));
Vector3 vector = path.transform.TransformPoint(path.InterpCurve3D(curve, num5 + 0.0001f, true));
Quaternion quaternion4 = Quaternion.LookRotation(vector - megaCarriage.bp1);
megaCarriage.bogey1.transform.rotation = quaternion4 * quaternion3;
}
if ((bool)megaCarriage.bogey2 && (bool)megaCarriage.carriage)
{
megaCarriage.bogey2.transform.position = megaCarriage.carriage.transform.localToWorldMatrix.MultiplyPoint(megaCarriage.bogey2Offset);
Quaternion quaternion5 = Quaternion.Euler(megaCarriage.bogey2Rot);
float num6 = num4 + megaCarriage.bogeyoff / megaSpline.length;
megaCarriage.bp2 = path.transform.TransformPoint(path.InterpCurve3D(curve, num6, true, ref twist));
Vector3 vector2 = path.transform.TransformPoint(path.InterpCurve3D(curve, num6 + 0.0001f, true));
Quaternion quaternion6 = Quaternion.LookRotation(vector2 - megaCarriage.bp2);
megaCarriage.bogey2.transform.rotation = quaternion6 * quaternion5;
}
num -= megaCarriage.length;
}
}
}