Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/ARTNGAME/Skymaster/AeroplaneControlSurfaceAnimatorSM.cs
2026-03-04 10:03:45 +08:00

98 lines
2.5 KiB
C#

using System;
using UnityEngine;
namespace ARTNGAME.Skymaster
{
public class AeroplaneControlSurfaceAnimatorSM : MonoBehaviour
{
[Serializable]
public class ControlSurface
{
public enum Type
{
Aileron = 0,
Elevator = 1,
Rudder = 2,
RuddervatorNegative = 3,
RuddervatorPositive = 4
}
public Transform transform;
public float amount;
public Type type;
[HideInInspector]
public Quaternion originalLocalRotation;
}
[SerializeField]
private float m_Smoothing = 5f;
[SerializeField]
private ControlSurface[] m_ControlSurfaces;
private AeroplaneControllerSM m_Plane;
private void Start()
{
m_Plane = GetComponent<AeroplaneControllerSM>();
ControlSurface[] controlSurfaces = m_ControlSurfaces;
foreach (ControlSurface obj in controlSurfaces)
{
obj.originalLocalRotation = obj.transform.localRotation;
}
}
private void Update()
{
ControlSurface[] controlSurfaces = m_ControlSurfaces;
foreach (ControlSurface controlSurface in controlSurfaces)
{
switch (controlSurface.type)
{
case ControlSurface.Type.Aileron:
{
Quaternion rotation5 = Quaternion.Euler(controlSurface.amount * m_Plane.RollInput, 0f, 0f);
RotateSurface(controlSurface, rotation5);
break;
}
case ControlSurface.Type.Elevator:
{
Quaternion rotation4 = Quaternion.Euler(controlSurface.amount * (0f - m_Plane.PitchInput), 0f, 0f);
RotateSurface(controlSurface, rotation4);
break;
}
case ControlSurface.Type.Rudder:
{
Quaternion rotation3 = Quaternion.Euler(0f, controlSurface.amount * m_Plane.YawInput, 0f);
RotateSurface(controlSurface, rotation3);
break;
}
case ControlSurface.Type.RuddervatorPositive:
{
float num2 = m_Plane.YawInput + m_Plane.PitchInput;
Quaternion rotation2 = Quaternion.Euler(0f, 0f, controlSurface.amount * num2);
RotateSurface(controlSurface, rotation2);
break;
}
case ControlSurface.Type.RuddervatorNegative:
{
float num = m_Plane.YawInput - m_Plane.PitchInput;
Quaternion rotation = Quaternion.Euler(0f, 0f, controlSurface.amount * num);
RotateSurface(controlSurface, rotation);
break;
}
}
}
}
private void RotateSurface(ControlSurface surface, Quaternion rotation)
{
Quaternion b = surface.originalLocalRotation * rotation;
surface.transform.localRotation = Quaternion.Slerp(surface.transform.localRotation, b, m_Smoothing * Time.deltaTime);
}
}
}