using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using Cpp2IlInjected;
using UnityEngine;

namespace Obi
{
	// Token: 0x02000534 RID: 1332
	[Token(Token = "0x2000534")]
	[DisallowMultipleComponent]
	[ExecuteInEditMode]
	[AddComponentMenu("Physics/Obi/Obi Solver")]
	public sealed class ObiSolver : MonoBehaviour
	{
		// Token: 0x14000015 RID: 21
		// (add) Token: 0x06002E67 RID: 11879 RVA: 0x0006540C File Offset: 0x0006360C
		// (remove) Token: 0x06002E68 RID: 11880 RVA: 0x0006543C File Offset: 0x0006363C
		[Token(Token = "0x14000015")]
		public event EventHandler OnFrameBegin
		{
			[Token(Token = "0x6002E67")]
			[Address(RVA = "0xE5E080", Offset = "0xE5D080", VA = "0x180E5E080")]
			[CompilerGenerated]
			add
			{
				EventHandler onFrameBegin = this.OnFrameBegin;
				Delegate @delegate = Delegate.Combine(onFrameBegin, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onFrameBegin)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
			[Token(Token = "0x6002E68")]
			[Address(RVA = "0xE5E840", Offset = "0xE5D840", VA = "0x180E5E840")]
			[CompilerGenerated]
			remove
			{
				EventHandler onFrameBegin = this.OnFrameBegin;
				Delegate @delegate = Delegate.Remove(onFrameBegin, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onFrameBegin)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
		}

		// Token: 0x14000016 RID: 22
		// (add) Token: 0x06002E69 RID: 11881 RVA: 0x000020D3 File Offset: 0x000002D3
		// (remove) Token: 0x06002E6A RID: 11882 RVA: 0x0006546C File Offset: 0x0006366C
		[Token(Token = "0x14000016")]
		public event EventHandler OnStepBegin
		{
			[Token(Token = "0x6002E69")]
			[Address(RVA = "0xE5E1C0", Offset = "0xE5D1C0", VA = "0x180E5E1C0")]
			[CompilerGenerated]
			add
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}
			[Token(Token = "0x6002E6A")]
			[Address(RVA = "0xE5E980", Offset = "0xE5D980", VA = "0x180E5E980")]
			[CompilerGenerated]
			remove
			{
				EventHandler onStepBegin = this.OnStepBegin;
				Delegate @delegate = Delegate.Remove(onStepBegin, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onStepBegin)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
		}

		// Token: 0x14000017 RID: 23
		// (add) Token: 0x06002E6B RID: 11883 RVA: 0x0006549C File Offset: 0x0006369C
		// (remove) Token: 0x06002E6C RID: 11884 RVA: 0x000654CC File Offset: 0x000636CC
		[Token(Token = "0x14000017")]
		public event EventHandler OnFixedParticlesUpdated
		{
			[Token(Token = "0x6002E6B")]
			[Address(RVA = "0xE5DF40", Offset = "0xE5CF40", VA = "0x180E5DF40")]
			[CompilerGenerated]
			add
			{
				EventHandler onFixedParticlesUpdated = this.OnFixedParticlesUpdated;
				Delegate @delegate = Delegate.Combine(onFixedParticlesUpdated, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onFixedParticlesUpdated)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
			[Token(Token = "0x6002E6C")]
			[Address(RVA = "0xE5E700", Offset = "0xE5D700", VA = "0x180E5E700")]
			[CompilerGenerated]
			remove
			{
				EventHandler onFixedParticlesUpdated = this.OnFixedParticlesUpdated;
				Delegate @delegate = Delegate.Remove(onFixedParticlesUpdated, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onFixedParticlesUpdated)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
		}

		// Token: 0x14000018 RID: 24
		// (add) Token: 0x06002E6D RID: 11885 RVA: 0x000654FC File Offset: 0x000636FC
		// (remove) Token: 0x06002E6E RID: 11886 RVA: 0x0006552C File Offset: 0x0006372C
		[Token(Token = "0x14000018")]
		public event EventHandler OnStepEnd
		{
			[Token(Token = "0x6002E6D")]
			[Address(RVA = "0xE5E260", Offset = "0xE5D260", VA = "0x180E5E260")]
			[CompilerGenerated]
			add
			{
				EventHandler onStepEnd = this.OnStepEnd;
				Delegate @delegate = Delegate.Combine(onStepEnd, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onStepEnd)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
			[Token(Token = "0x6002E6E")]
			[Address(RVA = "0xE5EA20", Offset = "0xE5DA20", VA = "0x180E5EA20")]
			[CompilerGenerated]
			remove
			{
				EventHandler onStepEnd = this.OnStepEnd;
				Delegate @delegate = Delegate.Remove(onStepEnd, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onStepEnd)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
		}

		// Token: 0x14000019 RID: 25
		// (add) Token: 0x06002E6F RID: 11887 RVA: 0x0006555C File Offset: 0x0006375C
		// (remove) Token: 0x06002E70 RID: 11888 RVA: 0x0006558C File Offset: 0x0006378C
		[Token(Token = "0x14000019")]
		public event EventHandler OnBeforePositionInterpolation
		{
			[Token(Token = "0x6002E6F")]
			[Address(RVA = "0xE5DE00", Offset = "0xE5CE00", VA = "0x180E5DE00")]
			[CompilerGenerated]
			add
			{
				EventHandler onBeforePositionInterpolation = this.OnBeforePositionInterpolation;
				Delegate @delegate = Delegate.Combine(onBeforePositionInterpolation, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onBeforePositionInterpolation)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
			[Token(Token = "0x6002E70")]
			[Address(RVA = "0xE5E5C0", Offset = "0xE5D5C0", VA = "0x180E5E5C0")]
			[CompilerGenerated]
			remove
			{
				EventHandler onBeforePositionInterpolation = this.OnBeforePositionInterpolation;
				Delegate @delegate = Delegate.Remove(onBeforePositionInterpolation, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onBeforePositionInterpolation)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
		}

		// Token: 0x1400001A RID: 26
		// (add) Token: 0x06002E71 RID: 11889 RVA: 0x000655BC File Offset: 0x000637BC
		// (remove) Token: 0x06002E72 RID: 11890 RVA: 0x000655EC File Offset: 0x000637EC
		[Token(Token = "0x1400001A")]
		public event EventHandler OnBeforeActorsFrameEnd
		{
			[Token(Token = "0x6002E71")]
			[Address(RVA = "0xE5DD60", Offset = "0xE5CD60", VA = "0x180E5DD60")]
			[CompilerGenerated]
			add
			{
				EventHandler onBeforeActorsFrameEnd = this.OnBeforeActorsFrameEnd;
				Delegate @delegate = Delegate.Combine(onBeforeActorsFrameEnd, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onBeforeActorsFrameEnd)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
			[Token(Token = "0x6002E72")]
			[Address(RVA = "0xE5E520", Offset = "0xE5D520", VA = "0x180E5E520")]
			[CompilerGenerated]
			remove
			{
				EventHandler onBeforeActorsFrameEnd = this.OnBeforeActorsFrameEnd;
				Delegate @delegate = Delegate.Remove(onBeforeActorsFrameEnd, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onBeforeActorsFrameEnd)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
		}

		// Token: 0x1400001B RID: 27
		// (add) Token: 0x06002E73 RID: 11891 RVA: 0x0006561C File Offset: 0x0006381C
		// (remove) Token: 0x06002E74 RID: 11892 RVA: 0x0006564C File Offset: 0x0006384C
		[Token(Token = "0x1400001B")]
		public event EventHandler OnFrameEnd
		{
			[Token(Token = "0x6002E73")]
			[Address(RVA = "0xE5E120", Offset = "0xE5D120", VA = "0x180E5E120")]
			[CompilerGenerated]
			add
			{
				EventHandler onFrameEnd = this.OnFrameEnd;
				Delegate @delegate = Delegate.Combine(onFrameEnd, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onFrameEnd)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
			[Token(Token = "0x6002E74")]
			[Address(RVA = "0xE5E8E0", Offset = "0xE5D8E0", VA = "0x180E5E8E0")]
			[CompilerGenerated]
			remove
			{
				EventHandler onFrameEnd = this.OnFrameEnd;
				Delegate @delegate = Delegate.Remove(onFrameEnd, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onFrameEnd)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
		}

		// Token: 0x1400001C RID: 28
		// (add) Token: 0x06002E75 RID: 11893 RVA: 0x0006567C File Offset: 0x0006387C
		// (remove) Token: 0x06002E76 RID: 11894 RVA: 0x000656AC File Offset: 0x000638AC
		[Token(Token = "0x1400001C")]
		public event EventHandler<ObiSolver.ObiCollisionEventArgs> OnCollision
		{
			[Token(Token = "0x6002E75")]
			[Address(RVA = "0xE5DEA0", Offset = "0xE5CEA0", VA = "0x180E5DEA0")]
			[CompilerGenerated]
			add
			{
				EventHandler<ObiSolver.ObiCollisionEventArgs> onCollision = this.OnCollision;
				Delegate @delegate = Delegate.Combine(onCollision, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onCollision)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
			[Token(Token = "0x6002E76")]
			[Address(RVA = "0xE5E660", Offset = "0xE5D660", VA = "0x180E5E660")]
			[CompilerGenerated]
			remove
			{
				EventHandler<ObiSolver.ObiCollisionEventArgs> onCollision = this.OnCollision;
				Delegate @delegate = Delegate.Remove(onCollision, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onCollision)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
		}

		// Token: 0x1400001D RID: 29
		// (add) Token: 0x06002E77 RID: 11895 RVA: 0x000656DC File Offset: 0x000638DC
		// (remove) Token: 0x06002E78 RID: 11896 RVA: 0x0006570C File Offset: 0x0006390C
		[Token(Token = "0x1400001D")]
		public event EventHandler<ObiSolver.ObiFluidEventArgs> OnFluidUpdated
		{
			[Token(Token = "0x6002E77")]
			[Address(RVA = "0xE5DFE0", Offset = "0xE5CFE0", VA = "0x180E5DFE0")]
			[CompilerGenerated]
			add
			{
				EventHandler<ObiSolver.ObiFluidEventArgs> onFluidUpdated = this.OnFluidUpdated;
				Delegate @delegate = Delegate.Combine(onFluidUpdated, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onFluidUpdated)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
			[Token(Token = "0x6002E78")]
			[Address(RVA = "0xE5E7A0", Offset = "0xE5D7A0", VA = "0x180E5E7A0")]
			[CompilerGenerated]
			remove
			{
				EventHandler<ObiSolver.ObiFluidEventArgs> onFluidUpdated = this.OnFluidUpdated;
				Delegate @delegate = Delegate.Remove(onFluidUpdated, value);
				if (@delegate == 0 || @delegate != 0)
				{
					while (@delegate != onFluidUpdated)
					{
					}
					return;
				}
				throw new InvalidCastException();
			}
		}

		// Token: 0x17000329 RID: 809
		// (get) Token: 0x06002E79 RID: 11897 RVA: 0x0006573C File Offset: 0x0006393C
		[Token(Token = "0x17000329")]
		public IntPtr OniSolver
		{
			[Token(Token = "0x6002E79")]
			[Address(RVA = "0x339D60", Offset = "0x338D60", VA = "0x180339D60")]
			get
			{
				return this.oniSolver;
			}
		}

		// Token: 0x1700032A RID: 810
		// (get) Token: 0x06002E7A RID: 11898 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x1700032A")]
		public Bounds Bounds
		{
			[Token(Token = "0x6002E7A")]
			[Address(RVA = "0xE5E490", Offset = "0xE5D490", VA = "0x180E5E490")]
			get
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}
		}

		// Token: 0x1700032B RID: 811
		// (get) Token: 0x06002E7B RID: 11899 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x1700032B")]
		public Matrix4x4 LastTransform
		{
			[Token(Token = "0x6002E7B")]
			[Address(RVA = "0xE5E4F0", Offset = "0xE5D4F0", VA = "0x180E5E4F0")]
			get
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}
		}

		// Token: 0x1700032C RID: 812
		// (get) Token: 0x06002E7C RID: 11900 RVA: 0x00065750 File Offset: 0x00063950
		[Token(Token = "0x1700032C")]
		public bool IsVisible
		{
			[Token(Token = "0x6002E7C")]
			[Address(RVA = "0xE5E4E0", Offset = "0xE5D4E0", VA = "0x180E5E4E0")]
			get
			{
				return this.isVisible;
			}
		}

		// Token: 0x1700032D RID: 813
		// (get) Token: 0x06002E7D RID: 11901 RVA: 0x00065764 File Offset: 0x00063964
		[Token(Token = "0x1700032D")]
		public int AllocParticleCount
		{
			[Token(Token = "0x6002E7D")]
			[Address(RVA = "0xE5E480", Offset = "0xE5D480", VA = "0x180E5E480")]
			get
			{
				return this.allocatedParticleCount;
			}
		}

		// Token: 0x1700032E RID: 814
		// (get) Token: 0x06002E7E RID: 11902 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x1700032E")]
		public bool IsUpdating
		{
			[Token(Token = "0x6002E7E")]
			[Address(RVA = "0xE5E4B0", Offset = "0xE5D4B0", VA = "0x180E5E4B0")]
			get
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}
		}

		// Token: 0x06002E7F RID: 11903 RVA: 0x00065778 File Offset: 0x00063978
		[Token(Token = "0x6002E7F")]
		[Address(RVA = "0xE5C7B0", Offset = "0xE5B7B0", VA = "0x180E5C7B0")]
		public void RequireRenderablePositions()
		{
		}

		// Token: 0x06002E80 RID: 11904 RVA: 0x00065788 File Offset: 0x00063988
		[Token(Token = "0x6002E80")]
		[Address(RVA = "0xE5C5C0", Offset = "0xE5B5C0", VA = "0x180E5C5C0")]
		public void RelinquishRenderablePositions()
		{
			int num = this.renderablePositionsClients;
			if (num > 0)
			{
				this.renderablePositionsClients = num;
			}
		}

		// Token: 0x06002E81 RID: 11905 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E81")]
		[Address(RVA = "0xE5B5B0", Offset = "0xE5A5B0", VA = "0x180E5B5B0")]
		private void Awake()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E82 RID: 11906 RVA: 0x000657A8 File Offset: 0x000639A8
		[Token(Token = "0x6002E82")]
		[Address(RVA = "0xE5CA00", Offset = "0xE5BA00", VA = "0x180E5CA00")]
		private void Start()
		{
			if (Application.isPlaying)
			{
				ObiColliderBase[] array = UnityEngine.Object.FindObjectsOfType<ObiColliderBase>();
				int num = 0;
				int length = array.Length;
				if (num < length)
				{
					array[num].RegisterInSolver(this, true);
					num++;
				}
			}
		}

		// Token: 0x06002E83 RID: 11907 RVA: 0x000657EC File Offset: 0x000639EC
		[Token(Token = "0x6002E83")]
		[Address(RVA = "0xE5C3C0", Offset = "0xE5B3C0", VA = "0x180E5C3C0")]
		private void OnDestroy()
		{
			if (Application.isPlaying)
			{
				this.Teardown();
				ObiColliderBase[] array = UnityEngine.Object.FindObjectsOfType<ObiColliderBase>();
				int num = 0;
				int length = array.Length;
				if (num < length)
				{
					array[num].RemoveFromSolver(this);
					num++;
				}
			}
		}

		// Token: 0x06002E84 RID: 11908 RVA: 0x00065834 File Offset: 0x00063A34
		[Token(Token = "0x6002E84")]
		[Address(RVA = "0xE5C530", Offset = "0xE5B530", VA = "0x180E5C530")]
		private void OnEnable()
		{
			if (!Application.isPlaying)
			{
				this.Initialize();
			}
			Coroutine coroutine = base.StartCoroutine("RunLateFixedUpdate");
			ObiArbiter.RegisterSolver(this);
		}

		// Token: 0x06002E85 RID: 11909 RVA: 0x00065864 File Offset: 0x00063A64
		[Token(Token = "0x6002E85")]
		[Address(RVA = "0xE5C4A0", Offset = "0xE5B4A0", VA = "0x180E5C4A0")]
		private void OnDisable()
		{
			if (!Application.isPlaying)
			{
				this.Teardown();
			}
			base.StopCoroutine("RunLateFixedUpdate");
			ObiArbiter.UnregisterSolver(this);
		}

		// Token: 0x06002E86 RID: 11910 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E86")]
		[Address(RVA = "0xE5BF10", Offset = "0xE5AF10", VA = "0x180E5BF10")]
		public void Initialize()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E87 RID: 11911 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E87")]
		[Address(RVA = "0xE5CAE0", Offset = "0xE5BAE0", VA = "0x180E5CAE0")]
		private void Teardown()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E88 RID: 11912 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E88")]
		[Address(RVA = "0xE5AFB0", Offset = "0xE59FB0", VA = "0x180E5AFB0")]
		public bool AddActor(ObiActor actor, int numParticles)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E89 RID: 11913 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E89")]
		[Address(RVA = "0xE5C5E0", Offset = "0xE5B5E0", VA = "0x180E5C5E0")]
		public int RemoveActor(ObiActor actor)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E8A RID: 11914 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E8A")]
		[Address(RVA = "0xE5D5C0", Offset = "0xE5C5C0", VA = "0x180E5D5C0")]
		public void UpdateParameters()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E8B RID: 11915 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E8B")]
		[Address(RVA = "0xE5CF80", Offset = "0xE5BF80", VA = "0x180E5CF80")]
		public void UpdateActiveParticles()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E8C RID: 11916 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E8C")]
		[Address(RVA = "0xE5D110", Offset = "0xE5C110", VA = "0x180E5D110")]
		public void UpdateEmitterMaterials()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E8D RID: 11917 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E8D")]
		[Address(RVA = "0xE5E300", Offset = "0xE5D300", VA = "0x180E5E300")]
		private void emitterMaterial_OnChangesMade(object sender, ObiEmitterMaterial.MaterialChangeEventArgs e)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E8E RID: 11918 RVA: 0x00065894 File Offset: 0x00063A94
		[Token(Token = "0x6002E8E")]
		[Address(RVA = "0xE5AFA0", Offset = "0xE59FA0", VA = "0x180E5AFA0")]
		public void AccumulateSimulationTime(float dt)
		{
			Oni.AddSimulationTime(this.oniSolver, dt);
		}

		// Token: 0x06002E8F RID: 11919 RVA: 0x000658B0 File Offset: 0x00063AB0
		[Token(Token = "0x6002E8F")]
		[Address(RVA = "0xE5C7C0", Offset = "0xE5B7C0", VA = "0x180E5C7C0")]
		public void ResetSimulationTime()
		{
			Oni.ResetSimulationTime(this.oniSolver);
		}

		// Token: 0x06002E90 RID: 11920 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E90")]
		[Address(RVA = "0xE5C840", Offset = "0xE5B840", VA = "0x180E5C840")]
		public void SimulateStep(float stepTime)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E91 RID: 11921 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E91")]
		[Address(RVA = "0xE5B950", Offset = "0xE5A950", VA = "0x180E5B950")]
		public void EndFrame(float frameDelta)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E92 RID: 11922 RVA: 0x000658C8 File Offset: 0x00063AC8
		[Token(Token = "0x6002E92")]
		[Address(RVA = "0xE5CD90", Offset = "0xE5BD90", VA = "0x180E5CD90")]
		private void TriggerFluidUpdateEvents()
		{
			int constraintCount = Oni.GetConstraintCount(this.oniSolver, 6);
			if (constraintCount > 0 && this.OnFluidUpdated != (ulong)0L)
			{
				int[] array = new int[constraintCount];
				Vector4[] array2 = new Vector4[this.maxParticles];
				float[] array3 = new float[this.maxParticles];
				IntPtr intPtr = this.oniSolver;
				Oni.GetActiveConstraintIndices(intPtr, array, constraintCount, 6);
				int num = this.maxParticles;
				int num2 = 0;
				int particleVorticities = Oni.GetParticleVorticities(this.oniSolver, array2, num, num2);
				int num3 = this.maxParticles;
				int num4 = 0;
				int particleDensities = Oni.GetParticleDensities(this.oniSolver, array3, num3, num4);
				EventHandler<ObiSolver.ObiFluidEventArgs> onFluidUpdated = this.OnFluidUpdated;
				ObiSolver.ObiFluidEventArgs obiFluidEventArgs = new ObiSolver.ObiFluidEventArgs(array, array2, array3);
				onFluidUpdated(this, obiFluidEventArgs);
			}
		}

		// Token: 0x06002E93 RID: 11923 RVA: 0x00065988 File Offset: 0x00063B88
		[Token(Token = "0x6002E93")]
		[Address(RVA = "0xE5CCA0", Offset = "0xE5BCA0", VA = "0x180E5CCA0")]
		private void TriggerCollisionEvents()
		{
			int constraintCount = Oni.GetConstraintCount(this.oniSolver, 7);
			if (this.OnCollision != (ulong)0L)
			{
				Oni.Contact[] array = new Oni.Contact[constraintCount];
				if (constraintCount > 0)
				{
					Oni.GetCollisionContacts(this.oniSolver, array, constraintCount);
				}
				EventHandler<ObiSolver.ObiCollisionEventArgs> onCollision = this.OnCollision;
				ObiSolver.ObiCollisionEventArgs obiCollisionEventArgs = new ObiSolver.ObiCollisionEventArgs(array);
				onCollision(this, obiCollisionEventArgs);
			}
		}

		// Token: 0x06002E94 RID: 11924 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E94")]
		[Address(RVA = "0xE5B4A0", Offset = "0xE5A4A0", VA = "0x180E5B4A0")]
		private bool AreBoundsValid(Bounds bounds)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E95 RID: 11925 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E95")]
		[Address(RVA = "0xE5B630", Offset = "0xE5A630", VA = "0x180E5B630")]
		private void CheckVisibility()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E96 RID: 11926 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E96")]
		[Address(RVA = "0xE5D770", Offset = "0xE5C770", VA = "0x180E5D770")]
		private void Update()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E97 RID: 11927 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E97")]
		[Address(RVA = "0xE5C7D0", Offset = "0xE5B7D0", VA = "0x180E5C7D0")]
		private IEnumerator RunLateFixedUpdate()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E98 RID: 11928 RVA: 0x000659E4 File Offset: 0x00063BE4
		[Token(Token = "0x6002E98")]
		[Address(RVA = "0xE5BEB0", Offset = "0xE5AEB0", VA = "0x180E5BEB0")]
		private void FixedUpdate()
		{
			if (Application.isPlaying && this.initialized && this.simulate && (this.simulateWhenInvisible || this.isVisible) && this.simulationOrder == ObiSolver.SimulationOrder.FixedUpdate)
			{
				float fixedDeltaTime = Time.fixedDeltaTime;
				this.SimulateStep(fixedDeltaTime);
			}
		}

		// Token: 0x06002E99 RID: 11929 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E99")]
		[Address(RVA = "0xE5B250", Offset = "0xE5A250", VA = "0x180E5B250")]
		public void AllSolversStepEnd()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x06002E9A RID: 11930 RVA: 0x00065A38 File Offset: 0x00063C38
		[Token(Token = "0x6002E9A")]
		[Address(RVA = "0xE5C2E0", Offset = "0xE5B2E0", VA = "0x180E5C2E0")]
		private void LateUpdate()
		{
			if (Application.isPlaying && this.initialized && this.simulate && (this.simulateWhenInvisible || this.isVisible) && this.simulationOrder == ObiSolver.SimulationOrder.LateUpdate)
			{
				float deltaTime = Time.deltaTime;
				float num = this.smoothDelta;
				float num2 = Mathf.Lerp(deltaTime, num, 0.95f);
				IntPtr intPtr = this.oniSolver;
				num = num2;
				this.smoothDelta = num2;
				Oni.AddSimulationTime(intPtr, num);
				float num3 = this.smoothDelta;
				this.SimulateStep(num3);
			}
			if (Application.isPlaying)
			{
				if (this.simulationOrder == ObiSolver.SimulationOrder.LateUpdate)
				{
				}
				float fixedDeltaTime = Time.fixedDeltaTime;
				this.EndFrame(fixedDeltaTime);
				EventHandler onFrameEnd = this.OnFrameEnd;
				if (onFrameEnd != 0)
				{
					int num4 = 0;
					onFrameEnd(this, num4);
					return;
				}
			}
		}

		// Token: 0x06002E9B RID: 11931 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002E9B")]
		[Address(RVA = "0xE5D8F0", Offset = "0xE5C8F0", VA = "0x180E5D8F0")]
		public ObiSolver()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x04003703 RID: 14083
		[Token(Token = "0x4003703")]
		public const int MAX_NEIGHBOURS = 92;

		// Token: 0x04003704 RID: 14084
		[Token(Token = "0x4003704")]
		public const int CONSTRAINT_GROUPS = 12;

		// Token: 0x0400370E RID: 14094
		[FieldOffset(Offset = "0x60")]
		[Token(Token = "0x400370E")]
		public int maxParticles;

		// Token: 0x0400370F RID: 14095
		[FieldOffset(Offset = "0x64")]
		[Token(Token = "0x400370F")]
		[HideInInspector]
		[NonSerialized]
		public bool simulate;

		// Token: 0x04003710 RID: 14096
		[FieldOffset(Offset = "0x65")]
		[Token(Token = "0x4003710")]
		[Tooltip("If enabled, will force the solver to keep simulating even when not visible from any camera.")]
		public bool simulateWhenInvisible;

		// Token: 0x04003711 RID: 14097
		[FieldOffset(Offset = "0x66")]
		[Token(Token = "0x4003711")]
		[Tooltip("If enabled, the solver object transform will be used as the frame of reference for all actors using this solver, instead of the world's frame.")]
		public bool simulateInLocalSpace;

		// Token: 0x04003712 RID: 14098
		[FieldOffset(Offset = "0x68")]
		[Token(Token = "0x4003712")]
		[Tooltip("Determines when will the solver update particles.")]
		public ObiSolver.SimulationOrder simulationOrder;

		// Token: 0x04003713 RID: 14099
		[FieldOffset(Offset = "0x6C")]
		[Token(Token = "0x4003713")]
		public LayerMask collisionLayers;

		// Token: 0x04003714 RID: 14100
		[FieldOffset(Offset = "0x70")]
		[Token(Token = "0x4003714")]
		public Oni.SolverParameters parameters;

		// Token: 0x04003715 RID: 14101
		[FieldOffset(Offset = "0x98")]
		[Token(Token = "0x4003715")]
		[HideInInspector]
		[NonSerialized]
		public List<ObiActor> actors;

		// Token: 0x04003716 RID: 14102
		[FieldOffset(Offset = "0xA0")]
		[Token(Token = "0x4003716")]
		private int allocatedParticleCount;

		// Token: 0x04003717 RID: 14103
		[FieldOffset(Offset = "0xA8")]
		[Token(Token = "0x4003717")]
		[HideInInspector]
		[NonSerialized]
		public ObiSolver.ParticleInActor[] particleToActor;

		// Token: 0x04003718 RID: 14104
		[FieldOffset(Offset = "0xB0")]
		[Token(Token = "0x4003718")]
		[HideInInspector]
		[NonSerialized]
		public int[] materialIndices;

		// Token: 0x04003719 RID: 14105
		[FieldOffset(Offset = "0xB8")]
		[Token(Token = "0x4003719")]
		[HideInInspector]
		[NonSerialized]
		public int[] fluidMaterialIndices;

		// Token: 0x0400371A RID: 14106
		[FieldOffset(Offset = "0xC0")]
		[Token(Token = "0x400371A")]
		private int[] activeParticles;

		// Token: 0x0400371B RID: 14107
		[FieldOffset(Offset = "0xC8")]
		[Token(Token = "0x400371B")]
		private List<ObiEmitterMaterial> emitterMaterials;

		// Token: 0x0400371C RID: 14108
		[FieldOffset(Offset = "0xD0")]
		[Token(Token = "0x400371C")]
		[HideInInspector]
		[NonSerialized]
		public Vector4[] renderablePositions;

		// Token: 0x0400371D RID: 14109
		[FieldOffset(Offset = "0xD8")]
		[Token(Token = "0x400371D")]
		[HideInInspector]
		public int[] constraintsOrder;

		// Token: 0x0400371E RID: 14110
		[FieldOffset(Offset = "0xE0")]
		[Token(Token = "0x400371E")]
		public Oni.ConstraintParameters distanceConstraintParameters;

		// Token: 0x0400371F RID: 14111
		[FieldOffset(Offset = "0xED")]
		[Token(Token = "0x400371F")]
		public Oni.ConstraintParameters bendingConstraintParameters;

		// Token: 0x04003720 RID: 14112
		[FieldOffset(Offset = "0xFA")]
		[Token(Token = "0x4003720")]
		public Oni.ConstraintParameters particleCollisionConstraintParameters;

		// Token: 0x04003721 RID: 14113
		[FieldOffset(Offset = "0x107")]
		[Token(Token = "0x4003721")]
		public Oni.ConstraintParameters collisionConstraintParameters;

		// Token: 0x04003722 RID: 14114
		[FieldOffset(Offset = "0x114")]
		[Token(Token = "0x4003722")]
		public Oni.ConstraintParameters skinConstraintParameters;

		// Token: 0x04003723 RID: 14115
		[FieldOffset(Offset = "0x121")]
		[Token(Token = "0x4003723")]
		public Oni.ConstraintParameters volumeConstraintParameters;

		// Token: 0x04003724 RID: 14116
		[FieldOffset(Offset = "0x12E")]
		[Token(Token = "0x4003724")]
		public Oni.ConstraintParameters tetherConstraintParameters;

		// Token: 0x04003725 RID: 14117
		[FieldOffset(Offset = "0x13B")]
		[Token(Token = "0x4003725")]
		public Oni.ConstraintParameters pinConstraintParameters;

		// Token: 0x04003726 RID: 14118
		[FieldOffset(Offset = "0x148")]
		[Token(Token = "0x4003726")]
		public Oni.ConstraintParameters stitchConstraintParameters;

		// Token: 0x04003727 RID: 14119
		[FieldOffset(Offset = "0x155")]
		[Token(Token = "0x4003727")]
		public Oni.ConstraintParameters densityConstraintParameters;

		// Token: 0x04003728 RID: 14120
		[FieldOffset(Offset = "0x168")]
		[Token(Token = "0x4003728")]
		private IntPtr oniSolver;

		// Token: 0x04003729 RID: 14121
		[FieldOffset(Offset = "0x170")]
		[Token(Token = "0x4003729")]
		private ObiEmitterMaterial defaultFluidMaterial;

		// Token: 0x0400372A RID: 14122
		[FieldOffset(Offset = "0x178")]
		[Token(Token = "0x400372A")]
		private Bounds bounds;

		// Token: 0x0400372B RID: 14123
		[FieldOffset(Offset = "0x190")]
		[Token(Token = "0x400372B")]
		private Matrix4x4 lastTransform;

		// Token: 0x0400372C RID: 14124
		[FieldOffset(Offset = "0x1D0")]
		[Token(Token = "0x400372C")]
		private bool initialized;

		// Token: 0x0400372D RID: 14125
		[FieldOffset(Offset = "0x1D1")]
		[Token(Token = "0x400372D")]
		private bool isVisible;

		// Token: 0x0400372E RID: 14126
		[FieldOffset(Offset = "0x1D4")]
		[Token(Token = "0x400372E")]
		private float smoothDelta;

		// Token: 0x0400372F RID: 14127
		[FieldOffset(Offset = "0x1D8")]
		[Token(Token = "0x400372F")]
		private int renderablePositionsClients;

		// Token: 0x02000535 RID: 1333
		[Token(Token = "0x2000535")]
		public enum SimulationOrder
		{
			// Token: 0x04003731 RID: 14129
			[Token(Token = "0x4003731")]
			FixedUpdate,
			// Token: 0x04003732 RID: 14130
			[Token(Token = "0x4003732")]
			AfterFixedUpdate,
			// Token: 0x04003733 RID: 14131
			[Token(Token = "0x4003733")]
			LateUpdate
		}

		// Token: 0x02000536 RID: 1334
		[Token(Token = "0x2000536")]
		public class ObiCollisionEventArgs : EventArgs
		{
			// Token: 0x06002E9D RID: 11933 RVA: 0x00065B08 File Offset: 0x00063D08
			[Token(Token = "0x6002E9D")]
			[Address(RVA = "0x69A010", Offset = "0x699010", VA = "0x18069A010")]
			public ObiCollisionEventArgs(Oni.Contact[] contacts)
			{
				/*
An exception occurred when decompiling this method (06002E9D)

ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void Obi.ObiSolver/ObiCollisionEventArgs::.ctor(Oni/Contact[])

 ---> System.Exception: Basic block has to end with unconditional control flow. 
{; 	Block_0:; 	call:void(EventArgs::.ctor, ldloc:ObiCollisionEventArgs[exp:EventArgs](this)); 	stfld:valuetype Oni/Contact[](ObiCollisionEventArgs::contacts, ldloc:ObiCollisionEventArgs(this), ldloc:valuetype Oni/Contact[](contacts)); }; 
   at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1810
   at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 344
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
   --- End of inner exception stack trace ---
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
   at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1618
*/;
			}

			// Token: 0x04003734 RID: 14132
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x4003734")]
			public Oni.Contact[] contacts;
		}

		// Token: 0x02000537 RID: 1335
		[Token(Token = "0x2000537")]
		public class ObiFluidEventArgs : EventArgs
		{
			// Token: 0x06002E9E RID: 11934 RVA: 0x00065B24 File Offset: 0x00063D24
			[Token(Token = "0x6002E9E")]
			[Address(RVA = "0x69A080", Offset = "0x699080", VA = "0x18069A080")]
			public ObiFluidEventArgs(int[] indices, Vector4[] vorticities, float[] densities)
			{
				/*
An exception occurred when decompiling this method (06002E9E)

ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void Obi.ObiSolver/ObiFluidEventArgs::.ctor(System.Int32[],UnityEngine.Vector4[],System.Single[])

 ---> System.Exception: Basic block has to end with unconditional control flow. 
{; 	Block_0:; 	call:void(EventArgs::.ctor, ldloc:ObiFluidEventArgs[exp:EventArgs](this)); 	stfld:int32[](ObiFluidEventArgs::indices, ldloc:ObiFluidEventArgs(this), ldloc:int32[](indices)); 	stfld:valuetype [UnityEngine.CoreModule]UnityEngine.Vector4[](ObiFluidEventArgs::vorticities, ldloc:ObiFluidEventArgs(this), ldloc:valuetype [UnityEngine.CoreModule]UnityEngine.Vector4[](vorticities)); 	stfld:float32[](ObiFluidEventArgs::densities, ldloc:ObiFluidEventArgs(this), ldloc:float32[](densities)); }; 
   at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1810
   at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 344
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
   --- End of inner exception stack trace ---
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
   at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1618
*/;
			}

			// Token: 0x04003735 RID: 14133
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x4003735")]
			public int[] indices;

			// Token: 0x04003736 RID: 14134
			[FieldOffset(Offset = "0x18")]
			[Token(Token = "0x4003736")]
			public Vector4[] vorticities;

			// Token: 0x04003737 RID: 14135
			[FieldOffset(Offset = "0x20")]
			[Token(Token = "0x4003737")]
			public float[] densities;
		}

		// Token: 0x02000538 RID: 1336
		[Token(Token = "0x2000538")]
		public class ParticleInActor
		{
			// Token: 0x06002E9F RID: 11935 RVA: 0x00065B4C File Offset: 0x00063D4C
			[Token(Token = "0x6002E9F")]
			[Address(RVA = "0x69A3F0", Offset = "0x6993F0", VA = "0x18069A3F0")]
			public ParticleInActor(ObiActor actor, int indexInActor)
			{
				this.actor = actor;
				this.indexInActor = indexInActor;
			}

			// Token: 0x04003738 RID: 14136
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x4003738")]
			public ObiActor actor;

			// Token: 0x04003739 RID: 14137
			[FieldOffset(Offset = "0x18")]
			[Token(Token = "0x4003739")]
			public int indexInActor;
		}
	}
}
