using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using FieldInjector; using Il2CppInterop.Runtime; using Il2CppInterop.Runtime.Attributes; using Il2CppInterop.Runtime.InteropTypes.Arrays; using MelonLoader; using Microsoft.CodeAnalysis; using UnityEngine; using WeatherElectric.SecondaryMotion; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("A secondary motion system for BONELAB.")] [assembly: AssemblyDescription("A secondary motion system for BONELAB.")] [assembly: AssemblyCompany("Weather Electric")] [assembly: AssemblyProduct("SecondaryMotion")] [assembly: AssemblyCopyright("Developed by Mabel Amber")] [assembly: AssemblyTrademark("Weather Electric")] [assembly: AssemblyFileVersion("1.0.1")] [assembly: MelonInfo(typeof(Main), "SecondaryMotion", "1.0.1", "Mabel Amber", "https://thunderstore.io/c/bonelab/p/WeatherElectric/SecondaryMotion/")] [assembly: MelonColor(255, 255, 255, 255)] [assembly: MelonGame("Stress Level Zero", "BONELAB")] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyVersion("1.0.1.0")] [module: RefSafetyRules(11)] 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 WeatherElectric.SecondaryMotion { public class Main : MelonMod { internal const string Name = "SecondaryMotion"; internal const string Description = "A secondary motion system for BONELAB."; internal const string Author = "Mabel Amber"; internal const string Company = "Weather Electric"; internal const string Version = "1.0.1"; internal const string DownloadLink = "https://thunderstore.io/c/bonelab/p/WeatherElectric/SecondaryMotion/"; public override void OnInitializeMelon() { SerialisationHandler.Inject(0); SerialisationHandler.Inject(0); } } public enum ColliderBounds { Outside, Inside } public enum ColliderDirection { X, Y, Z } public enum ColliderType { Sphere, Capsule } public class SecondaryMotion : MonoBehaviour { public Transform root; public List exclusions; public float endLength; public Vector3 endOffset = Vector3.zero; public float updateRate = 60f; public UpdateMode updateMode; public float blendWeight = 1f; public float dampening = 0.1f; public AnimationCurve dampeningCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 1f), new Keyframe(1f, 1f) }); public float elasticity = 0.1f; public AnimationCurve elasticityCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 1f), new Keyframe(1f, 1f) }); public float stiffness = 0.1f; public AnimationCurve stiffnessCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 1f), new Keyframe(1f, 1f) }); public float inertia; public AnimationCurve inertiaCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 1f), new Keyframe(1f, 1f) }); public float friction; public AnimationCurve frictionCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 1f), new Keyframe(1f, 1f) }); public Vector3 gravity = Vector3.zero; public Vector3 force = Vector3.zero; public float collisionRadius; public AnimationCurve collisionRadiusCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 1f), new Keyframe(1f, 1f) }); public List colliders; private Vector3 _objectMove; private Vector3 _objectPrevPos; private float _objectScale; private float _weight = 1f; private readonly List _particleTrees = new List(); private List _effectiveCols; private float _deltaTime; private float _time; private int _preUpdCnt; private static int _updCnt; private static int _prepFrame; private void Start() { ParticleSetup(); Assembly dynamicBonesAssembly = SecondaryMotionHelpers.GetDynamicBonesAssembly(); if (dynamicBonesAssembly == null) { return; } Type type = dynamicBonesAssembly.GetType("DynamicBone"); if (type == null) { return; } foreach (Component item in (Il2CppArrayBase)(object)((Component)this).GetComponents(Il2CppType.From(type))) { Object.Destroy((Object)(object)item); } } private void FixedUpdate() { if (updateMode == UpdateMode.FixedUpdate) { SimUpdate(); } } private void Update() { if (updateMode != UpdateMode.FixedUpdate) { SimUpdate(); } _updCnt++; } private void LateUpdate() { if (_preUpdCnt != 0) { if (_updCnt > 0) { _updCnt = 0; _prepFrame++; } SetWeight(blendWeight); if (UpdateNeeded()) { Prepare(); UpdateParticles(); ApplyParticles(); } _preUpdCnt = 0; } } private void Prepare() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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_0061: 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_0072: 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_009d: 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_00a7: 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_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: 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_00fc: 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) _deltaTime = updateMode switch { UpdateMode.UnscaledTime => Time.unscaledDeltaTime, UpdateMode.FixedUpdate => Time.fixedDeltaTime * (float)_preUpdCnt, _ => Time.deltaTime, }; _objectScale = Mathf.Abs(((Component)this).transform.lossyScale.x); _objectMove = ((Component)this).transform.position - _objectPrevPos; _objectPrevPos = ((Component)this).transform.position; foreach (SecondaryMotionParticleTree particleTree in _particleTrees) { particleTree.RestGravity = particleTree.Root.TransformDirection(particleTree.LocalGravity); foreach (SecondaryMotionParticle particle in particleTree.Particles) { if (particle.TransformIsntNull) { particle.TransformPos = particle.Transform.position; particle.TransformLocalPos = particle.Transform.localPosition; particle.TransformLocalToWorld = particle.Transform.localToWorldMatrix; } } } _effectiveCols?.Clear(); if (colliders == null) { return; } foreach (SecondaryMotionCollider collider in colliders) { if (Object.op_Implicit((Object)(object)collider) && ((Behaviour)collider).enabled) { if (_effectiveCols == null) { _effectiveCols = new List(); } _effectiveCols.Add(collider); if (collider.PrepareFrame != _prepFrame) { collider.Prepare(); collider.PrepareFrame = _prepFrame; } } } } private bool UpdateNeeded() { return _weight > 0f; } private void SimUpdate() { if (UpdateNeeded()) { InitTransforms(); } _preUpdCnt++; } private void OnEnable() { ResetParticlesPosition(); } private void OnDisable() { InitTransforms(); } private void OnDidApplyAnimationProperties() { UpdateParams(); } public void SetWeight(float w) { if (!Mathf.Approximately(_weight, w)) { if (w == 0f) { InitTransforms(); } else if (_weight == 0f) { ResetParticlesPosition(); } _weight = (blendWeight = w); } } public void ParticleSetup() { //IL_002c: 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_0052: 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) _particleTrees.Clear(); if ((Object)(object)root != (Object)null) { BuildParticleTree(root); } _objectScale = Mathf.Abs(((Component)this).transform.lossyScale.x); _objectPrevPos = ((Component)this).transform.position; _objectMove = Vector3.zero; foreach (SecondaryMotionParticleTree particleTree in _particleTrees) { CreateParticles(particleTree, particleTree.Root, -1, 0f); } UpdateParams(); } private void BuildParticleTree(Transform rootTransform) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)rootTransform == (Object)null)) { SecondaryMotionParticleTree item = new SecondaryMotionParticleTree { Root = rootTransform, RootWorldToLocalMatrix = rootTransform.worldToLocalMatrix }; _particleTrees.Add(item); } } [HideFromIl2Cpp] private void CreateParticles(SecondaryMotionParticleTree particleTree, Transform bone, int parentIndex, float boneLength) { //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_0033: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003a: 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_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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: 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_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_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: 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_0116: 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_011d: 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_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: 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_0090: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: 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_014f: 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_015f: Unknown result type (might be due to invalid IL or missing references) //IL_024b: 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_0209: Unknown result type (might be due to invalid IL or missing references) //IL_020e: Unknown result type (might be due to invalid IL or missing references) while (true) { SecondaryMotionParticle secondaryMotionParticle = new SecondaryMotionParticle { Transform = bone, TransformIsntNull = ((Object)(object)bone != (Object)null), ParentIndex = parentIndex }; Vector3 val; if ((Object)(object)bone != (Object)null) { val = (secondaryMotionParticle.Position = (secondaryMotionParticle.PrevPos = bone.position)); secondaryMotionParticle.InitLocalPos = bone.localPosition; secondaryMotionParticle.InitLocalRot = bone.localRotation; } else { Transform transform = particleTree.Particles[parentIndex].Transform; if (endLength > 0f) { Transform parent = transform.parent; if ((Object)(object)parent != (Object)null) { secondaryMotionParticle.EndOffset = transform.InverseTransformPoint(transform.position * 2f - parent.position) * endLength; } else { secondaryMotionParticle.EndOffset = new Vector3(endLength, 0f, 0f); } } else { secondaryMotionParticle.EndOffset = transform.InverseTransformPoint(((Component)this).transform.TransformDirection(endOffset) + transform.position); } val = (secondaryMotionParticle.Position = (secondaryMotionParticle.PrevPos = transform.TransformPoint(secondaryMotionParticle.EndOffset))); secondaryMotionParticle.InitLocalPos = Vector3.zero; secondaryMotionParticle.InitLocalRot = Quaternion.identity; } if (parentIndex >= 0) { float num = boneLength; val = particleTree.Particles[parentIndex].Transform.position - secondaryMotionParticle.Position; boneLength = num + ((Vector3)(ref val)).magnitude; secondaryMotionParticle.BoneLength = boneLength; particleTree.BoneTotalLength = Mathf.Max(particleTree.BoneTotalLength, boneLength); particleTree.Particles[parentIndex].ChildCount++; } int count = particleTree.Particles.Count; particleTree.Particles.Add(secondaryMotionParticle); if ((Object)(object)bone == (Object)null) { break; } for (int i = 0; i < bone.childCount; i++) { Transform child = bone.GetChild(i); bool flag = false; if (exclusions != null) { flag = exclusions.Contains(child); } if (!flag) { CreateParticles(particleTree, child, count, boneLength); } else if (endLength > 0f || endOffset != Vector3.zero) { CreateParticles(particleTree, null, count, boneLength); } } if (bone.childCount == 0 && (endLength > 0f || endOffset != Vector3.zero)) { bone = null; parentIndex = count; continue; } break; } } public void UpdateParams() { //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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003a: 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) SetWeight(blendWeight); foreach (SecondaryMotionParticleTree particleTree in _particleTrees) { Vector3 val = ((Matrix4x4)(ref particleTree.RootWorldToLocalMatrix)).MultiplyVector(gravity); particleTree.LocalGravity = ((Vector3)(ref val)).normalized * ((Vector3)(ref gravity)).magnitude; foreach (SecondaryMotionParticle particle in particleTree.Particles) { particle.Dampening = dampening; particle.Elasticity = elasticity; particle.Stiffness = stiffness; particle.Inertia = inertia; particle.Friction = friction; particle.CollisionRadius = collisionRadius; if (particleTree.BoneTotalLength > 0f) { float num = particle.BoneLength / particleTree.BoneTotalLength; if (dampeningCurve != null && ((Il2CppArrayBase)(object)dampeningCurve.keys).Length > 0) { particle.Dampening *= dampeningCurve.Evaluate(num); } if (elasticityCurve != null && ((Il2CppArrayBase)(object)elasticityCurve.keys).Length > 0) { particle.Elasticity *= elasticityCurve.Evaluate(num); } if (stiffnessCurve != null && ((Il2CppArrayBase)(object)stiffnessCurve.keys).Length > 0) { particle.Stiffness *= stiffnessCurve.Evaluate(num); } if (inertiaCurve != null && ((Il2CppArrayBase)(object)inertiaCurve.keys).Length > 0) { particle.Inertia *= inertiaCurve.Evaluate(num); } if (frictionCurve != null && ((Il2CppArrayBase)(object)frictionCurve.keys).Length > 0) { particle.Friction *= frictionCurve.Evaluate(num); } if (collisionRadiusCurve != null && ((Il2CppArrayBase)(object)collisionRadiusCurve.keys).Length > 0) { particle.CollisionRadius *= collisionRadiusCurve.Evaluate(num); } } particle.Dampening = Mathf.Clamp01(particle.Dampening); particle.Elasticity = Mathf.Clamp01(particle.Elasticity); particle.Stiffness = Mathf.Clamp01(particle.Stiffness); particle.Inertia = Mathf.Clamp01(particle.Inertia); particle.Friction = Mathf.Clamp01(particle.Friction); particle.CollisionRadius = Mathf.Max(particle.CollisionRadius, 0f); } } } private void InitTransforms() { foreach (SecondaryMotionParticleTree particleTree in _particleTrees) { SecondaryMotionHelpers.SetTransforms(particleTree); } } private void UpdateParticles() { if (_particleTrees.Count <= 0) { return; } int num = 1; float timeVar = 1f; float deltaTime = _deltaTime; if (updateMode == UpdateMode.Normal) { if (updateRate > 0f) { timeVar = deltaTime * updateRate; } } else if (updateRate > 0f) { float num2 = 1f / updateRate; _time += deltaTime; num = 0; while (_time >= num2) { _time -= num2; if (++num >= 3) { _time = 0f; break; } } } if (num > 0) { for (int i = 0; i < num; i++) { UpdateParticlesLoop(timeVar, i); UpdateParticlesLoop(timeVar); } } else { SkipParticleUpdate(); } } private void UpdateParticlesLoop(float timeVar, int loopIndex) { //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_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_002e: 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_0043: 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_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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_0052: 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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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_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_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: 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_00b0: 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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: 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_00d0: 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_00d7: 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_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: 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) //IL_012e: 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_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) foreach (SecondaryMotionParticleTree particleTree in _particleTrees) { Vector3 val = gravity; Vector3 normalized = ((Vector3)(ref gravity)).normalized; Vector3 val2 = normalized * Mathf.Max(Vector3.Dot(particleTree.RestGravity, normalized), 0f); val -= val2; val = (val + force) * (_objectScale * timeVar); Vector3 val3 = ((loopIndex == 0) ? _objectMove : Vector3.zero); foreach (SecondaryMotionParticle particle in particleTree.Particles) { if (particle.ParentIndex >= 0) { Vector3 val4 = particle.Position - particle.PrevPos; Vector3 val5 = val3 * particle.Inertia; particle.PrevPos = particle.Position + val5; float num = particle.Dampening; if (particle.IsCollider) { num += particle.Friction; if (num > 1f) { num = 1f; } particle.IsCollider = false; } particle.Position += val4 * (1f - num) + val + val5; } else { particle.PrevPos = particle.Position; particle.Position = particle.TransformPos; } } } } private void UpdateParticlesLoop(float timeVar) { //IL_0067: 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_0072: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_00ba: 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_00c6: 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_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: 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_00ef: 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_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0100: 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_010f: 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_01e4: 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_0127: 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_020a: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0219: 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_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: 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) foreach (SecondaryMotionParticleTree particleTree in _particleTrees) { for (int i = 1; i < particleTree.Particles.Count; i++) { SecondaryMotionParticle secondaryMotionParticle = particleTree.Particles[i]; SecondaryMotionParticle secondaryMotionParticle2 = particleTree.Particles[secondaryMotionParticle.ParentIndex]; Vector3 val; float magnitude; if (!secondaryMotionParticle.TransformIsntNull) { val = ((Matrix4x4)(ref secondaryMotionParticle2.TransformLocalToWorld)).MultiplyVector(secondaryMotionParticle.EndOffset); magnitude = ((Vector3)(ref val)).magnitude; } else { val = secondaryMotionParticle2.TransformPos - secondaryMotionParticle.TransformPos; magnitude = ((Vector3)(ref val)).magnitude; } float num = magnitude; float num2 = Mathf.Lerp(1f, secondaryMotionParticle.Stiffness, _weight); if (num2 > 0f || secondaryMotionParticle.Elasticity > 0f) { Matrix4x4 transformLocalToWorld = secondaryMotionParticle2.TransformLocalToWorld; ((Matrix4x4)(ref transformLocalToWorld)).SetColumn(3, Vector4.op_Implicit(secondaryMotionParticle2.Position)); Vector3 val2 = ((Matrix4x4)(ref transformLocalToWorld)).MultiplyPoint3x4(secondaryMotionParticle.TransformIsntNull ? secondaryMotionParticle.TransformLocalPos : secondaryMotionParticle.EndOffset); Vector3 val3 = val2 - secondaryMotionParticle.Position; secondaryMotionParticle.Position += val3 * (secondaryMotionParticle.Elasticity * timeVar); if (num2 > 0f) { val3 = val2 - secondaryMotionParticle.Position; float magnitude2 = ((Vector3)(ref val3)).magnitude; float num3 = num * (1f + (1f - num2) * 2f); if (magnitude2 > num3) { secondaryMotionParticle.Position += val3 * ((magnitude2 - num3) / magnitude2); } } } if (_effectiveCols != null) { float particleRadius = secondaryMotionParticle.CollisionRadius * _objectScale; foreach (SecondaryMotionCollider effectiveCol in _effectiveCols) { secondaryMotionParticle.IsCollider |= effectiveCol.Collide(ref secondaryMotionParticle.Position, particleRadius); } } Vector3 val4 = secondaryMotionParticle2.Position - secondaryMotionParticle.Position; float magnitude3 = ((Vector3)(ref val4)).magnitude; if (magnitude3 > 0f) { secondaryMotionParticle.Position += val4 * ((magnitude3 - num) / magnitude3); } } } } private void SkipParticleUpdate() { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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_006a: 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_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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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_0049: 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_00bb: 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_00a4: 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_0186: Unknown result type (might be due to invalid IL or missing references) //IL_018c: 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_0196: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: 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_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_011d: 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_0122: 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_012d: 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_0162: 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_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: 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) foreach (SecondaryMotionParticleTree particleTree in _particleTrees) { List particles = particleTree.Particles; foreach (SecondaryMotionParticle item in particles) { if (item.ParentIndex < 0) { item.PrevPos = item.Position; item.Position = item.TransformPos; continue; } item.PrevPos += _objectMove; item.Position += _objectMove; SecondaryMotionParticle secondaryMotionParticle = particles[item.ParentIndex]; float num; if (!item.TransformIsntNull) { Vector3 val = ((Matrix4x4)(ref secondaryMotionParticle.TransformLocalToWorld)).MultiplyVector(item.EndOffset); num = ((Vector3)(ref val)).magnitude; } else { num = Vector3.Distance(secondaryMotionParticle.TransformPos, item.TransformPos); } float num2 = num; if (Mathf.Lerp(1f, item.Stiffness, _weight) > 0f) { Matrix4x4 transformLocalToWorld = secondaryMotionParticle.TransformLocalToWorld; ((Matrix4x4)(ref transformLocalToWorld)).SetColumn(3, Vector4.op_Implicit(secondaryMotionParticle.Position)); Vector3 val2 = ((Matrix4x4)(ref transformLocalToWorld)).MultiplyPoint3x4(item.TransformIsntNull ? item.TransformLocalPos : item.EndOffset) - item.Position; float magnitude = ((Vector3)(ref val2)).magnitude; float num3 = num2 * (1f + (1f - stiffness) * 2f); if (magnitude > num3) { item.Position += val2 / magnitude * (magnitude - num3); } } Vector3 val3 = secondaryMotionParticle.Position - item.Position; float magnitude2 = ((Vector3)(ref val3)).magnitude; if (magnitude2 > 0f) { item.Position += val3 / magnitude2 * (magnitude2 - num2); } } } } private void ResetParticlesPosition() { //IL_003a: 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) foreach (SecondaryMotionParticleTree particleTree in _particleTrees) { SecondaryMotionHelpers.ResetParticlePos(particleTree); } _objectPrevPos = ((Component)this).transform.position; } private void ApplyParticles() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: 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_000b: 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_0020: 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_0027: 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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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_0079: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: 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_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: 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_0129: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014e: 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_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0166: 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_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: 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_018c: 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_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_0180: 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_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) Vector3 right = Vector3.right; Vector3 up = Vector3.up; Vector3 forward = Vector3.forward; bool flag = false; bool flag2 = false; bool flag3 = false; Vector3 lossyScale = ((Component)this).transform.lossyScale; if (lossyScale.x < 0f || lossyScale.y < 0f || lossyScale.z < 0f) { Transform val = ((Component)this).transform; do { Vector3 localScale = val.localScale; flag = localScale.x < 0f; if (flag) { right = val.right; } flag2 = localScale.y < 0f; if (flag2) { up = val.up; } flag3 = localScale.z < 0f; if (flag3) { forward = val.forward; } if (flag || flag2 || flag3) { break; } val = val.parent; } while (Object.op_Implicit((Object)(object)val)); } foreach (SecondaryMotionParticleTree particleTree in _particleTrees) { for (int i = 1; i < particleTree.Particles.Count; i++) { SecondaryMotionParticle secondaryMotionParticle = particleTree.Particles[i]; SecondaryMotionParticle secondaryMotionParticle2 = particleTree.Particles[secondaryMotionParticle.ParentIndex]; if (secondaryMotionParticle2.ChildCount <= 1) { Vector3 val2 = (secondaryMotionParticle.TransformIsntNull ? secondaryMotionParticle.Transform.localPosition : secondaryMotionParticle.EndOffset); Vector3 val3 = secondaryMotionParticle2.Transform.TransformDirection(val2); Vector3 val4 = secondaryMotionParticle.Position - secondaryMotionParticle2.Position; if (flag) { val4 = SecondaryMotionHelpers.VectorMirror(val4, right); } if (flag2) { val4 = SecondaryMotionHelpers.VectorMirror(val4, up); } if (flag3) { val4 = SecondaryMotionHelpers.VectorMirror(val4, forward); } Quaternion val5 = Quaternion.FromToRotation(val3, val4); secondaryMotionParticle2.Transform.rotation = val5 * secondaryMotionParticle2.Transform.rotation; } if (secondaryMotionParticle.TransformIsntNull) { secondaryMotionParticle.Transform.position = secondaryMotionParticle.Position; } } } } public SecondaryMotion(IntPtr ptr) : base(ptr) { }//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_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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_0069: Expected O, but got Unknown //IL_0087: 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_009d: 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_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown //IL_00cf: 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_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Expected O, but got Unknown //IL_010c: 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_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Expected O, but got Unknown //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014e: 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_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Expected O, but got Unknown //IL_0174: 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_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0184: 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_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Expected O, but got Unknown } public class SecondaryMotionCollider : MonoBehaviour { public ColliderType type; public ColliderDirection direction = ColliderDirection.Y; public ColliderBounds bounds; public Vector3 center = Vector3.zero; public float radius = 0.5f; public float height; public float radius2; private float _scaledRadius; private float _scaledRadius2; private Vector3 _col1; private Vector3 _col2; private float _col1Col2Distance; private int _collideType; public int PrepareFrame { get; set; } public void Start() { Assembly dynamicBonesAssembly = SecondaryMotionHelpers.GetDynamicBonesAssembly(); if (dynamicBonesAssembly == null) { return; } Type type = dynamicBonesAssembly.GetType("DynamicBoneColliderBase"); if (type == null) { return; } foreach (Component item in (Il2CppArrayBase)(object)((Component)this).GetComponents(Il2CppType.From(type))) { Object.Destroy((Object)(object)item); } } public void Prepare() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0093: 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_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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: 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_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_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: 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_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_012d: 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_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013f: 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_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) //IL_027e: 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_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0291: 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_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Abs(((Component)this).transform.lossyScale.x); float num2 = height * 0.5f; Vector3 val3; if (radius2 <= 0f || Mathf.Abs(radius - radius2) < 0.01f) { _scaledRadius = radius * num; float num3 = num2 - radius; if (num3 <= 0f) { _col1 = ((Component)this).transform.TransformPoint(center); _collideType = ((bounds != ColliderBounds.Outside) ? 1 : 0); return; } Vector3 val = center; Vector3 val2 = center; switch (direction) { case ColliderDirection.X: val.x += num3; val2.x -= num3; break; case ColliderDirection.Y: val.y += num3; val2.y -= num3; break; case ColliderDirection.Z: val.z += num3; val2.z -= num3; break; default: throw new ArgumentOutOfRangeException(); } _col1 = ((Component)this).transform.TransformPoint(val); _col2 = ((Component)this).transform.TransformPoint(val2); val3 = _col2 - _col1; _col1Col2Distance = ((Vector3)(ref val3)).magnitude; _collideType = ((bounds == ColliderBounds.Outside) ? 2 : 3); return; } float num4 = Mathf.Max(radius, radius2); if (num2 - num4 <= 0f) { _scaledRadius = num4 * num; _col1 = ((Component)this).transform.TransformPoint(center); _collideType = ((bounds != ColliderBounds.Outside) ? 1 : 0); return; } _scaledRadius = radius * num; _scaledRadius2 = radius2 * num; float num5 = num2 - radius; float num6 = num2 - radius2; Vector3 val4 = center; Vector3 val5 = center; switch (direction) { case ColliderDirection.X: val4.x += num5; val5.x -= num6; break; case ColliderDirection.Y: val4.y += num5; val5.y -= num6; break; case ColliderDirection.Z: val4.z += num5; val5.z -= num6; break; default: throw new ArgumentOutOfRangeException(); } _col1 = ((Component)this).transform.TransformPoint(val4); _col2 = ((Component)this).transform.TransformPoint(val5); val3 = _col2 - _col1; _col1Col2Distance = ((Vector3)(ref val3)).magnitude; _collideType = ((bounds == ColliderBounds.Outside) ? 4 : 5); } public bool Collide(ref Vector3 particlePosition, float particleRadius) { //IL_002d: 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_005f: 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_0081: 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_00a3: 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_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) return _collideType switch { 0 => SecondaryMotionHelpers.CollideOutsideSphere(ref particlePosition, particleRadius, _col1, _scaledRadius), 1 => SecondaryMotionHelpers.CollideInsideSphere(ref particlePosition, particleRadius, _col1, _scaledRadius), 2 => SecondaryMotionHelpers.CollideOutsideCapsule(ref particlePosition, particleRadius, _col1, _col2, _scaledRadius, _col1Col2Distance), 3 => SecondaryMotionHelpers.CollideInsideCapsule(ref particlePosition, particleRadius, _col1, _col2, _scaledRadius, _col1Col2Distance), 4 => SecondaryMotionHelpers.CollideOutsideCapsule2(ref particlePosition, particleRadius, _col1, _col2, _scaledRadius, _scaledRadius2, _col1Col2Distance), 5 => SecondaryMotionHelpers.CollideInsideCapsule2(ref particlePosition, particleRadius, _col1, _col2, _scaledRadius, _scaledRadius2, _col1Col2Distance), _ => false, }; } public SecondaryMotionCollider(IntPtr ptr) : base(ptr) { }//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) } internal static class SecondaryMotionHelpers { private static Assembly _dynamicBones; public static bool CollideOutsideSphere(ref Vector3 particlePosition, float particleRadius, Vector3 sphereCenter, float sphereRadius) { //IL_0009: 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_000f: 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_0034: 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_003a: 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) float num = sphereRadius + particleRadius; float num2 = num * num; Vector3 val = particlePosition - sphereCenter; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; if (!(sqrMagnitude > 0f) || !(sqrMagnitude < num2)) { return false; } float num3 = Mathf.Sqrt(sqrMagnitude); particlePosition = sphereCenter + val * (num / num3); return true; } public static bool CollideInsideSphere(ref Vector3 particlePosition, float particleRadius, Vector3 sphereCenter, float sphereRadius) { //IL_0009: 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_000f: 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_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_0037: 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) float num = sphereRadius - particleRadius; float num2 = num * num; Vector3 val = particlePosition - sphereCenter; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; if (!(sqrMagnitude > num2)) { return false; } float num3 = Mathf.Sqrt(sqrMagnitude); particlePosition = sphereCenter + val * (num / num3); return true; } public static bool CollideOutsideCapsule(ref Vector3 particlePosition, float particleRadius, Vector3 capsuleP0, Vector3 capsuleP1, float capsuleRadius, float dirlen) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: 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_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: 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_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_0078: 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_007e: 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_0053: 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_0059: 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_00f5: 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_0103: 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_010d: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: 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) float num = capsuleRadius + particleRadius; float num2 = num * num; Vector3 val = capsuleP1 - capsuleP0; Vector3 val2 = particlePosition - capsuleP0; float num3 = Vector3.Dot(val2, val); if (num3 <= 0f) { float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; if (!(sqrMagnitude > 0f) || !(sqrMagnitude < num2)) { return false; } float num4 = Mathf.Sqrt(sqrMagnitude); particlePosition = capsuleP0 + val2 * (num / num4); return true; } float num5 = dirlen * dirlen; if (num3 >= num5) { val2 = particlePosition - capsuleP1; float sqrMagnitude2 = ((Vector3)(ref val2)).sqrMagnitude; if (!(sqrMagnitude2 > 0f) || !(sqrMagnitude2 < num2)) { return false; } float num6 = Mathf.Sqrt(sqrMagnitude2); particlePosition = capsuleP1 + val2 * (num / num6); return true; } Vector3 val3 = val2 - val * (num3 / num5); float sqrMagnitude3 = ((Vector3)(ref val3)).sqrMagnitude; if (!(sqrMagnitude3 > 0f) || !(sqrMagnitude3 < num2)) { return false; } float num7 = Mathf.Sqrt(sqrMagnitude3); particlePosition += val3 * ((num - num7) / num7); return true; } public static bool CollideInsideCapsule(ref Vector3 particlePosition, float particleRadius, Vector3 capsuleP0, Vector3 capsuleP1, float capsuleRadius, float dirlen) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: 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_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: 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_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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_007a: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: 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_0095: 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_00a5: Unknown result type (might be due to invalid IL or missing references) float num = capsuleRadius - particleRadius; float num2 = num * num; Vector3 val = capsuleP1 - capsuleP0; Vector3 val2 = particlePosition - capsuleP0; float num3 = Vector3.Dot(val2, val); if (num3 <= 0f) { float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; if (!(sqrMagnitude > num2)) { return false; } float num4 = Mathf.Sqrt(sqrMagnitude); particlePosition = capsuleP0 + val2 * (num / num4); return true; } float num5 = dirlen * dirlen; if (num3 >= num5) { val2 = particlePosition - capsuleP1; float sqrMagnitude2 = ((Vector3)(ref val2)).sqrMagnitude; if (!(sqrMagnitude2 > num2)) { return false; } float num6 = Mathf.Sqrt(sqrMagnitude2); particlePosition = capsuleP1 + val2 * (num / num6); return true; } Vector3 val3 = val2 - val * (num3 / num5); float sqrMagnitude3 = ((Vector3)(ref val3)).sqrMagnitude; if (!(sqrMagnitude3 > num2)) { return false; } float num7 = Mathf.Sqrt(sqrMagnitude3); particlePosition += val3 * ((num - num7) / num7); return true; } public static bool CollideOutsideCapsule2(ref Vector3 particlePosition, float particleRadius, Vector3 capsuleP0, Vector3 capsuleP1, float capsuleRadius0, float capsuleRadius1, float dirlen) { //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_0002: 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_0009: 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_000f: 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_0015: 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_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: 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_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: 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_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_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_0056: 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) //IL_005d: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_012d: 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_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: 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_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) Vector3 val = capsuleP1 - capsuleP0; Vector3 val2 = particlePosition - capsuleP0; float num = Vector3.Dot(val2, val); if (num <= 0f) { float num2 = capsuleRadius0 + particleRadius; float num3 = num2 * num2; float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; if (!(sqrMagnitude > 0f) || !(sqrMagnitude < num3)) { return false; } float num4 = Mathf.Sqrt(sqrMagnitude); particlePosition = capsuleP0 + val2 * (num2 / num4); return true; } float num5 = dirlen * dirlen; if (num >= num5) { float num6 = capsuleRadius1 + particleRadius; float num7 = num6 * num6; val2 = particlePosition - capsuleP1; float sqrMagnitude2 = ((Vector3)(ref val2)).sqrMagnitude; if (!(sqrMagnitude2 > 0f) || !(sqrMagnitude2 < num7)) { return false; } float num8 = Mathf.Sqrt(sqrMagnitude2); particlePosition = capsuleP1 + val2 * (num6 / num8); } else { Vector3 val3 = val2 - val * (num / num5); float sqrMagnitude3 = ((Vector3)(ref val3)).sqrMagnitude; float num9 = Vector3.Dot(val2, val / dirlen); float num10 = Mathf.Lerp(capsuleRadius0, capsuleRadius1, num9 / dirlen) + particleRadius; float num11 = num10 * num10; if (!(sqrMagnitude3 > 0f) || !(sqrMagnitude3 < num11)) { return false; } float num12 = Mathf.Sqrt(sqrMagnitude3); particlePosition += val3 * ((num10 - num12) / num12); } return true; } public static bool CollideInsideCapsule2(ref Vector3 particlePosition, float particleRadius, Vector3 capsuleP0, Vector3 capsuleP1, float capsuleRadius0, float capsuleRadius1, float dirlen) { //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_0002: 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_0009: 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_000f: 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_0015: 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_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: 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_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: 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_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00da: 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_0082: 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_0088: 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_004e: 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_0059: 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_0112: 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_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: 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_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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) Vector3 val = capsuleP1 - capsuleP0; Vector3 val2 = particlePosition - capsuleP0; float num = Vector3.Dot(val2, val); if (num <= 0f) { float num2 = capsuleRadius0 - particleRadius; float num3 = num2 * num2; float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; if (!(sqrMagnitude > num3)) { return false; } float num4 = Mathf.Sqrt(sqrMagnitude); particlePosition = capsuleP0 + val2 * (num2 / num4); return true; } float num5 = dirlen * dirlen; if (num >= num5) { float num6 = capsuleRadius1 - particleRadius; float num7 = num6 * num6; val2 = particlePosition - capsuleP1; float sqrMagnitude2 = ((Vector3)(ref val2)).sqrMagnitude; if (!(sqrMagnitude2 > num7)) { return false; } float num8 = Mathf.Sqrt(sqrMagnitude2); particlePosition = capsuleP1 + val2 * (num6 / num8); } else { Vector3 val3 = val2 - val * (num / num5); float sqrMagnitude3 = ((Vector3)(ref val3)).sqrMagnitude; float num9 = Vector3.Dot(val2, val / dirlen); float num10 = Mathf.Lerp(capsuleRadius0, capsuleRadius1, num9 / dirlen) - particleRadius; float num11 = num10 * num10; if (!(sqrMagnitude3 > num11)) { return false; } float num12 = Mathf.Sqrt(sqrMagnitude3); particlePosition += val3 * ((num10 - num12) / num12); } return true; } public static void ResetParticlePos(SecondaryMotionParticleTree particleTree) { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_0060: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_0033: Unknown result type (might be due to invalid IL or missing references) foreach (SecondaryMotionParticle particle in particleTree.Particles) { if (particle.TransformIsntNull) { particle.Position = (particle.PrevPos = particle.Transform.position); } else { Transform transform = particleTree.Particles[particle.ParentIndex].Transform; particle.Position = (particle.PrevPos = transform.TransformPoint(particle.EndOffset)); } particle.IsCollider = false; } } public static void SetTransforms(SecondaryMotionParticleTree particleTree) { //IL_0025: 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) foreach (SecondaryMotionParticle particle in particleTree.Particles) { if (particle.TransformIsntNull) { particle.Transform.localPosition = particle.InitLocalPos; particle.Transform.localRotation = particle.InitLocalRot; } } } public static Vector3 VectorMirror(Vector3 vector3, Vector3 axis) { //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_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000f: 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) return vector3 - axis * (Vector3.Dot(vector3, axis) * 2f); } public static Assembly GetDynamicBonesAssembly() { if (_dynamicBones != null) { return _dynamicBones; } _dynamicBones = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault((Assembly a) => string.Equals(a.GetName().Name, "DynamicBonesBL", StringComparison.OrdinalIgnoreCase)); if (!(_dynamicBones != null)) { return _dynamicBones; } return null; } } public class SecondaryMotionParticle { public Transform Transform; public int ParentIndex; public int ChildCount; public float Dampening; public float Elasticity; public float Stiffness; public float Inertia; public float Friction; public float CollisionRadius; public float BoneLength; public bool IsCollider; public bool TransformIsntNull; public Vector3 Position; public Vector3 PrevPos; public Vector3 EndOffset; public Vector3 InitLocalPos; public Quaternion InitLocalRot; public Vector3 TransformPos; public Vector3 TransformLocalPos; public Matrix4x4 TransformLocalToWorld; } public class SecondaryMotionParticleTree { public Transform Root; public Vector3 LocalGravity; public Matrix4x4 RootWorldToLocalMatrix; public float BoneTotalLength; public readonly List Particles = new List(); public Vector3 RestGravity; } public enum UpdateMode { Normal, FixedUpdate, UnscaledTime } }