using System;
using Cpp2IlInjected;
using UnityEngine;

namespace RootMotion.FinalIK
{
	// Token: 0x02000400 RID: 1024
	[Token(Token = "0x2000400")]
	[AddComponentMenu("Scripts/RootMotion.FinalIK/Grounder/Grounder Quadruped")]
	[HelpURL("http://www.root-motion.com/finalikdox/html/page11.html")]
	public class GrounderQuadruped : Grounder
	{
		// Token: 0x0600249C RID: 9372 RVA: 0x000535A8 File Offset: 0x000517A8
		[Token(Token = "0x600249C")]
		[Address(RVA = "0x11793B0", Offset = "0x11781B0", VA = "0x1811793B0", Slot = "5")]
		[ContextMenu("User Manual")]
		protected override void OpenUserManual()
		{
			Application.OpenURL("http://www.root-motion.com/finalikdox/html/page11.html");
		}

		// Token: 0x0600249D RID: 9373 RVA: 0x000535C0 File Offset: 0x000517C0
		[Token(Token = "0x600249D")]
		[Address(RVA = "0x1179370", Offset = "0x1178170", VA = "0x181179370", Slot = "6")]
		[ContextMenu("Scrpt Reference")]
		protected override void OpenScriptReference()
		{
			Application.OpenURL("http://www.root-motion.com/finalikdox/html/class_root_motion_1_1_final_i_k_1_1_grounder_quadruped.html");
		}

		// Token: 0x0600249E RID: 9374 RVA: 0x000535D8 File Offset: 0x000517D8
		[Token(Token = "0x600249E")]
		[Address(RVA = "0x11793F0", Offset = "0x11781F0", VA = "0x1811793F0", Slot = "4")]
		public override void ResetPosition()
		{
			this.solver.Reset();
			this.forelegSolver.Reset();
		}

		// Token: 0x0600249F RID: 9375 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x600249F")]
		[Address(RVA = "0x11783D0", Offset = "0x11771D0", VA = "0x1811783D0")]
		private bool IsReadyToInitiate()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024A0 RID: 9376 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024A0")]
		[Address(RVA = "0x1178200", Offset = "0x1177000", VA = "0x181178200")]
		private bool IsReadyToInitiateLegs(IK[] ikComponents)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024A1 RID: 9377 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024A1")]
		[Address(RVA = "0x1178650", Offset = "0x1177450", VA = "0x181178650")]
		private void OnDisable()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024A2 RID: 9378 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024A2")]
		[Address(RVA = "0x1179D30", Offset = "0x1178B30", VA = "0x181179D30")]
		private void Update()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024A3 RID: 9379 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024A3")]
		[Address(RVA = "0x1177E30", Offset = "0x1176C30", VA = "0x181177E30")]
		private void Initiate()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024A4 RID: 9380 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024A4")]
		[Address(RVA = "0x11779F0", Offset = "0x11767F0", VA = "0x1811779F0")]
		private Transform[] InitiateFeet(IK[] ikComponents, ref GrounderQuadruped.Foot[] f, int indexOffset)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024A5 RID: 9381 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024A5")]
		[Address(RVA = "0x1178520", Offset = "0x1177320", VA = "0x181178520")]
		private void LateUpdate()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024A6 RID: 9382 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024A6")]
		[Address(RVA = "0x1179430", Offset = "0x1178230", VA = "0x181179430")]
		private void RootRotation()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024A7 RID: 9383 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024A7")]
		[Address(RVA = "0x1178A40", Offset = "0x1177840", VA = "0x181178A40")]
		private void OnSolverUpdate()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024A8 RID: 9384 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024A8")]
		[Address(RVA = "0x1179A10", Offset = "0x1178810", VA = "0x181179A10")]
		private void UpdateForefeetRoot()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024A9 RID: 9385 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024A9")]
		[Address(RVA = "0x1179860", Offset = "0x1178660", VA = "0x181179860")]
		private void SetFootIK(GrounderQuadruped.Foot foot, float maxOffset)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024AA RID: 9386 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024AA")]
		[Address(RVA = "0x11786D0", Offset = "0x11774D0", VA = "0x1811786D0")]
		private void OnPostSolverUpdate()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024AB RID: 9387 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60024AB")]
		[Address(RVA = "0x1178610", Offset = "0x1177410", VA = "0x181178610")]
		private void OnDestroy()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060024AC RID: 9388 RVA: 0x00053604 File Offset: 0x00051804
		[Token(Token = "0x60024AC")]
		[Address(RVA = "0x11777D0", Offset = "0x11765D0", VA = "0x1811777D0")]
		private void DestroyLegs(IK[] ikComponents)
		{
			int num = 0;
			int num2 = 0;
			int length = ikComponents.Length;
			if (num2 < length)
			{
				IK ik = ikComponents[num];
				int num3 = 0;
				if (ik != num3)
				{
					IKSolver iksolver = ik.GetIKSolver();
					IKSolver.UpdateDelegate updateDelegate = new IKSolver.UpdateDelegate(this.OnSolverUpdate);
					Delegate @delegate = Delegate.Remove(updateDelegate, updateDelegate);
					int num4 = 0;
					if (@delegate != 0 && @delegate == 0)
					{
						throw new InvalidCastException();
					}
					iksolver.OnPreUpdate = num4;
					IKSolver iksolver2 = ik.GetIKSolver();
					IKSolver.UpdateDelegate updateDelegate2 = new IKSolver.UpdateDelegate(this.OnPostSolverUpdate);
					Delegate delegate2 = Delegate.Remove(updateDelegate2, updateDelegate2);
					if (delegate2 != 0 && delegate2 == 0)
					{
						throw new InvalidCastException();
					}
					iksolver2.OnPostUpdate = delegate2;
				}
				num++;
			}
		}

