Decompiled source of Hover v0.13.7

Hover.dll

Decompiled an hour ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security.Cryptography;
using System.Text;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using Hover.NetcodePatcher;
using LethalCompanyInputUtils.Api;
using LethalLevelLoader;
using Microsoft.CodeAnalysis;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.InputSystem;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Hover")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Hover")]
[assembly: AssemblyTitle("Hover")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace Hover
{
	public class CruiserParts : MonoBehaviour
	{
		public List<Collider> keepDisabled = new List<Collider>();

		public List<InteractTrigger> keepUninteractable = new List<InteractTrigger>();

		private InteractTrigger lastReported;

		private void Enforce()
		{
			foreach (Collider item in keepDisabled)
			{
				if ((Object)(object)item != (Object)null && item.enabled)
				{
					item.enabled = false;
				}
			}
			foreach (InteractTrigger item2 in keepUninteractable)
			{
				if ((Object)(object)item2 != (Object)null)
				{
					item2.interactable = false;
				}
			}
		}

		private void FixedUpdate()
		{
			Enforce();
		}

		private void LateUpdate()
		{
			Enforce();
		}

		private void Update()
		{
			InteractTrigger val = GameNetworkManager.Instance?.localPlayerController?.hoveringOverTrigger;
			if (!((Object)(object)val == (Object)null) && !((Object)(object)val == (Object)(object)lastReported) && keepUninteractable.Contains(val))
			{
				lastReported = val;
				Plugin.Log.LogWarning((object)$"Player looks at leftover Cruiser trigger '{((Object)val).name}' (tip '{val.hoverTip}', layer {((Component)val).gameObject.layer})");
			}
		}
	}
	public class HoverDeck : MonoBehaviour
	{
		private const int Front = 0;

		private const int Rear = 1;

		private VehicleController vc;

		private PlaceableObjectsSurface[] slots = (PlaceableObjectsSurface[])(object)new PlaceableObjectsSurface[2];

		private InteractTrigger[] seats = (InteractTrigger[])(object)new InteractTrigger[2];

		private BoxCollider[] seatBoxes = (BoxCollider[])(object)new BoxCollider[2];

		private BoxCollider[] hull;

		private bool wasSeated;

		public InteractTrigger FrontSeat => seats[0];

		public PlayerControllerB FrontOccupant
		{
			get
			{
				if (!((Object)(object)seats[0] != (Object)null) || !((Object)(object)seats[0].lockedPlayer != (Object)null))
				{
					return null;
				}
				return ((Component)seats[0].lockedPlayer).GetComponent<PlayerControllerB>();
			}
		}

		private void Awake()
		{
			vc = ((Component)this).GetComponent<VehicleController>();
			PlaceableObjectsSurface[] componentsInChildren = ((Component)this).GetComponentsInChildren<PlaceableObjectsSurface>(true);
			foreach (PlaceableObjectsSurface val in componentsInChildren)
			{
				if (((Object)val).name == "LeftShelfPlacementCollider")
				{
					slots[0] = val;
				}
				if (((Object)val).name == "RightShelfPlacementCollider")
				{
					slots[1] = val;
				}
			}
			seats[0] = Array.Find(((Component)this).GetComponentsInChildren<InteractTrigger>(true), (InteractTrigger t) => ((Object)t).name == "FrontSeatTrigger");
			seats[1] = vc.passengerSeatTrigger;
			for (int num = 0; num < 2; num++)
			{
				if ((Object)(object)seats[num] != (Object)null)
				{
					seatBoxes[num] = Array.Find(((Component)seats[num]).GetComponents<BoxCollider>(), (BoxCollider b) => b.center == Vector3.zero);
				}
			}
		}

		internal bool IsSeated(PlayerControllerB p)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)p != (Object)null && !p.isPlayerDead && p.inSpecialInteractAnimation)
			{
				return Vector3.Distance(((Component)p).transform.position, ((Component)this).transform.position) < 4f;
			}
			return false;
		}

		private bool HasPlayer(int slot)
		{
			return IsSeated((slot == 0) ? FrontOccupant : vc.currentPassenger);
		}

		private void CountItems(int slot, out int small, out int big)
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			small = (big = 0);
			float num = ((slot == 0) ? HoverModel.SlotFront.z : HoverModel.SlotRear.z);
			GrabbableObject[] componentsInChildren = ((Component)this).GetComponentsInChildren<GrabbableObject>();
			foreach (GrabbableObject val in componentsInChildren)
			{
				if (val.isHeld)
				{
					continue;
				}
				Vector3 val2 = ((Component)this).transform.InverseTransformPoint(((Component)val).transform.position);
				if (!(Mathf.Abs(val2.z - num) > 0.4f) && !(Mathf.Abs(val2.x) > 0.45f))
				{
					if (val.itemProperties.twoHanded)
					{
						big++;
					}
					else
					{
						small++;
					}
				}
			}
		}

		internal bool CanPlace(PlaceableObjectsSurface surface, GrabbableObject held, out string why)
		{
			why = "";
			int num = Array.IndexOf(slots, surface);
			if (num < 0)
			{
				return (Object)(object)held != (Object)null;
			}
			if ((Object)(object)held == (Object)null)
			{
				return false;
			}
			if (held is HoverItem)
			{
				why = "No room for a hover here";
				return false;
			}
			if (HasPlayer(num))
			{
				why = "Someone is sitting here";
				return false;
			}
			CountItems(num, out var small, out var big);
			bool num2;
			if (!held.itemProperties.twoHanded)
			{
				if (big > 0)
				{
					goto IL_007e;
				}
				num2 = small >= 2;
			}
			else
			{
				num2 = small + big > 0;
			}
			if (!num2)
			{
				return true;
			}
			goto IL_007e;
			IL_007e:
			why = "No room left here";
			return false;
		}

		private void UpdatePassengerTips(PlayerControllerB local)
		{
			bool flag = (Object)(object)local != (Object)null && ((Object)(object)FrontOccupant == (Object)(object)local || vc.localPlayerInPassengerSeat);
			if (flag && !wasSeated)
			{
				HUDManager.Instance.ChangeControlTipMultiple(HoverInput.PassengerTips(), false, (Item)null);
			}
			if (!flag && wasSeated)
			{
				if ((Object)(object)local.currentlyHeldObjectServer != (Object)null)
				{
					local.currentlyHeldObjectServer.SetControlTipsForItem();
				}
				else
				{
					HUDManager.Instance.ClearControlTips();
				}
			}
			wasSeated = flag;
		}

		private void Update()
		{
			PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController;
			UpdatePassengerTips(val);
			bool flag = (Object)(object)val != (Object)null && val.isHoldingObject;
			for (int i = 0; i < 2; i++)
			{
				if (!((Object)(object)seats[i] == (Object)null))
				{
					CountItems(i, out var small, out var big);
					bool flag2 = small + big > 0;
					if ((Object)(object)seatBoxes[i] != (Object)null && !HasPlayer(i))
					{
						((Collider)seatBoxes[i]).enabled = !flag && !flag2;
					}
					if (!HasPlayer(i))
					{
						seats[i].interactable = !flag2;
						seats[i].disabledHoverTip = "Take the items off first";
					}
				}
			}
		}

		private void FixedUpdate()
		{
			if (hull == null)
			{
				hull = Array.FindAll(((Component)this).GetComponents<BoxCollider>(), (BoxCollider c) => ((Collider)c).enabled);
			}
			PlayerControllerB frontOccupant = FrontOccupant;
			PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts;
			foreach (PlayerControllerB val in allPlayerScripts)
			{
				if (!((Object)(object)val == (Object)null) && !((Object)(object)val.thisController == (Object)null))
				{
					bool flag = ((Object)(object)val == (Object)(object)vc.currentDriver || (Object)(object)val == (Object)(object)vc.currentPassenger || (Object)(object)val == (Object)(object)frontOccupant) && IsSeated(val);
					BoxCollider[] array = hull;
					foreach (BoxCollider val2 in array)
					{
						Physics.IgnoreCollision((Collider)(object)val.thisController, (Collider)(object)val2, flag);
					}
				}
			}
		}
	}
	public class HoverFlight : MonoBehaviour
	{
		public float hoverHeight = 1.6f;

		public float restHeight = 0.05f;

		public bool parked;

		public float minHeight = 0.6f;

		public float maxHeight = 4f;

		public float heightRate = 1.5f;

		public float hullHalfHeight = 0.41f;

		public float groundRange = 12f;

		public float altitudeK = 6f;

		public float altitudeD = 4f;

		public float attitudeK = 25f;

		public float attitudeD = 6f;

		public float terrainFollow = 0.6f;

		public float thrust = 16f;

		public float reverseThrust = 8f;

		public float maxSpeed = 28f;

		public float turnRate = 1.8f;

		public float yawResponse = 4f;

		public float leanMax = 25f;

		public float lateralGrip = 5f;

		public float idleDrag = 1.2f;

		private static readonly float[] Lookahead = new float[3] { 1.5f, 3f, 4.5f };

		private HoverVehicle hover;

		private VehicleController vc;

		private Rigidbody rb;

		private Transform[] points;

		private bool comSet;

		private bool wasDriving;

		private float pendingDrain;

		private float drainTimer;

		private Transform handlebar;

		private Quaternion handlebarRest;

		private float steer;

		private float lastYaw;

		private static readonly FieldRef<VehicleController, string[]> CarTooltips = AccessTools.FieldRefAccess<VehicleController, string[]>("carTooltips");

		public bool IsResting
		{
			get
			{
				if (!((Object)(object)vc.currentDriver == (Object)null) && !parked)
				{
					return hover.Charge.Value <= 0f;
				}
				return true;
			}
		}

		private void Awake()
		{
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			hover = ((Component)this).GetComponent<HoverVehicle>();
			vc = ((Component)this).GetComponent<VehicleController>();
			rb = vc.mainRigidbody;
			vc.hasBeenSpawned = true;
			vc.stability = 0f;
			vc.speed = 0.01f;
			points = Array.FindAll(((Component)this).GetComponentsInChildren<Transform>(true), (Transform t) => ((Object)t).name == "HoverPoint");
			WheelCollider[] componentsInChildren = ((Component)this).GetComponentsInChildren<WheelCollider>(true);
			for (int num = 0; num < componentsInChildren.Length; num++)
			{
				((Collider)componentsInChildren[num]).enabled = false;
			}
			handlebar = Array.Find(((Component)this).GetComponentsInChildren<Transform>(true), (Transform t) => ((Object)t).name == "HandlebarPivot");
			if ((Object)(object)handlebar != (Object)null)
			{
				handlebarRest = handlebar.localRotation;
			}
		}

		private static Vector2 MoveInput()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			return InputSystem.actions.FindAction("Move", false).ReadValue<Vector2>();
		}

		private void Update()
		{
			if (vc.localPlayerInControl && !wasDriving)
			{
				CarTooltips.Invoke(vc) = HoverInput.RiderTips();
			}
			wasDriving = vc.localPlayerInControl;
			TurnHandlebar();
		}

		private void TurnHandlebar()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)handlebar == (Object)null) && !(Time.deltaTime <= 0f))
			{
				float y = ((Component)this).transform.eulerAngles.y;
				float num = (vc.localPlayerInControl ? MoveInput().x : Mathf.Clamp(Mathf.DeltaAngle(lastYaw, y) / Time.deltaTime / 100f, -1f, 1f));
				lastYaw = y;
				steer = Mathf.MoveTowards(steer, num, 5f * Time.deltaTime);
				handlebar.localRotation = handlebarRest * Quaternion.AngleAxis(steer * 25f, Vector3.up);
			}
		}

		private void FixedUpdate()
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_022e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0238: Unknown result type (might be due to invalid IL or missing references)
			//IL_023d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0242: Unknown result type (might be due to invalid IL or missing references)
			//IL_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0302: Unknown result type (might be due to invalid IL or missing references)
			//IL_0309: Unknown result type (might be due to invalid IL or missing references)
			//IL_0328: Unknown result type (might be due to invalid IL or missing references)
			//IL_032f: Unknown result type (might be due to invalid IL or missing references)
			//IL_033a: Unknown result type (might be due to invalid IL or missing references)
			//IL_033f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0348: Unknown result type (might be due to invalid IL or missing references)
			//IL_0352: Unknown result type (might be due to invalid IL or missing references)
			//IL_0354: Unknown result type (might be due to invalid IL or missing references)
			//IL_0359: Unknown result type (might be due to invalid IL or missing references)
			//IL_035b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0360: Unknown result type (might be due to invalid IL or missing references)
			//IL_0368: Unknown result type (might be due to invalid IL or missing references)
			//IL_036d: Unknown result type (might be due to invalid IL or missing references)
			//IL_036f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0374: Unknown result type (might be due to invalid IL or missing references)
			//IL_037c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0387: Unknown result type (might be due to invalid IL or missing references)
			//IL_038c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0391: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0404: Unknown result type (might be due to invalid IL or missing references)
			//IL_040f: Unknown result type (might be due to invalid IL or missing references)
			//IL_041a: Unknown result type (might be due to invalid IL or missing references)
			//IL_041c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0425: Unknown result type (might be due to invalid IL or missing references)
			//IL_0462: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0442: Unknown result type (might be due to invalid IL or missing references)
			//IL_044a: Unknown result type (might be due to invalid IL or missing references)
			//IL_044f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0455: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04df: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0486: Unknown result type (might be due to invalid IL or missing references)
			//IL_048e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0493: Unknown result type (might be due to invalid IL or missing references)
			//IL_0499: Unknown result type (might be due to invalid IL or missing references)
			if (!((NetworkBehaviour)hover).IsSpawned || !((NetworkBehaviour)vc).IsOwner || rb.isKinematic || vc.carDestroyed)
			{
				return;
			}
			if (!comSet)
			{
				rb.centerOfMass = new Vector3(0f, -0.95f, 0f);
				comSet = true;
			}
			if ((Object)(object)vc.currentDriver == (Object)null)
			{
				parked = false;
			}
			bool flag = !IsResting;
			int num;
			Vector2 val;
			if (flag)
			{
				num = (vc.localPlayerInControl ? 1 : 0);
				if (num != 0)
				{
					val = MoveInput();
					goto IL_00a7;
				}
			}
			else
			{
				num = 0;
			}
			val = Vector2.zero;
			goto IL_00a7;
			IL_00a7:
			Vector2 val2 = val;
			if (num != 0)
			{
				if (Plugin.Input.HoverUp.IsPressed())
				{
					hoverHeight += heightRate * Time.fixedDeltaTime;
				}
				if (Plugin.Input.HoverDown.IsPressed())
				{
					hoverHeight -= heightRate * Time.fixedDeltaTime;
				}
				hoverHeight = Mathf.Clamp(hoverHeight, minHeight, maxHeight);
			}
			int num2 = StartOfRound.Instance.collidersAndRoomMaskAndDefault & -1073741825;
			float num3 = float.MinValue;
			Vector3 val3 = Vector3.zero;
			Transform[] array = points;
			RaycastHit val4 = default(RaycastHit);
			for (int i = 0; i < array.Length; i++)
			{
				if (Physics.Raycast(array[i].position + Vector3.up, Vector3.down, ref val4, groundRange + 1f, num2, (QueryTriggerInteraction)1))
				{
					num3 = Mathf.Max(num3, ((RaycastHit)(ref val4)).point.y);
					val3 += ((RaycastHit)(ref val4)).normal;
				}
			}
			if (num3 == float.MinValue)
			{
				return;
			}
			Vector3 val5 = Vector3.ProjectOnPlane(rb.velocity, Vector3.up);
			Vector3 val6 = Vector3.ProjectOnPlane(((Component)this).transform.forward, Vector3.up);
			Vector3 normalized = ((Vector3)(ref val6)).normalized;
			Vector3 val7 = ((((Vector3)(ref val5)).magnitude > 1f) ? ((Vector3)(ref val5)).normalized : normalized);
			float[] lookahead = Lookahead;
			RaycastHit val8 = default(RaycastHit);
			foreach (float num4 in lookahead)
			{
				if (Physics.Raycast(rb.worldCenterOfMass + val7 * num4 + Vector3.up * 2f, Vector3.down, ref val8, groundRange + 2f, num2, (QueryTriggerInteraction)1))
				{
					num3 = Mathf.Max(num3, ((RaycastHit)(ref val8)).point.y);
				}
			}
			float num5 = num3 + (flag ? hoverHeight : restHeight) - (rb.worldCenterOfMass.y - hullHalfHeight);
			val6 = Physics.gravity;
			float num6 = ((Vector3)(ref val6)).magnitude + altitudeK * num5 - altitudeD * rb.velocity.y;
			val6 = Physics.gravity;
			float num7 = Mathf.Clamp(num6, 0f, 3f * ((Vector3)(ref val6)).magnitude);
			rb.AddForce(Vector3.up * num7, (ForceMode)5);
			float num8 = Mathf.Clamp01(((Vector3)(ref val5)).magnitude / 8f);
			Vector3 val9 = Vector3.Slerp(Vector3.up, ((Vector3)(ref val3)).normalized, terrainFollow);
			val9 = Quaternion.AngleAxis((0f - leanMax) * val2.x * num8, normalized) * val9;
			Vector3 val10 = Vector3.Cross(((Component)this).transform.up, val9);
			Vector3 val11 = rb.angularVelocity - Vector3.Project(rb.angularVelocity, Vector3.up);
			rb.AddTorque(val10 * attitudeK - val11 * attitudeD, (ForceMode)5);
			float num9 = turnRate * val2.x * (0.5f + 0.5f * num8);
			rb.AddTorque(Vector3.up * (num9 - rb.angularVelocity.y) * yawResponse, (ForceMode)5);
			float num10 = Vector3.Dot(val5, normalized);
			if (val2.y > 0.1f && num10 < maxSpeed)
			{
				rb.AddForce(normalized * thrust * val2.y, (ForceMode)5);
			}
			else if (val2.y < -0.1f && num10 > (0f - maxSpeed) * 0.4f)
			{
				rb.AddForce(normalized * reverseThrust * val2.y, (ForceMode)5);
			}
			else
			{
				rb.AddForce(-val5 * idleDrag, (ForceMode)5);
			}
			Vector3 val12 = Vector3.Project(val5, Vector3.Cross(Vector3.up, normalized));
			rb.AddForce(-val12 * lateralGrip, (ForceMode)5);
			if (flag && ((Vector3)(ref val5)).magnitude > 1f)
			{
				pendingDrain += Time.fixedDeltaTime / 60f;
			}
			drainTimer += Time.fixedDeltaTime;
			if (drainTimer >= 0.5f && pendingDrain > 0f)
			{
				hover.ConsumeServerRpc(pendingDrain);
				pendingDrain = 0f;
				drainTimer = 0f;
			}
		}
	}
	public class HoverInput : LcInputActions
	{
		[InputAction("<Keyboard>/f", Name = "Hover: fold / get off")]
		public InputAction FoldKey { get; set; }

		[InputAction("<Keyboard>/x", Name = "Hover: park")]
		public InputAction ParkKey { get; set; }

		[InputAction("<Keyboard>/space", Name = "Hover: higher")]
		public InputAction HoverUp { get; set; }

		[InputAction("<Keyboard>/leftCtrl", Name = "Hover: lower")]
		public InputAction HoverDown { get; set; }

		internal static void OnFoldKey()
		{
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController;
			if ((Object)(object)val == (Object)null || val.isPlayerDead || val.inTerminalMenu || val.isTypingChat || val.quickMenuManager.isMenuOpen)
			{
				return;
			}
			HoverVehicle[] array = Object.FindObjectsOfType<HoverVehicle>();
			foreach (HoverVehicle hoverVehicle in array)
			{
				if (SeatedOn(val, hoverVehicle, out var seat))
				{
					Plugin.Log.LogInfo((object)("Getting off the hover from the " + ((Object)seat).name + "."));
					VehicleController vc = hoverVehicle.Vc;
					if ((Object)(object)seat == (Object)(object)vc.driverSeatTrigger)
					{
						vc.ExitDriverSideSeat();
						return;
					}
					if ((Object)(object)seat == (Object)(object)vc.passengerSeatTrigger)
					{
						vc.ExitPassengerSideSeat();
						return;
					}
					seat.StopSpecialAnimation();
					val.TeleportPlayer(((Component)hoverVehicle).transform.TransformPoint(new Vector3(1.2f, -0.6f, HoverModel.SlotFront.z)), false, 0f, false, true);
					return;
				}
			}
			Transform transform = ((Component)val.gameplayCamera).transform;
			RaycastHit[] array2 = Physics.RaycastAll(transform.position, transform.forward, 4f, -1, (QueryTriggerInteraction)2);
			Array.Sort(array2, (RaycastHit a, RaycastHit b) => ((RaycastHit)(ref a)).distance.CompareTo(((RaycastHit)(ref b)).distance));
			RaycastHit[] array3 = array2;
			for (int i = 0; i < array3.Length; i++)
			{
				RaycastHit val2 = array3[i];
				if (((RaycastHit)(ref val2)).transform.IsChildOf(((Component)val).transform))
				{
					continue;
				}
				HoverItem componentInParent = ((Component)((RaycastHit)(ref val2)).collider).GetComponentInParent<HoverItem>();
				if ((Object)(object)componentInParent != (Object)null && !((GrabbableObject)componentInParent).isHeld)
				{
					TryUnfold(val, componentInParent);
					break;
				}
				HoverVehicle componentInParent2 = ((Component)((RaycastHit)(ref val2)).collider).GetComponentInParent<HoverVehicle>();
				if ((Object)(object)componentInParent2 != (Object)null)
				{
					if (!componentInParent2.IsEmpty)
					{
						HUDManager.Instance.DisplayTip("Hover", "Everyone has to get off first.", false, false, "LC_Tip1");
					}
					else if (componentInParent2.HasItems)
					{
						HUDManager.Instance.DisplayTip("Hover", "Take the items off first.", false, false, "LC_Tip1");
					}
					else
					{
						componentInParent2.FoldServerRpc();
					}
					break;
				}
				if (!((RaycastHit)(ref val2)).collider.isTrigger)
				{
					break;
				}
			}
		}

		private static bool SeatedOn(PlayerControllerB p, HoverVehicle h, out InteractTrigger seat)
		{
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			seat = p.currentTriggerInAnimationWith;
			if ((Object)(object)seat == (Object)null || !p.inSpecialInteractAnimation || (Object)(object)seat.lockedPlayer != (Object)(object)((Component)p).transform)
			{
				return false;
			}
			if ((Object)(object)seat != (Object)(object)h.Vc.driverSeatTrigger && (Object)(object)seat != (Object)(object)h.Vc.passengerSeatTrigger && (Object)(object)seat != (Object)(object)h.Deck.FrontSeat)
			{
				return false;
			}
			return Vector3.Distance(((Component)p).transform.position, ((Component)h).transform.position) < 4f;
		}

		private static string Key(InputAction a)
		{
			return InputActionRebindingExtensions.GetBindingDisplayString(a, (DisplayStringOptions)0, (string)null);
		}

		internal static string[] RiderTips()
		{
			return new string[4]
			{
				"Ride : [W][A][S][D]",
				"Higher / lower : [" + Key(Plugin.Input.HoverUp) + "] / [" + Key(Plugin.Input.HoverDown) + "]",
				"Park : [" + Key(Plugin.Input.ParkKey) + "]",
				"Get off : [" + Key(Plugin.Input.FoldKey) + "]"
			};
		}

		internal static string[] PassengerTips()
		{
			return new string[1] { "Get off : [" + Key(Plugin.Input.FoldKey) + "]" };
		}

		internal static void OnParkKey()
		{
			HoverVehicle[] array = Object.FindObjectsOfType<HoverVehicle>();
			foreach (HoverVehicle hoverVehicle in array)
			{
				if (hoverVehicle.Vc.localPlayerInControl)
				{
					hoverVehicle.Flight.parked = !hoverVehicle.Flight.parked;
					HUDManager.Instance.DisplayTip("Hover", hoverVehicle.Flight.parked ? "Parked" : "Hovering", false, false, "LC_Tip1");
				}
			}
		}

		internal static void TryUnfold(PlayerControllerB p, HoverItem item)
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			if (p.isInsideFactory || p.isInHangarShipRoom)
			{
				HUDManager.Instance.DisplayTip("Hover", "Too cramped here. Unfold it outdoors.", false, false, "LC_Tip1");
			}
			else
			{
				item.UnfoldServerRpc(((Component)p.gameplayCamera).transform.eulerAngles.y);
			}
		}
	}
	[HarmonyPatch(typeof(PlayerControllerB), "BeginGrabObject")]
	internal static class HoldToUnfold
	{
		private const float HoldTime = 0.6f;

		private static bool bypass;

		private static readonly FieldRef<PlayerControllerB, int> Mask = AccessTools.FieldRefAccess<PlayerControllerB, int>("interactableObjectsMask");

		private static bool Prefix(PlayerControllerB __instance)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			if (bypass)
			{
				return true;
			}
			Transform transform = ((Component)__instance.gameplayCamera).transform;
			RaycastHit val = default(RaycastHit);
			if (!Physics.Raycast(transform.position, transform.forward, ref val, __instance.grabDistance, Mask.Invoke(__instance)))
			{
				return true;
			}
			HoverItem component = ((Component)((RaycastHit)(ref val)).collider).GetComponent<HoverItem>();
			if ((Object)(object)component == (Object)null || ((GrabbableObject)component).isHeld || __instance.twoHanded)
			{
				return true;
			}
			((MonoBehaviour)__instance).StartCoroutine(WaitForRelease(__instance, component));
			return false;
		}

		private static IEnumerator WaitForRelease(PlayerControllerB p, HoverItem item)
		{
			InputAction interact = InputSystem.actions.FindAction("Interact", false);
			float t = 0f;
			while (interact.IsPressed())
			{
				if (t >= 0.6f)
				{
					if ((Object)(object)item != (Object)null && ((NetworkBehaviour)item).IsSpawned && !((GrabbableObject)item).isHeld)
					{
						HoverInput.TryUnfold(p, item);
					}
					yield break;
				}
				yield return null;
				t += Time.deltaTime;
			}
			bypass = true;
			try
			{
				AccessTools.Method(typeof(PlayerControllerB), "BeginGrabObject", (Type[])null, (Type[])null).Invoke(p, null);
			}
			finally
			{
				bypass = false;
			}
		}
	}
	public class HoverItem : GrabbableObject
	{
		public override void Start()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Expected O, but got Unknown
			((GrabbableObject)this).Start();
			if (base.insertedBattery == null)
			{
				base.insertedBattery = new Battery(false, 1f);
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void UnfoldServerRpc(float yaw)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				ServerRpcParams val2 = default(ServerRpcParams);
				FastBufferWriter val = ((NetworkBehaviour)this).__beginSendServerRpc(1409331897u, val2, (RpcDelivery)0);
				((FastBufferWriter)(ref val)).WriteValueSafe<float>(ref yaw, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendServerRpc(ref val, 1409331897u, val2, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0;
				if (((NetworkBehaviour)this).IsSpawned && !base.isHeld && !base.isHeldByEnemy)
				{
					GameObject obj = Object.Instantiate<GameObject>(Plugin.VehiclePrefab, ((Component)this).transform.position + Vector3.up * 1.5f, Quaternion.Euler(0f, yaw, 0f), RoundManager.Instance.VehiclesContainer);
					float value = base.insertedBattery?.charge ?? 1f;
					obj.GetComponent<NetworkObject>().Spawn(false);
					((NetworkBehaviour)this).NetworkObject.Despawn(true);
					obj.GetComponent<HoverVehicle>().Charge.Value = value;
				}
			}
		}

		protected override void __initializeVariables()
		{
			((GrabbableObject)this).__initializeVariables();
		}

		protected override void __initializeRpcs()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			((NetworkBehaviour)this).__registerRpc(1409331897u, new RpcReceiveHandler(__rpc_handler_1409331897), "UnfoldServerRpc");
			((GrabbableObject)this).__initializeRpcs();
		}

		private static void __rpc_handler_1409331897(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				float yaw = default(float);
				((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref yaw, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((HoverItem)(object)target).UnfoldServerRpc(yaw);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "HoverItem";
		}
	}
	internal static class HoverModel
	{
		private static readonly Vector4[] Deck = (Vector4[])(object)new Vector4[5]
		{
			new Vector4(2.48f, 0.1f, -1f, -0.93f),
			new Vector4(2.4f, 0.24f, -1.05f, -0.88f),
			new Vector4(2.25f, 0.36f, -1.12f, -0.83f),
			new Vector4(2.05f, 0.43f, -1.17f, -0.8f),
			new Vector4(0.3f, 0.43f, -1.18f, -0.8f)
		};

		private static readonly Vector4[] Rear = (Vector4[])(object)new Vector4[4]
		{
			new Vector4(0.45f, 0.43f, -1.2f, -0.78f),
			new Vector4(0.2f, 0.75f, -1.25f, -0.76f),
			new Vector4(-1.2f, 0.85f, -1.25f, -0.76f),
			new Vector4(-1.6f, 0.6f, -1.2f, -0.8f)
		};

		private static readonly Vector4[] Engine = (Vector4[])(object)new Vector4[4]
		{
			new Vector4(-0.55f, 0.3f, -0.8f, -0.62f),
			new Vector4(-0.8f, 0.34f, -0.8f, -0.25f),
			new Vector4(-1.15f, 0.34f, -0.8f, -0.2f),
			new Vector4(-1.65f, 0.34f, -0.8f, -0.7f)
		};

		internal static readonly Vector3 ChargerSlopeMid = new Vector3(0f, -0.45f, -1.4f);

		internal static readonly Vector3 ChargerSlopeNormal = new Vector3(0f, 0.7071f, -0.7071f);

		private static readonly Vector4[] Saddle = (Vector4[])(object)new Vector4[5]
		{
			new Vector4(0.08f, 0.1f, -0.78f, -0.72f),
			new Vector4(-0.05f, 0.2f, -0.78f, -0.66f),
			new Vector4(-0.3f, 0.24f, -0.78f, -0.64f),
			new Vector4(-0.45f, 0.24f, -0.78f, -0.6f),
			new Vector4(-0.55f, 0.2f, -0.78f, -0.55f)
		};

		private static readonly Vector4[] Backrest = (Vector4[])(object)new Vector4[2]
		{
			new Vector4(-0.54f, 0.18f, -0.56f, -0.3f),
			new Vector4(-0.6f, 0.21f, -0.6f, -0.27f)
		};

		internal static readonly Vector3 SeatTop = new Vector3(0f, -0.62f, -0.3f);

		internal static readonly Vector3 SlotFront = new Vector3(0f, -0.77f, 1.56f);

		internal static readonly Vector3 SlotRear = new Vector3(0f, -0.77f, 0.77f);

		internal static readonly Vector3 HandlebarTop = new Vector3(0f, -0.41f, 0.15f);

		internal static readonly Vector3 Nose = new Vector3(0f, -0.96f, 2.48f);

		internal static readonly Vector3[] Lamps = (Vector3[])(object)new Vector3[2]
		{
			new Vector3(-0.16f, -0.92f, 2.41f),
			new Vector3(0.16f, -0.92f, 2.41f)
		};

		internal const float RestGroundY = -1.3f;

		private static readonly Vector3 StemBase = new Vector3(0f, -0.78f, 0.3f);

		private static readonly Color Red = new Color(0.62f, 0.17f, 0.08f);

		private static readonly Color Leather = new Color(0.16f, 0.12f, 0.1f);

		private static readonly Color Dark = new Color(0.1f, 0.1f, 0.1f);

		private static readonly Color Metal = new Color(0.32f, 0.32f, 0.34f);

		internal const float BarWidth = 0.22f;

		private static Texture2D grime;

		internal static void Build(Transform parent, Material baseMat)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_028e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0305: Unknown result type (might be due to invalid IL or missing references)
			//IL_0319: Unknown result type (might be due to invalid IL or missing references)
			//IL_0339: Unknown result type (might be due to invalid IL or missing references)
			//IL_034d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0357: Unknown result type (might be due to invalid IL or missing references)
			//IL_037b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0380: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0401: Unknown result type (might be due to invalid IL or missing references)
			//IL_0412: Unknown result type (might be due to invalid IL or missing references)
			//IL_0423: Unknown result type (might be due to invalid IL or missing references)
			//IL_0428: Unknown result type (might be due to invalid IL or missing references)
			//IL_042d: Unknown result type (might be due to invalid IL or missing references)
			//IL_043e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0443: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0510: Unknown result type (might be due to invalid IL or missing references)
			//IL_052e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0548: Unknown result type (might be due to invalid IL or missing references)
			//IL_0557: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_05bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0604: Unknown result type (might be due to invalid IL or missing references)
			Material val = Mat(baseMat, Red);
			Material mat = Mat(baseMat, Leather);
			Material val2 = Mat(baseMat, Dark);
			Material val3 = Mat(baseMat, Metal);
			Material mat2 = Mat(baseMat, new Color(0.2f, 0.4f, 0.8f), new Color(0.3f, 0.6f, 1f) * 2f, textured: false);
			Material mat3 = Mat(baseMat, new Color(0.6f, 0.05f, 0.05f), new Color(1f, 0.1f, 0.05f) * 2f, textured: false);
			Add(parent, "Deck", Loft(Deck, 0f, 16, 4.5f), val);
			Add(parent, "Rear", Loft(Rear, 0f, 16, 5f), val);
			Add(parent, "Engine", Loft(Engine, 0f, 16, 4f), val);
			Add(parent, "Saddle", Loft(Saddle, 0f, 16, 2.4f), mat);
			Add(parent, "Backrest", Loft(Backrest, 0f, 16, 2.6f), mat);
			BuildNose(parent, val, val2, val3, baseMat);
			BuildDeckDetails(parent, val, val2, val3);
			float[] array = new float[2] { -1f, 1f };
			foreach (float num in array)
			{
				for (int j = 0; j < 4; j++)
				{
					Box(parent, new Vector3(0.345f * num, -0.5f, -0.9f - (float)j * 0.12f), new Vector3(0.02f, 0.2f, 0.05f), val2);
				}
				Box(parent, new Vector3(0.4f * num, -0.95f, -1.6f), new Vector3(0.15f, 0.06f, 0.02f), mat3);
			}
			for (int k = 0; k < 3; k++)
			{
				float num2 = -0.85f - (float)k * 0.08f;
				Box(parent, new Vector3(0f, Mathf.Lerp(-0.25f, -0.2f, (-0.8f - num2) / 0.35f) + 0.004f, num2), new Vector3(0.28f, 0.012f, 0.03f), val2);
			}
			BuildRearAirflow(parent, val, val2);
			Tube(parent, new Vector3(0.24f, -0.2f, -1.05f), new Vector3(0.24f, 0.3f, -1.12f), 0.006f, val3);
			Tube(parent, new Vector3(0.24f, 0.3f, -1.12f), new Vector3(0.24f, 0.32f, -1.123f), 0.015f, val2);
			Material mat4 = Mat(baseMat, new Color(0.15f, 0.35f, 0.5f), new Color(0.2f, 0.5f, 0.8f) * 0.8f, textured: false);
			Vector3[] array2 = (Vector3[])(object)new Vector3[4]
			{
				new Vector3(-0.2f, -1.18f, 1.6f),
				new Vector3(0.2f, -1.18f, 1.6f),
				new Vector3(-0.55f, -1.25f, -0.9f),
				new Vector3(0.55f, -1.25f, -0.9f)
			};
			foreach (Vector3 val4 in array2)
			{
				Tube(parent, val4, val4 + new Vector3(0f, -0.03f, 0f), 0.11f, val2);
				Tube(parent, val4 + new Vector3(0f, -0.03f, 0f), val4 + new Vector3(0f, -0.035f, 0f), 0.08f, mat4);
			}
			array = new float[2] { -1f, 1f };
			foreach (float num3 in array)
			{
				float num4 = 0.55f * num3;
				Tube(parent, new Vector3(num4, -0.9f, -1f), new Vector3(num4, -0.9f, -1.85f), 0.2f, val);
				Tube(parent, new Vector3(num4, -0.9f, -1.85f), new Vector3(num4, -0.9f, -1.95f), 0.17f, val3);
				Tube(parent, new Vector3(num4, -0.9f, -1.95f), new Vector3(num4, -0.9f, -1.96f), 0.13f, mat2);
				Slab(parent, new Vector3(num4, -0.72f, -1.3f), new Vector3(num4 + 0.4f * num3, -0.35f, -2.3f), new Vector2(0.06f, 0.3f), val);
			}
			array = new float[2] { -0.35f, 0.35f };
			foreach (float num5 in array)
			{
				Box(parent, new Vector3(num5, -1.27f, 0.2f), new Vector3(0.06f, 0.04f, 3.2f), val3);
				float[] array3 = new float[3] { 1.5f, 0.2f, -1.1f };
				foreach (float num6 in array3)
				{
					Box(parent, new Vector3(num5, -1.225f, num6), new Vector3(0.04f, 0.06f, 0.04f), val3);
				}
			}
			BuildHandlebar(parent, val3, val2, baseMat);
		}

		private static void BuildNose(Transform parent, Material red, Material dark, Material metal, Material baseMat)
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
			Material mat = Mat(baseMat, new Color(0.9f, 0.85f, 0.7f), new Color(1f, 0.9f, 0.7f) * 1.5f, textured: false);
			Vector3[] lamps = Lamps;
			foreach (Vector3 val in lamps)
			{
				Tube(parent, val + new Vector3(0f, 0f, -0.08f), val, 0.065f, dark);
				Tube(parent, val, val + new Vector3(0f, 0f, 0.01f), 0.05f, mat);
			}
			Tube(parent, new Vector3(-0.3f, -1.08f, 2.46f), new Vector3(0.3f, -1.08f, 2.46f), 0.025f, metal);
			float[] array = new float[2] { -0.24f, 0.24f };
			foreach (float num in array)
			{
				Tube(parent, new Vector3(num, -1.08f, 2.46f), new Vector3(num, -1.1f, 2.26f), 0.018f, metal);
			}
			for (int j = 0; j < 3; j++)
			{
				Box(parent, new Vector3(0f, -0.806f - (float)j * 0.01f, 2.1f + (float)j * 0.06f), new Vector3(0.3f, 0.012f, 0.03f), dark);
			}
			Box(parent, new Vector3(0f, -1.13f, 2.2f), new Vector3(0.38f, 0.03f, 0.22f), dark);
		}

		private static void BuildRearAirflow(Transform parent, Material red, Material dark)
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: Unknown result type (might be due to invalid IL or missing references)
			float[] array = new float[2] { -1f, 1f };
			foreach (float num in array)
			{
				float num2 = (Side(-0.2f) + 0.03f) * num;
				Add(parent, "Scoop", Loft((Vector4[])(object)new Vector4[3]
				{
					new Vector4(0.1f, 0.045f, -1.03f, -0.87f),
					new Vector4(-0.2f, 0.05f, -1.03f, -0.87f),
					new Vector4(-0.5f, 0.02f, -0.99f, -0.93f)
				}, num2, 16, 3f), red);
				Box(parent, new Vector3(num2, -0.95f, 0.102f), new Vector3(0.07f, 0.13f, 0.015f), dark);
				for (int j = 0; j < 3; j++)
				{
					float num3 = -1.12f + (float)j * 0.07f;
					Slab(parent, new Vector3((Side(-0.55f) + 0.01f) * num, num3, -0.55f), new Vector3((Side(-1.15f) + 0.01f) * num, num3 + 0.08f, -1.15f), new Vector2(0.02f, 0.02f), dark);
				}
				Slab(parent, new Vector3(0.6f * num, -0.755f, 0.15f), new Vector3(0.62f * num, -0.74f, -1.1f), new Vector2(0.04f, 0.035f), red);
				Box(parent, new Vector3(0.45f * num, -0.758f, -0.35f), new Vector3(0.1f, 0.006f, 0.26f), dark);
				Box(parent, new Vector3(0.45f * num, -0.758f, -0.2f), new Vector3(0.06f, 0.006f, 0.06f), dark);
				Slab(parent, new Vector3((Side(0.2f) * 0.985f + 0.012f) * num, -1.15f, 0.2f), new Vector3((Side(-1.2f) * 0.985f + 0.012f) * num, -1.15f, -1.2f), new Vector2(0.03f, 0.05f), dark);
			}
			static float Side(float z)
			{
				return 0.75f + Mathf.Clamp01((0.2f - z) / 1.4f) * 0.1f;
			}
		}

		private static void BuildDeckDetails(Transform parent, Material red, Material dark, Material metal)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			Vector3[] array = (Vector3[])(object)new Vector3[2] { SlotFront, SlotRear };
			float[] array2;
			foreach (Vector3 val in array)
			{
				Box(parent, val + new Vector3(0f, -0.015f, 0f), new Vector3(0.55f, 0.04f, 0.55f), dark);
				array2 = new float[2] { -1f, 1f };
				foreach (float num in array2)
				{
					Box(parent, val + new Vector3(0.29f * num, -0.015f, 0f), new Vector3(0.025f, 0.05f, 0.6f), metal);
					Box(parent, val + new Vector3(0f, -0.015f, 0.29f * num), new Vector3(0.6f, 0.05f, 0.025f), metal);
				}
			}
			array2 = new float[2] { -1f, 1f };
			foreach (float num2 in array2)
			{
				Box(parent, new Vector3(0.33f * num2, -0.795f, 1.17f), new Vector3(0.04f, 0.05f, 1.6f), red);
				Box(parent, new Vector3(0.44f * num2, -0.97f, 1.2f), new Vector3(0.03f, 0.025f, 1.9f), dark);
				for (int k = 0; k < 3; k++)
				{
					Box(parent, new Vector3(0.435f * num2, -0.9f, 1.95f - (float)k * 0.08f), new Vector3(0.02f, 0.04f, 0.05f), dark);
				}
			}
			array2 = new float[3] { 1.95f, 1.18f, 0.38f };
			foreach (float num3 in array2)
			{
				Box(parent, new Vector3(0f, -0.797f, num3), new Vector3(0.5f, 0.005f, 0.012f), dark);
			}
		}

		private static void BuildHandlebar(Transform parent, Material metal, Material dark, Material baseMat)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0232: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Unknown result type (might be due to invalid IL or missing references)
			//IL_027f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0312: Unknown result type (might be due to invalid IL or missing references)
			//IL_0328: Unknown result type (might be due to invalid IL or missing references)
			//IL_0333: Unknown result type (might be due to invalid IL or missing references)
			//IL_0347: Unknown result type (might be due to invalid IL or missing references)
			//IL_0363: Unknown result type (might be due to invalid IL or missing references)
			//IL_0377: Unknown result type (might be due to invalid IL or missing references)
			//IL_038c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0393: Unknown result type (might be due to invalid IL or missing references)
			//IL_0399: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
			Tube(parent, StemBase + new Vector3(0f, -0.02f, 0f), StemBase + new Vector3(0f, 0.06f, -0.03f), 0.07f, dark);
			Transform transform = new GameObject("HandlebarPivot").transform;
			transform.SetParent(parent, false);
			transform.localPosition = StemBase;
			transform.localRotation = Quaternion.FromToRotation(Vector3.up, HandlebarTop - StemBase);
			Transform transform2 = new GameObject("tmp").transform;
			transform2.SetParent(parent, false);
			Tube(transform2, StemBase, HandlebarTop, 0.045f, metal);
			Box(transform2, HandlebarTop, new Vector3(0.12f, 0.05f, 0.08f), dark);
			Vector3 val = HandlebarTop + new Vector3(0f, 0f, 0f);
			Tube(transform2, val + new Vector3(-0.12f, 0f, 0f), val + new Vector3(0.12f, 0f, 0f), 0.022f, metal);
			float[] array = new float[2] { -1f, 1f };
			foreach (float num in array)
			{
				Vector3 val2 = val + new Vector3(0.3f * num, 0.05f, -0.07f);
				Tube(transform2, val + new Vector3(0.12f * num, 0f, 0f), val2, 0.022f, metal);
				Tube(transform2, val2, val2 + new Vector3(0.1f * num, 0.005f, -0.03f), 0.035f, dark);
				Tube(transform2, val2 + new Vector3(0.1f * num, 0.005f, -0.03f), val2 + new Vector3(0.115f * num, 0.005f, -0.035f), 0.04f, metal);
				Tube(transform2, val2 + new Vector3(-0.04f * num, 0f, 0.01f), val2 + new Vector3(-0.02f * num, 0.14f, 0.03f), 0.008f, metal);
				Box(transform2, val2 + new Vector3(-0.02f * num, 0.16f, 0.03f), new Vector3(0.09f, 0.05f, 0.01f), dark);
			}
			Vector3 val3 = HandlebarTop + new Vector3(0f, 0.2f, 0.03f);
			Tube(transform2, HandlebarTop, val3 + new Vector3(0f, -0.04f, 0f), 0.015f, metal);
			Transform transform3 = new GameObject("Dash").transform;
			transform3.SetParent(transform2, false);
			transform3.localPosition = val3;
			transform3.localRotation = Quaternion.Euler(20f, 0f, 0f);
			Box(transform3, Vector3.zero, new Vector3(0.3f, 0.1f, 0.04f), dark);
			((Object)Box(transform3, new Vector3(0f, 0f, -0.021f), new Vector3(0.24f, 0.05f, 0.005f), Mat(baseMat, new Color(0.05f, 0.05f, 0.05f), default(Color), textured: false))).name = "HoverBatteryBack";
			((Object)Box(transform3, new Vector3(0f, 0f, -0.025f), new Vector3(0.22f, 0.035f, 0.005f), Mat(baseMat, Color.green, default(Color), textured: false))).name = "HoverBatteryFill";
			foreach (Transform item in new List<Transform>(((Component)transform2).GetComponentsInChildren<Transform>()))
			{
				if ((Object)(object)item.parent == (Object)(object)transform2)
				{
					item.SetParent(transform, true);
				}
			}
			Object.DestroyImmediate((Object)(object)((Component)transform2).gameObject);
		}

		internal static MeshRenderer BuildFolded(Transform parent, Bounds fit, Material baseMat)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			Transform transform = new GameObject("HoverFolded").transform;
			transform.SetParent(parent, false);
			transform.localPosition = ((Bounds)(ref fit)).center;
			Vector3 size = ((Bounds)(ref fit)).size;
			if (size.x >= size.y && size.x >= size.z)
			{
				transform.localRotation = Quaternion.Euler(0f, 90f, 0f);
			}
			else if (size.y >= size.x && size.y >= size.z)
			{
				transform.localRotation = Quaternion.Euler(90f, 0f, 0f);
			}
			float num = Mathf.Max(size.x, Mathf.Max(size.y, size.z));
			transform.localScale = Vector3.one * (num / 3.8f);
			Transform transform2 = new GameObject("Centre").transform;
			transform2.SetParent(transform, false);
			transform2.localPosition = new Vector3(0f, 0.95f, 0.2f);
			Material mat = Mat(baseMat, Red);
			MeshRenderer result = Add(transform2, "Deck", Loft(Deck, 0f, 16, 6f), mat);
			Add(transform2, "Rear", Loft(Rear, 0f, 16, 5f), mat);
			Add(transform2, "Engine", Loft(Engine, 0f, 16, 4f), mat);
			return result;
		}

		internal static (Animator anim, Vector3 panel) CopyShipCharger(ItemCharger station, Transform vehicle)
		{
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Expected O, but got Unknown
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_026f: Unknown result type (might be due to invalid IL or missing references)
			//IL_028c: Unknown result type (might be due to invalid IL or missing references)
			//IL_029d: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e9: Unknown result type (might be due to invalid IL or missing references)
			Animator chargeStationAnimator = station.chargeStationAnimator;
			if ((Object)(object)chargeStationAnimator == (Object)null)
			{
				return default((Animator, Vector3));
			}
			Transform val = ((Component)chargeStationAnimator).transform;
			Bounds val2;
			while ((Object)(object)val.parent != (Object)null)
			{
				val2 = WorldBounds(val.parent);
				Vector3 size = ((Bounds)(ref val2)).size;
				if (!(((Vector3)(ref size)).magnitude < 1.8f))
				{
					break;
				}
				val = val.parent;
			}
			Bounds val3 = LocalBounds(val);
			if (((Bounds)(ref val3)).size == Vector3.zero)
			{
				return default((Animator, Vector3));
			}
			Transform val4 = (((Object)(object)station.triggerScript != (Object)null) ? station.triggerScript.playerPositionNode : null);
			Vector3 val5 = Snap(val.InverseTransformDirection(Vector3.up));
			Transform obj = val;
			Vector3 val6;
			if (!((Object)(object)val4 != (Object)null))
			{
				val2 = StartOfRound.Instance.shipInnerRoomBounds.bounds;
				val6 = ((Bounds)(ref val2)).center;
			}
			else
			{
				val6 = val4.position;
			}
			Vector3 val7 = Snap(Vector3.ProjectOnPlane(obj.InverseTransformPoint(val6) - ((Bounds)(ref val3)).center, val5));
			Vector3 val8 = Vector3.Cross(Vector3.right, ChargerSlopeNormal);
			Quaternion localRotation = Quaternion.LookRotation(-ChargerSlopeNormal, val8) * Quaternion.Inverse(Quaternion.LookRotation(-val7, val5));
			float num = val.lossyScale.x / vehicle.lossyScale.x;
			float num2 = Vector3.Dot(Abs(val7), ((Bounds)(ref val3)).extents) * num;
			Vector3 val9 = ChargerSlopeMid + ChargerSlopeNormal * (num2 + 0.01f);
			GameObject val10 = new GameObject("ChargerHolder");
			val10.SetActive(false);
			GameObject val11 = Object.Instantiate<GameObject>(((Component)val).gameObject, val10.transform);
			NetworkBehaviour[] componentsInChildren = val11.GetComponentsInChildren<NetworkBehaviour>(true);
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				Object.DestroyImmediate((Object)(object)componentsInChildren[i]);
			}
			MonoBehaviour[] componentsInChildren2 = val11.GetComponentsInChildren<MonoBehaviour>(true);
			for (int i = 0; i < componentsInChildren2.Length; i++)
			{
				Object.DestroyImmediate((Object)(object)componentsInChildren2[i]);
			}
			Component[] componentsInChildren3 = val11.GetComponentsInChildren<Component>(true);
			foreach (Component val12 in componentsInChildren3)
			{
				if (!(val12 is Transform) && !(val12 is MeshFilter) && !(val12 is Renderer) && !(val12 is Animator))
				{
					Object.DestroyImmediate((Object)(object)val12);
				}
			}
			Transform transform = new GameObject("ShipCharger").transform;
			transform.SetParent(vehicle, false);
			transform.localPosition = val9;
			transform.localRotation = localRotation;
			val11.transform.SetParent(transform, false);
			val11.transform.localRotation = Quaternion.identity;
			val11.transform.localScale = Vector3.one * num;
			val11.transform.localPosition = -((Bounds)(ref val3)).center * num;
			Object.Destroy((Object)(object)val10);
			return (anim: val11.GetComponentInChildren<Animator>(), panel: val9 + ChargerSlopeNormal * num2);
		}

		private static Bounds WorldBounds(Transform t)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			Renderer[] componentsInChildren = ((Component)t).GetComponentsInChildren<Renderer>();
			if (componentsInChildren.Length == 0)
			{
				return new Bounds(t.position, Vector3.zero);
			}
			Bounds bounds = componentsInChildren[0].bounds;
			Renderer[] array = componentsInChildren;
			foreach (Renderer val in array)
			{
				((Bounds)(ref bounds)).Encapsulate(val.bounds);
			}
			return bounds;
		}

		private static Bounds LocalBounds(Transform t)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			bool flag = false;
			Bounds result = default(Bounds);
			MeshFilter[] componentsInChildren = ((Component)t).GetComponentsInChildren<MeshFilter>();
			foreach (MeshFilter val in componentsInChildren)
			{
				if ((Object)(object)val.sharedMesh == (Object)null)
				{
					continue;
				}
				Bounds bounds = val.sharedMesh.bounds;
				Matrix4x4 val2 = t.worldToLocalMatrix * ((Component)val).transform.localToWorldMatrix;
				for (int j = 0; j < 8; j++)
				{
					Vector3 val3 = ((Matrix4x4)(ref val2)).MultiplyPoint3x4(((Bounds)(ref bounds)).center + Vector3.Scale(((Bounds)(ref bounds)).extents, new Vector3((float)(((j & 1) != 0) ? 1 : (-1)), (float)(((j & 2) != 0) ? 1 : (-1)), (float)(((j & 4) != 0) ? 1 : (-1)))));
					if (!flag)
					{
						((Bounds)(ref result))..ctor(val3, Vector3.zero);
						flag = true;
					}
					else
					{
						((Bounds)(ref result)).Encapsulate(val3);
					}
				}
			}
			return result;
		}

		private static Vector3 Snap(Vector3 v)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = Abs(v);
			if (val.x >= val.y && val.x >= val.z)
			{
				return new Vector3(Mathf.Sign(v.x), 0f, 0f);
			}
			if (val.y >= val.z)
			{
				return new Vector3(0f, Mathf.Sign(v.y), 0f);
			}
			return new Vector3(0f, 0f, Mathf.Sign(v.z));
		}

		private static Vector3 Abs(Vector3 v)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			return new Vector3(Mathf.Abs(v.x), Mathf.Abs(v.y), Mathf.Abs(v.z));
		}

		private static Texture2D Grime()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Expected O, but got Unknown
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)grime != (Object)null)
			{
				return grime;
			}
			grime = new Texture2D(128, 128, (TextureFormat)4, true)
			{
				wrapMode = (TextureWrapMode)0,
				filterMode = (FilterMode)1,
				name = "HoverGrime"
			};
			Color[] array = (Color[])(object)new Color[16384];
			for (int i = 0; i < 128; i++)
			{
				for (int j = 0; j < 128; j++)
				{
					float num = 0.8f + 0.12f * Mathf.PerlinNoise((float)j * 0.08f, (float)i * 0.08f) + 0.08f * Mathf.PerlinNoise((float)j * 0.3f + 7f, (float)i * 0.3f);
					if (Mathf.PerlinNoise((float)j * 0.03f + 50f, (float)i * 0.03f + 20f) > 0.63f)
					{
						num *= 0.72f;
					}
					if (j % 64 == 0 || i % 64 == 0)
					{
						num *= 0.55f;
					}
					if ((j % 64 == 4 || j % 64 == 60) && i % 16 == 8)
					{
						num *= 0.6f;
					}
					array[i * 128 + j] = new Color(num, num, num, 1f);
				}
			}
			grime.SetPixels(array);
			grime.Apply(true);
			return grime;
		}

		private static Material Mat(Material baseMat, Color color, Color emissive = default(Color), bool textured = true)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			Material val = new Material(baseMat);
			string[] array = new string[5] { "_BaseColorMap", "_MainTex", "_MaskMap", "_NormalMap", "_DetailMap" };
			foreach (string text in array)
			{
				if (val.HasProperty(text))
				{
					val.SetTexture(text, (Texture)null);
				}
			}
			if (textured)
			{
				if (val.HasProperty("_BaseColorMap"))
				{
					val.SetTexture("_BaseColorMap", (Texture)(object)Grime());
				}
				if (val.HasProperty("_MainTex"))
				{
					val.SetTexture("_MainTex", (Texture)(object)Grime());
				}
			}
			val.SetColor("_BaseColor", color);
			val.SetColor("_Color", color);
			if (emissive != default(Color))
			{
				val.SetColor("_EmissiveColor", emissive);
			}
			return val;
		}

		private static MeshRenderer Add(Transform parent, string name, Mesh mesh, Material mat)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject(name);
			val.transform.SetParent(parent, false);
			val.AddComponent<MeshFilter>().sharedMesh = mesh;
			MeshRenderer obj = val.AddComponent<MeshRenderer>();
			((Renderer)obj).sharedMaterial = mat;
			return obj;
		}

		private static GameObject Primitive(Transform parent, PrimitiveType type, Material mat)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = GameObject.CreatePrimitive(type);
			Object.DestroyImmediate((Object)(object)obj.GetComponent<Collider>());
			obj.transform.SetParent(parent, false);
			((Renderer)obj.GetComponent<MeshRenderer>()).sharedMaterial = mat;
			return obj;
		}

		private static GameObject Box(Transform parent, Vector3 centre, Vector3 size, Material mat)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = Primitive(parent, (PrimitiveType)3, mat);
			obj.transform.localPosition = centre;
			obj.transform.localScale = size;
			return obj;
		}

		private static void Tube(Transform parent, Vector3 from, Vector3 to, float radius, Material mat)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			Transform transform = Primitive(parent, (PrimitiveType)2, mat).transform;
			transform.localPosition = (from + to) / 2f;
			transform.localRotation = Quaternion.FromToRotation(Vector3.up, to - from);
			float num = radius * 2f;
			Vector3 val = to - from;
			transform.localScale = new Vector3(num, ((Vector3)(ref val)).magnitude / 2f, radius * 2f);
		}

		private static void Slab(Transform parent, Vector3 from, Vector3 to, Vector2 size, Material mat)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			Transform transform = Primitive(parent, (PrimitiveType)3, mat).transform;
			transform.localPosition = (from + to) / 2f;
			transform.localRotation = Quaternion.LookRotation(to - from, Vector3.up);
			float x = size.x;
			float y = size.y;
			Vector3 val = to - from;
			transform.localScale = new Vector3(x, y, ((Vector3)(ref val)).magnitude);
		}

		private static void Orient(List<int> tris, List<Vector3> v, Vector3 outward)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = v[tris[0]];
			Vector3 val2 = v[tris[1]];
			Vector3 val3 = v[tris[2]];
			if (!(Vector3.Dot(Vector3.Cross(val2 - val, val3 - val), outward) >= 0f))
			{
				for (int i = 0; i < tris.Count; i += 3)
				{
					int index = i + 1;
					int index2 = i + 2;
					int value = tris[i + 2];
					int value2 = tris[i + 1];
					tris[index] = value;
					tris[index2] = value2;
				}
			}
		}

		private static Mesh Loft(Vector4[] sections, float xOffset = 0f, int seg = 16, float roundness = 2.5f)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_0285: Unknown result type (might be due to invalid IL or missing references)
			//IL_028a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0297: Expected O, but got Unknown
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_030b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0312: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0302: Unknown result type (might be due to invalid IL or missing references)
			//IL_0330: Unknown result type (might be due to invalid IL or missing references)
			//IL_0337: Unknown result type (might be due to invalid IL or missing references)
			//IL_033e: Unknown result type (might be due to invalid IL or missing references)
			//IL_031b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0322: Unknown result type (might be due to invalid IL or missing references)
			//IL_0329: Unknown result type (might be due to invalid IL or missing references)
			//IL_0345: Unknown result type (might be due to invalid IL or missing references)
			//IL_034c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0353: Unknown result type (might be due to invalid IL or missing references)
			//IL_035d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0362: Unknown result type (might be due to invalid IL or missing references)
			List<Vector3> list = new List<Vector3>();
			List<int> list2 = new List<int>();
			float num = 2f / roundness;
			foreach (Vector4 val in sections)
			{
				float num2 = (val.z + val.w) / 2f;
				float num3 = (val.w - val.z) / 2f;
				for (int j = 0; j < seg; j++)
				{
					float num4 = MathF.PI * 2f * (float)j / (float)seg;
					float num5 = Mathf.Cos(num4);
					float num6 = Mathf.Sin(num4);
					list.Add(new Vector3(xOffset + val.y * Mathf.Sign(num5) * Mathf.Pow(Mathf.Abs(num5), num), num2 + num3 * Mathf.Sign(num6) * Mathf.Pow(Mathf.Abs(num6), num), val.x));
				}
			}
			List<int> list3 = new List<int>();
			for (int k = 0; k < sections.Length - 1; k++)
			{
				for (int l = 0; l < seg; l++)
				{
					int num7 = k * seg + l;
					int num8 = k * seg + (l + 1) % seg;
					int num9 = num7 + seg;
					int num10 = num8 + seg;
					list3.AddRange(new int[6] { num7, num9, num8, num8, num9, num10 });
				}
			}
			Orient(list3, list, Vector3.right);
			list2.AddRange(list3);
			float num11 = Mathf.Sign(sections[0].x - sections[^1].x);
			(int, float)[] array = new(int, float)[2]
			{
				(0, num11),
				(sections.Length - 1, 0f - num11)
			};
			for (int i = 0; i < array.Length; i++)
			{
				(int, float) tuple = array[i];
				int item = tuple.Item1;
				float item2 = tuple.Item2;
				Vector4 val2 = sections[item];
				int count = list.Count;
				list.Add(new Vector3(xOffset, (val2.z + val2.w) / 2f, val2.x));
				List<int> list4 = new List<int>();
				for (int m = 0; m < seg; m++)
				{
					list4.AddRange(new int[3]
					{
						count,
						item * seg + m,
						item * seg + (m + 1) % seg
					});
				}
				Orient(list4, list, new Vector3(0f, 0f, item2));
				list2.AddRange(list4);
			}
			Mesh val3 = new Mesh
			{
				name = "HoverLoft"
			};
			val3.SetVertices(list);
			val3.SetTriangles(list2, 0);
			val3.RecalculateNormals();
			Vector3[] normals = val3.normals;
			Vector2[] array2 = (Vector2[])(object)new Vector2[list.Count];
			for (int n = 0; n < list.Count; n++)
			{
				Vector3 val4 = list[n];
				Vector3 val5 = Abs(normals[n]);
				array2[n] = ((val5.x >= val5.y && val5.x >= val5.z) ? new Vector2(val4.z, val4.y) : ((val5.y >= val5.z) ? new Vector2(val4.x, val4.z) : new Vector2(val4.x, val4.y))) * 0.9f;
			}
			val3.uv = array2;
			val3.RecalculateBounds();
			return val3;
		}
	}
	public class HoverPower : MonoBehaviour
	{
		private HoverVehicle hover;

		private HoverFlight flight;

		private VehicleController vc;

		private InteractTrigger charger;

		private Animator stationAnim;

		private AudioClip zap;

		private bool warnedLow;

		private bool warnedEmpty;

		private Transform barFill;

		private Material barMat;

		private int barBand = -1;

		private void Awake()
		{
			hover = ((Component)this).GetComponent<HoverVehicle>();
			flight = ((Component)this).GetComponent<HoverFlight>();
			vc = ((Component)this).GetComponent<VehicleController>();
			charger = Array.Find(((Component)this).GetComponentsInChildren<InteractTrigger>(true), (InteractTrigger t) => ((Object)t).name == "HoverCharger");
			if ((Object)(object)charger != (Object)null)
			{
				((UnityEvent<PlayerControllerB>)(object)charger.onInteract).AddListener((UnityAction<PlayerControllerB>)delegate(PlayerControllerB p)
				{
					ChargeHeldItem(p ?? GameNetworkManager.Instance.localPlayerController);
				});
			}
			barFill = Array.Find(((Component)this).GetComponentsInChildren<Transform>(true), (Transform t) => ((Object)t).name == "HoverBatteryFill");
			if ((Object)(object)barFill != (Object)null)
			{
				barMat = ((Renderer)((Component)barFill).GetComponent<MeshRenderer>()).material;
			}
		}

		private void Start()
		{
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: