bad-piggies-0.1.3-porting/Assets/Scripts/Assembly-CSharp/Wings.cs
2024-02-24 22:40:44 -05:00

93 lines
3 KiB
C#

using System.Collections.Generic;
using UnityEngine;
public class Wings : BasePart
{
public float liftConstant = 0.8f;
public float dragConstant = 0.8f;
private ResponseCurve liftCoefficients = new ResponseCurve();
public override bool ValidatePart()
{
if (!WPFMonoBehaviour.levelManager.RequireConnectedContraption)
{
return true;
}
List<BasePart> list = base.contraption.FindNeighbours(m_coordX, m_coordY);
int num = 0;
foreach (BasePart item in list)
{
if (item.IsPartOfChassis())
{
num++;
}
}
if (num < 1)
{
return false;
}
return true;
}
public override void ChangeVisualConnections()
{
bool flag = base.contraption.CanConnectTo(this, Direction.Up) || base.contraption.CanConnectTo(this, Direction.Left) || base.contraption.CanConnectTo(this, Direction.Right);
bool flag2 = base.contraption.CanConnectTo(this, Direction.Down) || base.contraption.CanConnectTo(this, Direction.Left) || base.contraption.CanConnectTo(this, Direction.Right);
base.transform.FindChild("TopFrameSprite").gameObject.active = flag;
base.transform.FindChild("BottomFrameSprite").gameObject.active = flag2 || !flag;
}
private void Start()
{
liftCoefficients.AddPoint(-180f, 0f);
liftCoefficients.AddPoint(-135f, -0.2f);
liftCoefficients.AddPoint(-90f, 0f);
liftCoefficients.AddPoint(-45f, -0.2f);
liftCoefficients.AddPoint(-10f, 0f);
liftCoefficients.AddPoint(10f, 1.5f);
liftCoefficients.AddPoint(15f, 1.75f);
liftCoefficients.AddPoint(20f, 0.8f);
liftCoefficients.AddPoint(25f, 0.1f);
liftCoefficients.AddPoint(45f, 0.2f);
liftCoefficients.AddPoint(90f, 0f);
liftCoefficients.AddPoint(135f, -0.2f);
liftCoefficients.AddPoint(180f, 0f);
}
public override void EnsureRigidbody()
{
Rigidbody rigidbody = base.gameObject.GetComponent<Rigidbody>();
if (rigidbody == null)
{
rigidbody = base.gameObject.AddComponent<Rigidbody>();
}
rigidbody.constraints = (RigidbodyConstraints)56;
rigidbody.mass = m_mass;
rigidbody.drag = 1f;
rigidbody.angularDrag = 0.2f;
rigidbody.interpolation = RigidbodyInterpolation.Interpolate;
}
public void FixedUpdate()
{
if ((bool)base.contraption && base.contraption.isRunning)
{
Vector3 vector = base.rigidbody.velocity - base.WindVelocity;
base.WindVelocity = Vector3.zero;
Vector3 right = base.transform.right;
float num = ((!IsFlipped()) ? 1f : (-1f));
float num2 = num * Mathf.Sign(Vector3.Cross(vector, right).z);
float x = num2 * Vector3.Angle(vector, right);
float num3 = liftCoefficients.Get(x);
Vector3 vector2 = Vector3.Cross(base.transform.forward, vector.normalized);
Vector3 vector3 = liftConstant * vector.sqrMagnitude * num3 * vector2;
vector3 = Vector3.ClampMagnitude(vector3, 100f);
base.rigidbody.AddForce(vector3, ForceMode.Force);
Debug.DrawRay(base.transform.position, 5f * right, Color.yellow);
Debug.DrawRay(base.transform.position, 0.25f * vector, Color.blue);
Debug.DrawRay(base.transform.position, 0.1f * vector3);
}
}
}