		// Token: 0x060024AD RID: 9389 RVA: 0x000536B4 File Offset: 0x000518B4
		[Token(Token = "0x60024AD")]
		[Address(RVA = "0x1179EB0", Offset = "0x1178CB0", VA = "0x181179EB0")]
		public GrounderQuadruped()
		{
			Vector3 down = Vector3.down;
			int num = 0;
			float z = down.z;
			this.gravity.z = z;
			GrounderQuadruped.Foot[] array = new GrounderQuadruped.Foot[num];
			this.feet = array;
			base..ctor();
		}

		// Token: 0x04002E46 RID: 11846
		[FieldOffset(Offset = "0x40")]
		[Token(Token = "0x4002E46")]
		[Tooltip("The Grounding solver for the forelegs.")]
		public Grounding forelegSolver = new Grounding
		{
			maxStep = 0.5f,
			footSpeed = 2.5f,
			footRadius = 0.15f,
			prediction = 0.05f,
			footRotationWeight = 1f,
			footRotationSpeed = 7f,
			maxFootRotationAngle = 45f,
			pelvisSpeed = 5f,
			lowerPelvisWeight = 1f,
			rootSphereCastRadius = 0.1f,
			quality = (Grounding.Quality)((ulong)2L)
		};

		// Token: 0x04002E47 RID: 11847
		[FieldOffset(Offset = "0x48")]
		[Token(Token = "0x4002E47")]
		[Range(0f, 1f)]
		[Tooltip("The weight of rotating the character root to the ground angle (range: 0 - 1).")]
		public float rootRotationWeight = 0.5f;

		// Token: 0x04002E48 RID: 11848
		[FieldOffset(Offset = "0x4C")]
		[Token(Token = "0x4002E48")]
		[Tooltip("The maximum angle of rotating the quadruped downwards (going downhill, range: -90 - 0).")]
		[Range(-90f, 0f)]
		public float minRootRotation = -25f;

		// Token: 0x04002E49 RID: 11849
		[FieldOffset(Offset = "0x50")]
		[Token(Token = "0x4002E49")]
		[Range(0f, 90f)]
		[Tooltip("The maximum angle of rotating the quadruped upwards (going uphill, range: 0 - 90).")]
		public float maxRootRotation = 45f;

		// Token: 0x04002E4A RID: 11850
		[FieldOffset(Offset = "0x54")]
		[Token(Token = "0x4002E4A")]
		[Tooltip("The speed of interpolating the character root rotation (range: 0 - inf).")]
		public float rootRotationSpeed = 5f;

		// Token: 0x04002E4B RID: 11851
		[FieldOffset(Offset = "0x58")]
		[Token(Token = "0x4002E4B")]
		[Tooltip("The maximum IK offset for the legs (range: 0 - inf).")]
		public float maxLegOffset = 0.5f;

		// Token: 0x04002E4C RID: 11852
		[FieldOffset(Offset = "0x5C")]
		[Token(Token = "0x4002E4C")]
		[Tooltip("The maximum IK offset for the forelegs (range: 0 - inf).")]
		public float maxForeLegOffset = 0.5f;

		// Token: 0x04002E4D RID: 11853
		[FieldOffset(Offset = "0x60")]
		[Token(Token = "0x4002E4D")]
		[Range(0f, 1f)]
		[Tooltip("The weight of maintaining the head's rotation as it was before solving the Grounding (range: 0 - 1).")]
		public float maintainHeadRotationWeight = 0.5f;

		// Token: 0x04002E4E RID: 11854
		[FieldOffset(Offset = "0x68")]
		[Token(Token = "0x4002E4E")]
		[Tooltip("The root Transform of the character, with the rigidbody and the collider.")]
		public Transform characterRoot;

		// Token: 0x04002E4F RID: 11855
		[FieldOffset(Offset = "0x70")]
		[Token(Token = "0x4002E4F")]
		[Tooltip("The pelvis transform. Common ancestor of both legs and the spine.")]
		public Transform pelvis;

		// Token: 0x04002E50 RID: 11856
		[FieldOffset(Offset = "0x78")]
		[Token(Token = "0x4002E50")]
		[Tooltip("The last bone in the spine that is the common parent for both forelegs.")]
		public Transform lastSpineBone;

		// Token: 0x04002E51 RID: 11857
		[FieldOffset(Offset = "0x80")]
		[Token(Token = "0x4002E51")]
		[Tooltip("The head (optional, if you intend to maintain it's rotation).")]
		public Transform head;

		// Token: 0x04002E52 RID: 11858
		[FieldOffset(Offset = "0x88")]
		[Token(Token = "0x4002E52")]
		public IK[] legs;

		// Token: 0x04002E53 RID: 11859
		[FieldOffset(Offset = "0x90")]
		[Token(Token = "0x4002E53")]
		public IK[] forelegs;

		// Token: 0x04002E54 RID: 11860
		[FieldOffset(Offset = "0x98")]
		[Token(Token = "0x4002E54")]
		[HideInInspector]
		public Vector3 gravity;

		// Token: 0x04002E55 RID: 11861
		[FieldOffset(Offset = "0xA8")]
		[Token(Token = "0x4002E55")]
		private GrounderQuadruped.Foot[] feet;

		// Token: 0x04002E56 RID: 11862
		[FieldOffset(Offset = "0xB0")]
		[Token(Token = "0x4002E56")]
		private Vector3 animatedPelvisLocalPosition;

		// Token: 0x04002E57 RID: 11863
		[FieldOffset(Offset = "0xBC")]
		[Token(Token = "0x4002E57")]
		private Quaternion animatedPelvisLocalRotation;

		// Token: 0x04002E58 RID: 11864
		[FieldOffset(Offset = "0xCC")]
		[Token(Token = "0x4002E58")]
		private Quaternion animatedHeadLocalRotation;

		// Token: 0x04002E59 RID: 11865
		[FieldOffset(Offset = "0xDC")]
		[Token(Token = "0x4002E59")]
		private Vector3 solvedPelvisLocalPosition;

		// Token: 0x04002E5A RID: 11866
		[FieldOffset(Offset = "0xE8")]
		[Token(Token = "0x4002E5A")]
		private Quaternion solvedPelvisLocalRotation;

		// Token: 0x04002E5B RID: 11867
		[FieldOffset(Offset = "0xF8")]
		[Token(Token = "0x4002E5B")]
		private Quaternion solvedHeadLocalRotation;

		// Token: 0x04002E5C RID: 11868
		[FieldOffset(Offset = "0x108")]
		[Token(Token = "0x4002E5C")]
		private int solvedFeet;

		// Token: 0x04002E5D RID: 11869
		[FieldOffset(Offset = "0x10C")]
		[Token(Token = "0x4002E5D")]
		private bool solved;

		// Token: 0x04002E5E RID: 11870
		[FieldOffset(Offset = "0x110")]
		[Token(Token = "0x4002E5E")]
		private float angle;

		// Token: 0x04002E5F RID: 11871
		[FieldOffset(Offset = "0x118")]
		[Token(Token = "0x4002E5F")]
		private Transform forefeetRoot;

		// Token: 0x04002E60 RID: 11872
		[FieldOffset(Offset = "0x120")]
		[Token(Token = "0x4002E60")]
		private Quaternion headRotation;

		// Token: 0x04002E61 RID: 11873
		[FieldOffset(Offset = "0x130")]
		[Token(Token = "0x4002E61")]
		private float lastWeight;

		// Token: 0x02000401 RID: 1025
		[Token(Token = "0x2000401")]
		public struct Foot
		{
			// Token: 0x060024AE RID: 9390 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60024AE")]
			[Address(RVA = "0x5FA3B0", Offset = "0x5F91B0", VA = "0x1805FA3B0")]
			public Foot(IKSolver solver, Transform transform)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x04002E62 RID: 11874
			[FieldOffset(Offset = "0x0")]
			[Token(Token = "0x4002E62")]
			public IKSolver solver;

			// Token: 0x04002E63 RID: 11875
			[FieldOffset(Offset = "0x8")]
			[Token(Token = "0x4002E63")]
			public Transform transform;

			// Token: 0x04002E64 RID: 11876
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x4002E64")]
			public Quaternion rotation;

			// Token: 0x04002E65 RID: 11877
			[FieldOffset(Offset = "0x20")]
			[Token(Token = "0x4002E65")]
			public Grounding.Leg leg;
		}
	}
}
