Decompiled source of Katana v2.1.1
Katana.dll
Decompiled a day ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Text; using System.Threading; using System.Threading.Tasks; using AK.Wwise; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Pigeon; using Pigeon.Math; using Pigeon.Movement; using Unity.Collections; using Unity.Netcode; using Unity.Netcode.Components; using UnityEngine; using UnityEngine.Animations; using UnityEngine.Experimental.Rendering; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.Playables; using UnityEngine.Rendering; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: InternalsVisibleTo("KatanaTests")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Katana")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Adds a Katana melee primary weapon.")] [assembly: AssemblyFileVersion("2.1.1.0")] [assembly: AssemblyInformationalVersion("2.1.1")] [assembly: AssemblyProduct("Katana")] [assembly: AssemblyTitle("Katana")] [assembly: AssemblyVersion("2.1.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 KatanaMod { internal struct KatanaMotionInput { public float planarSpeed; public float yVelocity; public bool grounded; public bool sprinting; public bool sliding; public bool crouching; } internal sealed class KatanaAnimator { private struct CutKey { public float t; public float th; public float roll; public Vector3 g; public bool stop; public float vel; } private sealed class Cut { public Vector3 u; public Vector3 v; public CutKey[] keys; public float coilEnd; public float holdEnd; public float handLead; } private struct Key { public float t; public Vector3 pos; public Vector3 euler; public bool idle; public bool stop; } private struct Pose { public Vector3 pos; public Quaternion rot; } private struct PoseKey { public float t; public Vector3 g; public Vector3 blade; public Vector3 edge; public float roll; public bool stop; public bool idle; } private struct DKey { public float t; public Vector3 off; public float ang; public bool stop; } private sealed class InspectClip { public MKey[] keys; public SKey[] spin; public HKey[] right; public HKey[] left; public float dur; public DKey[] detach; public Vector3 axis; public float pivot; public bool tailDraw; public WKey[] saya; public MKey sayaPose; } private struct WKey { public float t; public float w; } private struct MKey { public float t; public Vector3 g; public Quaternion q; public bool idle; public bool stop; } private struct SKey { public float t; public float v; public bool stop; } private struct HKey { public float t; public float w; public float loose; public float z; public float roll; public bool free; public bool vis; public Vector3 p; public Quaternion q; } public struct HandCues { public float rightW; public float leftW; public float rightLoose; public float leftLoose; public Vector3 rightPos; public Vector3 leftPos; public Quaternion rightRot; public Quaternion leftRot; } public const int MoveCount = 4; private const float GameSweepStart = 0.14f; private const float GameHit = 0.266f; private const float AuthSweepStart = 0.12f; private const float AuthHit = 0.253f; private const float EquipDuration = 0.55f; private const float InspectDuration = 1.8f; private const float EndSwingFade = 0.16f; private const float CancelInspectFade = 0.22f; private const float StartInspectFade = 0.2f; private const float MaxDt = 0.1f; private const float TwoPi = MathF.PI * 2f; private const float MomentumTime = 0.045f; private static readonly Vector3 DefaultGrip = new Vector3(0.08f, -0.08f, 0.18f); private static readonly Vector3 DefaultRest = new Vector3(-40f, 8f, 0f); private static readonly Vector3 BoxMin = new Vector3(-0.25f, -0.32f, 0.04f); private static readonly Vector3 BoxMax = new Vector3(0.32f, 0.16f, 0.32f); private static readonly Vector3 RightShoulder = new Vector3(0.08f, -0.061f, 0.001f); private const float ArmReach = 0.235f; private const float ReachKnee = 0.20210001f; private const float ReachLimit = 0.21149999f; private static readonly Vector3 LeftShoulder = new Vector3(-0.08f, -0.061f, 0.001f); private const float LeftKnee = 0.21620001f; private const float LeftLimit = 0.22795f; private static readonly Cut[] Cuts = new Cut[4] { MakeCut(new Vector3(-0.11f, 0.198f, 0.974f), new Vector3(-0.82f, -0.57f, 0f), 0.135f, 0.58f, 0.25f, C(0f, -88f, 0.075f, -0.06f, 0.15f), C(0.14f, -116f, 0.066f, -0.034f, 0.135f, stop: true), C(0.2f, -80f, 0.06f, -0.05f, 0.158f), C(0.253f, 0f, 0.05f, -0.088f, 0.19f, stop: false, 0f, 1500f), C(0.3f, 46f, 0.022f, -0.104f, 0.176f), C(0.335f, 64f, 0.002f, -0.11f, 0.166f, stop: true, -6f), C(0.4f, 52f, 0.006f, -0.104f, 0.168f, stop: true, -2f), C(0.46f, 57f, 0.003f, -0.107f, 0.167f, stop: true, -4f), C(0.58f, 55f, 0.004f, -0.106f, 0.167f, stop: true, -4f)), MakeCut(new Vector3(-0.1f, 0.14f, 0.985f), new Vector3(1f, 0.22f, 0f), 0.13f, 0.58f, 0.2f, C(0f, -78f, 0.01f, -0.092f, 0.14f), C(0.135f, -108f, -0.04f, -0.1f, 0.112f, stop: true, 4f), C(0.2f, -72f, -0.014f, -0.098f, 0.15f, stop: false, 2f), C(0.253f, 0f, 0.05f, -0.09f, 0.188f, stop: false, 0f, 1400f), C(0.3f, 52f, 0.09f, -0.086f, 0.176f), C(0.335f, 68f, 0.112f, -0.083f, 0.16f, stop: true, -4f), C(0.4f, 57f, 0.104f, -0.085f, 0.165f, stop: true, -1f), C(0.46f, 62f, 0.108f, -0.084f, 0.163f, stop: true, -3f), C(0.58f, 60f, 0.107f, -0.085f, 0.164f, stop: true, -3f)), MakeCut(new Vector3(-0.088f, 0.181f, 0.98f), new Vector3(0f, -1f, 0f), 0.165f, 0.7f, 0.3f, C(0f, -70f, 0.05f, -0.06f, 0.16f), C(0.165f, -122f, 0.034f, 0.03f, 0.105f, stop: true), C(0.195f, -126f, 0.034f, 0.034f, 0.105f, stop: true), C(0.225f, -84f, 0.038f, -0.016f, 0.146f), C(0.253f, 0f, 0.042f, -0.082f, 0.188f, stop: false, 0f, 1700f), C(0.29f, 40f, 0.042f, -0.104f, 0.182f), C(0.32f, 52f, 0.042f, -0.11f, 0.176f, stop: true), C(0.39f, 36f, 0.042f, -0.102f, 0.18f, stop: true), C(0.46f, 42f, 0.042f, -0.105f, 0.179f, stop: true), C(0.7f, 40f, 0.042f, -0.104f, 0.179f, stop: true)), MakeCut(new Vector3(-0.08f, 0.11f, 0.99f), new Vector3(1f, 0.3f, 0f), 0.125f, 0.62f, 0.25f, C(0f, -55f, 0.04f, -0.1f, 0.15f), C(0.125f, -136f, -0.03f, -0.12f, 0.085f, stop: true, 8f), C(0.19f, -82f, -0.012f, -0.108f, 0.136f, stop: false, 4f), C(0.24f, 0f, 0.05f, -0.088f, 0.186f, stop: false, 0f, 1500f), C(0.29f, 58f, 0.092f, -0.076f, 0.168f), C(0.33f, 74f, 0.112f, -0.07f, 0.152f, stop: true, -6f), C(0.4f, 63f, 0.106f, -0.073f, 0.158f, stop: true, -2f), C(0.47f, 68f, 0.109f, -0.072f, 0.156f, stop: true, -4f), C(0.62f, 66f, 0.108f, -0.072f, 0.157f, stop: true, -4f)) }; private static readonly Key[] EquipKeys = new Key[5] { K(0f, -0.03f, -0.2f, 0.08f, 40f, -160f, -40f), K(0.3f, -0.01f, -0.13f, 0.15f, 0f, -75f, -75f), K(0.6f, 0.09f, -0.05f, 0.15f, -64f, 18f, 35f), K(0.8f, 0.08f, -0.07f, 0.17f, -34f, 6f, -12f), Idle(1f) }; private static readonly Vector3 SprintPos = new Vector3(0.1f, -0.14f, 0.11f); private static readonly Vector3 SprintEuler = new Vector3(32f, 108f, -18f); private static readonly Vector3 SlidePos = new Vector3(0.06f, -0.13f, 0.17f); private static readonly Vector3 SlideEuler = new Vector3(-10f, -4f, -8f); private static readonly Vector3 CrouchOffset = new Vector3(-0.008f, -0.02f, 0f); private static readonly Vector3 AirRaise = new Vector3(0f, 0.012f, -0.004f); private bool swinging; private int swingMove; private float swingP; private float swingClock; private Pose swingFrom; private Vector3 fromVel; private Vector3 fromAngVel; private bool equipping; private float equipT; private bool inspecting; private float inspectT; private bool fading; private float fadeT; private float fadeDur; private Pose fadeFrom; private Vector3 fadeVel; private Vector3 fadeAngVel; private Vector3 coilRel; private Vector3 returnRel; private Vector3 fadeRel; private bool coilRelValid; private bool returnRelValid; private bool fadeRelValid; private Pose lastPose; private Pose prevPose; private float evalDt; private float pendingDt; private bool havePrev; private float sprintW; private float sprintWV; private float slideW; private float slideWV; private float crouchW; private float crouchWV; private float airW; private float airWV; private float busyW; private float busyWV; private float bobAmp; private float bobAmpV; private float bobPhase; private float lagY; private float lagYV; private float lagPitch; private float lagPitchV; private float landY; private float landYV; private float breathPhase; private float breathPhase2; private float kensenPhase; private bool hasPrevGrounded; private bool prevGrounded; private float lastAirYVel; private Vector3 swayPos; private Vector3 swayPosV; private Vector3 swayEuler; private Vector3 swayEulerV; private const float KashiraModel = 0.182f; public const int MotionCount = 8; private const float DetachFadeTime = 0.16f; private const float PlungeEnterDuration = 0.34f; private const float PlungeImpactDuration = 0.62f; private const float PlungeHitAt = 0.1f; private const float TailDrawDuration = 0.42f; private const float SayaFadeTime = 0.2f; private float sayaW; private float sayaFadeFrom; private float sayaFadeT = 0.2f; private Vector3 sayaPos; private Quaternion sayaRot = Quaternion.identity; private const float ArmBlendTime = 0.2f; private float armBlend; private const float RightGripModel = 0.008f; private const float LeftGripModel = -0.172f; private const float CueFadeTime = 0.16f; private HandCues cues; private bool cuesValid; private float cueFadeT = 0.16f; private HandCues cueFadeFrom; private float motionSpin; private Vector3 cueRelR; private Vector3 cueRelL; private bool cueRelRValid; private bool cueRelLValid; private int cueSegR = -1; private int cueSegL = -1; private float clampSkip; private float clampFadeT = 0.16f; private Vector3 fadeRelR; private Vector3 fadeRelL; private bool fadeRelRValid; private bool fadeRelLValid; private static readonly Key[] PlungeEnterKeys = BuildKeys(P(0f, 0.06f, -0.05f, 0.14f, 0.05f, 0.92f, 0.38f, 0f, -0.38f, 0.92f), P(0.38f, 0.05f, -0.012f, 0.118f, 0.02f, 0.97f, 0.24f, 0f, -0.24f, 0.97f, stop: true), P(0.7f, 0.04f, -0.03f, 0.15f, 0f, -0.1f, 0.99f, 0f, -0.99f, -0.1f), P(1f, 0.03f, -0.02f, 0.15f, -0.04f, -0.88f, 0.47f, 0f, -0.47f, -0.88f, stop: true)); private static readonly Key PlungeHoldKey = PlungeEnterKeys[PlungeEnterKeys.Length - 1]; private static readonly Key[] PlungeImpactKeys = BuildKeys(P(0f, 0.03f, -0.02f, 0.15f, -0.04f, -0.88f, 0.47f, 0f, -0.47f, -0.88f), P(0.1f, 0.03f, -0.085f, 0.18f, -0.04f, -0.9f, 0.43f, 0f, -0.43f, -0.9f, stop: true), P(0.3f, 0.031f, -0.08f, 0.177f, -0.04f, -0.89f, 0.45f, 0f, -0.45f, -0.89f, stop: true), P(0.55f, 0.06f, -0.085f, 0.17f, 0.05f, 0.1f, 0.99f, 0f, -0.99f, 0.1f), PIdle(1f)); private static readonly InspectClip DefaultClip = BuildDefaultClip(); private static readonly InspectClip[] Motions = BuildMotions(); private float inspectDur = 1.8f; private float inspectSpeed = 1f; private int inspectStyle = -1; private InspectClip inspectClip; private bool autoSwing; private int plungePhase; private float plungeT; private float plungeStop; private float detachFadeT = 0.16f; private Vector3 detachFadeOff; private Vector3 detachFadeAxis = Vector3.forward; private float detachFadeAng; private float detachFadePivot; private const float GuardEnterFade = 0.085f; private const float GuardExitFade = 0.16f; private static readonly Vector3 GuardGrip = new Vector3(-0.03f, -0.055f, 0.15f); private static readonly Vector3 GuardBlade = new Vector3(0.92f, 0.2f, 0.34f); private static readonly Vector3 GuardEdge = new Vector3(0.02f, 0.38f, 1f); private bool guardOn; private float guardT; private float guardFlick; private float guardFlickV; private float guardFlickStop; public bool IsInspecting => inspecting; public bool IsEquipping => equipping; public float InspectArmBlend => Smoother(armBlend); public int InspectStyle { get { if (!inspecting) { return -1; } return inspectStyle; } } public float InspectProgress { get { if (!inspecting) { return -1f; } return inspectT / Mathf.Max(0.001f, inspectDur); } } public float TailDrawProgress { get { if (!autoSwing || !swinging) { return -1f; } return swingP; } } public bool IsPlunging => plungePhase != 0; public bool IsPlungeLanding => plungePhase == 2; public bool IsGuarding => guardOn; private static CutKey C(float t, float th, float gx, float gy, float gz, bool stop = false, float roll = 0f, float vel = float.NaN) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) return new CutKey { t = t, th = th, roll = roll, g = new Vector3(gx, gy, gz), stop = stop, vel = vel }; } private static Cut MakeCut(Vector3 u, Vector3 v, float coilEnd, float holdEnd, float handLead, params CutKey[] keys) { //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_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_0011: 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_001c: 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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) u = ((Vector3)(ref u)).normalized; Vector3 val = v - Vector3.Dot(v, u) * u; v = ((Vector3)(ref val)).normalized; return new Cut { u = u, v = v, keys = keys, coilEnd = coilEnd, holdEnd = holdEnd, handLead = handLead }; } private static Key K(float t, float px, float py, float pz, float ex, float ey, float ez, bool stop = false) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) return new Key { t = t, pos = new Vector3(px, py, pz), euler = new Vector3(ex, ey, ez), stop = stop }; } private static Key Idle(float t, float rollAdd = 0f) { //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_0029: 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) return new Key { t = t, pos = Vector3.zero, euler = new Vector3(0f, 0f, rollAdd), idle = true, stop = true }; } public KatanaAnimator() { //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_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) Reset(); } public void TriggerEquip() { swinging = false; inspecting = false; fading = false; plungePhase = 0; autoSwing = false; detachFadeT = 0.16f; if (!Cfg(KatanaPlugin.EquipAnimation, fallback: true)) { equipping = false; lastPose = (prevPose = IdlePose()); } else { equipping = true; equipT = 0f; } } public void TriggerInspect() { TriggerInspect(-1, 1f); } public void TriggerInspect(int style, float speed) { if (Cfg(KatanaPlugin.InspectAnimation, fallback: true) && !swinging && !equipping && plungePhase == 0 && (!inspecting || !(inspectT < inspectDur * 0.85f))) { CaptureDetachFade(); StartFade(0.2f); SelectInspectClip(style, speed); inspecting = true; inspectT = 0f; } } public void CancelInspect() { if (inspecting) { CaptureDetachFade(); StartFade(0.22f); inspecting = false; } } public void BeginSwing(int move) { if (move < 0 || move >= 4) { move = (move % 4 + 4) % 4; } if (inspecting) { CaptureDetachFade(); } plungePhase = 0; autoSwing = false; swingFrom = lastPose; PoseVelocity(out fromVel, out fromAngVel); swingMove = move; swingP = 0f; swingClock = 0f; coilRelValid = (returnRelValid = false); swinging = true; inspecting = false; equipping = false; fading = false; } public void SetSwingProgress(float p) { if (!float.IsNaN(p)) { swingP = Mathf.Clamp01(p); } } public void EndSwing() { if (swinging) { StartFade(0.16f); swinging = false; } } public void Reset() { //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: 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_01b6: 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_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01be: 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_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0218: 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_021f: Unknown result type (might be due to invalid IL or missing references) swinging = false; swingMove = 0; swingP = 0f; swingClock = 0f; equipping = false; equipT = 0f; inspecting = false; inspectT = 0f; plungePhase = 0; plungeT = (plungeStop = 0f); autoSwing = false; detachFadeT = 0.16f; armBlend = 0f; sayaW = 0f; sayaFadeT = 0.2f; SelectInspectClip(-1, 1f); fading = false; fadeT = 0f; fadeDur = 0f; sprintW = (sprintWV = (slideW = (slideWV = (crouchW = (crouchWV = (airW = (airWV = 0f))))))); busyW = (busyWV = (bobAmp = (bobAmpV = (bobPhase = 0f)))); lagY = (lagYV = (lagPitch = (lagPitchV = (landY = (landYV = 0f))))); breathPhase = (breathPhase2 = (kensenPhase = 0f)); hasPrevGrounded = false; prevGrounded = true; lastAirYVel = 0f; swayPos = (swayPosV = (swayEuler = (swayEulerV = Vector3.zero))); lastPose = IdlePose(); prevPose = lastPose; havePrev = false; evalDt = (pendingDt = 0f); fromVel = (fromAngVel = (fadeVel = (fadeAngVel = Vector3.zero))); swingFrom = lastPose; fadeFrom = lastPose; } private void StartFade(float duration) { fadeFrom = lastPose; PoseVelocity(out fadeVel, out fadeAngVel); fadeT = 0f; fadeRelValid = false; fadeDur = Mathf.Max(0.01f, duration); fading = true; } private void PoseVelocity(out Vector3 vel, out Vector3 angVel) { //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_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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_0058: 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_0069: 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_0079: 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_008e: 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_009d: 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_00bb: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) vel = Vector3.zero; angVel = Vector3.zero; if (havePrev && evalDt > 0.0001f) { vel = Vector3.ClampMagnitude((lastPose.pos - prevPose.pos) / evalDt, 2.5f); angVel = Vector3.ClampMagnitude(QToRotVec(QMul(lastPose.rot, QInv(prevPose.rot))) / evalDt, 25f); if (!Finite(vel)) { vel = Vector3.zero; } if (!Finite(angVel)) { angVel = Vector3.zero; } } } private static Pose Drift(Pose p, Vector3 vel, Vector3 angVel, float t) { //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_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_006a: 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_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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_000d: 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) if (vel == Vector3.zero && angVel == Vector3.zero) { return p; } float num = 0.045f * (1f - Mathf.Exp((0f - Mathf.Max(0f, t)) / 0.045f)); ref Vector3 pos = ref p.pos; pos += Vector3.ClampMagnitude(vel * num, 0.04f); p.rot = QMul(QFromRotVec(Vector3.ClampMagnitude(angVel * num, 0.43633232f)), p.rot); return p; } public void Update(float dt, KatanaMotionInput input) { //IL_052d: Unknown result type (might be due to invalid IL or missing references) //IL_0532: Unknown result type (might be due to invalid IL or missing references) //IL_0534: Unknown result type (might be due to invalid IL or missing references) //IL_0539: Unknown result type (might be due to invalid IL or missing references) //IL_07eb: Unknown result type (might be due to invalid IL or missing references) //IL_0809: Unknown result type (might be due to invalid IL or missing references) //IL_0749: Unknown result type (might be due to invalid IL or missing references) //IL_074b: Unknown result type (might be due to invalid IL or missing references) //IL_075b: Unknown result type (might be due to invalid IL or missing references) //IL_0760: Unknown result type (might be due to invalid IL or missing references) //IL_0765: Unknown result type (might be due to invalid IL or missing references) //IL_07c9: Unknown result type (might be due to invalid IL or missing references) //IL_07cd: Unknown result type (might be due to invalid IL or missing references) //IL_07d2: Unknown result type (might be due to invalid IL or missing references) //IL_07d4: Unknown result type (might be due to invalid IL or missing references) //IL_07d8: Unknown result type (might be due to invalid IL or missing references) //IL_07dd: Unknown result type (might be due to invalid IL or missing references) if (!(dt > 0f)) { dt = 0f; } if (dt > 0.1f) { dt = 0.1f; } pendingDt += dt; if (swinging) { swingClock += dt; } if (equipping) { equipT += dt; if (equipT >= 0.55f) { equipping = false; StartFade(0.1f); } } if (inspecting) { inspectT += dt * inspectSpeed; if (inspectT >= inspectDur) { inspecting = false; EndInspectClip(); } } armBlend = Mathf.MoveTowards(armBlend, inspecting ? 1f : 0f, dt / 0.2f); TickAdditions(dt); TickGuard(dt); if (fading) { fadeT += dt; if (fadeT >= fadeDur) { fading = false; } } float num = Cfg(KatanaPlugin.MovementSway, 1f); if (float.IsNaN(num)) { num = 1f; } num = Mathf.Clamp(num, 0f, 3f); float num2 = Mathf.Clamp01(num); float num3 = (float.IsNaN(input.planarSpeed) ? 0f : Mathf.Max(0f, input.planarSpeed)); float num4 = (float.IsNaN(input.yVelocity) ? 0f : Mathf.Clamp(input.yVelocity, -60f, 60f)); bool flag = swinging || inspecting || equipping || plungePhase != 0 || guardOn; float target = ((input.sprinting && !flag && !input.sliding) ? num2 : 0f); float target2 = ((input.sliding && !flag) ? num2 : 0f); float target3 = ((input.crouching && !input.sliding) ? num2 : 0f); float target4 = (input.grounded ? 0f : 1f); Spring(ref sprintW, ref sprintWV, target, 14f, dt); Spring(ref slideW, ref slideWV, target2, 18f, dt); Spring(ref crouchW, ref crouchWV, target3, 12f, dt); Spring(ref airW, ref airWV, target4, 10f, dt); Spring(ref busyW, ref busyWV, flag ? 1f : 0f, 20f, dt); float num5 = ((input.grounded && !input.sliding) ? Mathf.Clamp01(num3 / 7f) : 0f); Spring(ref bobAmp, ref bobAmpV, num5, 7f, dt); if (bobAmp > 0.001f || num5 > 0f) { float num6 = Mathf.Clamp(0.8f + num3 * 0.065f, 0.8f, 1.6f); bobPhase += MathF.PI * 2f * num6 * dt; if (bobPhase > MathF.PI * 2f) { bobPhase -= MathF.PI * 2f; } } float target5 = (input.grounded ? 0f : Mathf.Clamp((0f - num4) * 0.0025f, -0.025f, 0.025f)); float target6 = (input.grounded ? 0f : Mathf.Clamp(num4 * 0.55f, -7f, 7f)); Spring(ref lagY, ref lagYV, target5, 9f, dt); Spring(ref lagPitch, ref lagPitchV, target6, 9f, dt); if (hasPrevGrounded && !prevGrounded && input.grounded) { float num7 = Mathf.Clamp(0f - lastAirYVel, 0f, 20f); float num8 = Mathf.Min(0.25f + num7 * 0.06f, 1.4f); landYV -= num8; } if (!input.grounded) { lastAirYVel = num4; } prevGrounded = input.grounded; hasPrevGrounded = true; StepUnderdamped(ref landY, ref landYV, 12f, 0.42f, dt); landY = Mathf.Clamp(landY, -0.05f, 0.03f); breathPhase += dt * 1.45f; if (breathPhase > MathF.PI * 2f) { breathPhase -= MathF.PI * 2f; } breathPhase2 += dt * 0.55f; if (breathPhase2 > MathF.PI * 2f) { breathPhase2 -= MathF.PI * 2f; } kensenPhase += dt * 0.9f; if (kensenPhase > MathF.PI * 2f) { kensenPhase -= MathF.PI * 2f; } Vector3 val = Vector3.zero; Vector3 val2 = Vector3.zero; float num9 = num * (1f - 0.7f * Mathf.Clamp01(busyW)); if (num9 > 0.0001f) { float num10 = Mathf.Clamp01(sprintW); float num11 = bobAmp; float num12 = Mathf.Sin(bobPhase); float num13 = Mathf.Sin(2f * bobPhase); float num14 = 0.008f * (1f + 0.8f * num10); float num15 = 0.007f * (1f + 1f * num10); val.x += num12 * num14 * num11; val.y += (num13 - 0.35f) * num15 * num11; val2.z += num12 * 2f * (1f + 1.5f * num10) * num11; val2.y += num12 * 1.3f * num11; val2.x += (num13 + 0.3f) * 1.2f * (1f + num10) * num11; float num16 = 1f - 0.75f * Mathf.Clamp01(bobAmp); float num17 = Mathf.Sin(breathPhase); val.y += num17 * 0.0028f * num16; val.z += num17 * 0.001f * num16; val.x += Mathf.Sin(breathPhase2) * 0.0014f * num16; val2.x += (0f - Mathf.Sin(breathPhase + 0.7f)) * 0.45f * num16; val2.z += Mathf.Sin(breathPhase2 + 1.3f) * 0.6f * num16; val2.x += Mathf.Sin(kensenPhase) * 0.25f * num16; val2.y += Mathf.Cos(kensenPhase) * 0.35f * num16; val += AirRaise * Mathf.Clamp01(airW); val.y += lagY; val2.x += lagPitch; val.y += landY; val.z += landY * 0.2f; val2.x += (0f - landY) * 110f; val *= num9; val2 *= num9; } StepSpring(ref swayPos, ref swayPosV, val, 17f, 0.55f, dt); StepSpring(ref swayEuler, ref swayEulerV, val2, 15f, 0.5f, dt); } public void Evaluate(out Vector3 gripPosition, out Quaternion rotation) { //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_000d: 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_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_0042: 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_004e: 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_0058: 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_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: 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_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0131: 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_013e: 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) //IL_0147: 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_014e: 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_01b7: 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_015f: 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_0238: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_0248: 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_0257: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_017f: 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_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_018f: 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_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_02fa: Unknown result type (might be due to invalid IL or missing references) //IL_032c: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0333: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_0353: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Unknown result type (might be due to invalid IL or missing references) //IL_035a: Unknown result type (might be due to invalid IL or missing references) //IL_035e: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_0363: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Unknown result type (might be due to invalid IL or missing references) //IL_0387: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Unknown result type (might be due to invalid IL or missing references) Vector3 grip = GetGrip(); Vector3 rest = GetRest(); Vector3 val = grip - DefaultGrip; Pose pose = default(Pose); pose.pos = grip; pose.rot = QEuler(rest); if (sprintW > 0.0001f) { Pose b = default(Pose); b.pos = SprintPos + val; b.rot = QEuler(SprintEuler); pose = Blend(pose, b, Mathf.Clamp01(sprintW)); } if (slideW > 0.0001f) { Pose b2 = default(Pose); b2.pos = SlidePos + val; b2.rot = QEuler(SlideEuler); pose = Blend(pose, b2, Mathf.Clamp01(slideW)); } ref Vector3 pos = ref pose.pos; pos += CrouchOffset * crouchW; Pose pose2 = pose; motionSpin = 0f; if (swinging) { pose2 = SwingPose(pose, val); } else if (guardOn) { pose2 = GuardPose(val); } else if (equipping) { SampleKeys(EquipKeys, equipT / 0.55f, grip, rest, val, out var pos2, out var euler); pose2.pos = pos2; pose2.rot = QEuler(euler); } else if (inspecting) { MotionPose(grip, rest, val, out pose2.pos, out pose2.rot); } else if (plungePhase != 0) { PlungePose(grip, rest, val, out var p, out var e); pose2.pos = p; pose2.rot = QEuler(e); } if (fading) { Pose a = Drift(fadeFrom, fadeVel, fadeAngVel, fadeT); float num = Smoother(fadeT / fadeDur); pose2 = Blend2(a, pose2, num, num, ref fadeRel, ref fadeRelValid); } if (!Valid(pose2)) { pose2 = IdlePose(); } prevPose = lastPose; lastPose = pose2; havePrev = true; evalDt = pendingDt; pendingDt = 0f; Vector3 val2 = pose2.pos + swayPos; Quaternion val3 = QMul(QEuler(swayEuler), pose2.rot); Vector3 val4 = Vector3.Min(BoxMin, grip); Vector3 val5 = Vector3.Max(BoxMax, grip); val2.x = Mathf.Clamp(val2.x, val4.x, val5.x); val2.y = Mathf.Clamp(val2.y, val4.y, val5.y); val2.z = Mathf.Clamp(val2.z, val4.z, val5.z); if (!Finite(val2)) { val2 = grip; } if (float.IsNaN(val3.x) || float.IsNaN(val3.y) || float.IsNaN(val3.z) || float.IsNaN(val3.w)) { val3 = QEuler(rest); } val3 = QNorm(val3); float num2 = LeftClampSkip(); val2 = ((num2 > 0f) ? Vector3.LerpUnclamped(SoftReachLeft(val2, val3), val2, num2) : SoftReachLeft(val2, val3)); val2 = SoftReach(val2); ComputeHandCues(val2, val3); ComputeSaya(); gripPosition = val2; rotation = val3; } private Pose SwingPose(Pose basePose, Vector3 delta) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) Cut cut = Cuts[swingMove]; float num = Warp(swingP); Pose pose = CutPose(cut, num, delta); if (num < cut.coilEnd) { float num2 = num / cut.coilEnd; pose = Blend2(Drift(swingFrom, fromVel, fromAngVel, swingClock), pose, Smoother(num2 / (1f - cut.handLead)), Smoother(num2), ref coilRel, ref coilRelValid); } else if (num > cut.holdEnd) { float num3 = (num - cut.holdEnd) / Mathf.Max(0.0001f, 1f - cut.holdEnd); pose = Blend2(pose, basePose, Smoother(num3 / (1f - 0.5f * cut.handLead)), Smoother(num3), ref returnRel, ref returnRelValid); } return pose; } private static float Warp(float p) { p = Mathf.Clamp01(p); if (Mathf.Abs(0.020000003f) < 1E-05f && Mathf.Abs(0.013000011f) < 1E-05f) { return p; } float num = 0.8571428f; float num2 = 1.0555555f; float num3 = 1.0177112f; float num4 = ((num * num2 > 0f) ? (2f / (1f / num + 1f / num2)) : 0f); float num5 = ((num2 * num3 > 0f) ? (2f / (1f / num2 + 1f / num3)) : 0f); if (p < 0.14f) { return Herm(p, 0f, 0.14f, 0f, 0.12f, num, num4); } if (p < 0.266f) { return Herm(p, 0.14f, 0.266f, 0.12f, 0.253f, num4, num5); } return Herm(p, 0.266f, 1f, 0.253f, 1f, num5, num3); } private static float Herm(float x, float xa, float xb, float ya, float yb, float ma, float mb) { float num = xb - xa; if (num <= 1E-06f) { return yb; } float num2 = (x - xa) / num; float num3 = num2 * num2; float num4 = num3 * num2; return (2f * num4 - 3f * num3 + 1f) * ya + (num4 - 2f * num3 + num2) * num * ma + (-2f * num4 + 3f * num3) * yb + (num4 - num3) * num * mb; } private static Pose CutPose(Cut cut, float t, Vector3 delta) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0281: Unknown result type (might be due to invalid IL or missing references) //IL_0286: 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_0296: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01de: 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_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) CutKey[] keys = cut.keys; int num = keys.Length; float num2; float deg; Vector3 val; if (t <= keys[0].t) { num2 = keys[0].th; deg = keys[0].roll; val = keys[0].g; } else if (t >= keys[num - 1].t) { num2 = keys[num - 1].th; deg = keys[num - 1].roll; val = keys[num - 1].g; } else { int i; for (i = 0; i < num - 2 && t > keys[i + 1].t; i++) { } float num3 = keys[i + 1].t - keys[i].t; float num4 = ((num3 > 1E-06f) ? ((t - keys[i].t) / num3) : 1f); float num5 = num4 * num4; float num6 = num5 * num4; float num7 = 2f * num6 - 3f * num5 + 1f; float num8 = (num6 - 2f * num5 + num4) * num3; float num9 = -2f * num6 + 3f * num5; float num10 = (num6 - num5) * num3; CutTangent(keys, i, out var mt, out var mr, out var mg); CutTangent(keys, i + 1, out var mt2, out var mr2, out var mg2); num2 = num7 * keys[i].th + num8 * mt + num9 * keys[i + 1].th + num10 * mt2; deg = num7 * keys[i].roll + num8 * mr + num9 * keys[i + 1].roll + num10 * mr2; val = num7 * keys[i].g + num8 * mg + num9 * keys[i + 1].g + num10 * mg2; } float num11 = num2 * (MathF.PI / 180f); float num12 = Mathf.Cos(num11); float num13 = Mathf.Sin(num11); Vector3 fwd = num12 * cut.u + num13 * cut.v; Vector3 val2 = (0f - num13) * cut.u + num12 * cut.v; Pose result = default(Pose); result.pos = val + delta; result.rot = QMul(QLook(fwd, -val2), QAxis(Vector3.forward, deg)); return result; } private static void CutTangent(CutKey[] k, int i, out float mt, out float mr, out Vector3 mg) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_00da: 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) int num = k.Length; if (i <= 0 || i >= num - 1 || k[i].stop) { mt = 0f; mr = 0f; mg = Vector3.zero; } else { float num2 = k[i + 1].t - k[i - 1].t; float num3 = ((num2 > 1E-06f) ? (1f / num2) : 0f); mt = (float.IsNaN(k[i].vel) ? ((k[i + 1].th - k[i - 1].th) * num3) : k[i].vel); mr = (k[i + 1].roll - k[i - 1].roll) * num3; mg = (k[i + 1].g - k[i - 1].g) * num3; } } private static void SampleKeys(Key[] keys, float t, Vector3 grip, Vector3 rest, Vector3 delta, out Vector3 pos, out Vector3 euler) { //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_0011: 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_0041: 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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0069: 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_006b: 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_009e: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: 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_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: 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_00d4: 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_0187: 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) //IL_018f: 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_019d: 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_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: 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_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: 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_010a: 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_0113: Unknown result type (might be due to invalid IL or missing references) int num = keys.Length; if (num == 0) { pos = grip; euler = rest; return; } if (float.IsNaN(t)) { t = 0f; } if (num == 1 || t <= keys[0].t) { Resolve(in keys[0], grip, rest, delta, out pos, out euler); return; } if (t >= keys[num - 1].t) { Resolve(in keys[num - 1], grip, rest, delta, out pos, out euler); return; } int i; for (i = 0; i < num - 2 && t > keys[i + 1].t; i++) { } Resolve(in keys[i], grip, rest, delta, out var pos2, out var euler2); Resolve(in keys[i + 1], grip, rest, delta, out var pos3, out var euler3); Tangent(keys, i, grip, rest, delta, out var mp, out var me); Tangent(keys, i + 1, grip, rest, delta, out var mp2, out var me2); float num2 = keys[i + 1].t - keys[i].t; if (num2 <= 1E-06f) { pos = pos3; euler = euler3; return; } float num3 = (t - keys[i].t) / num2; float num4 = num3 * num3; float num5 = num4 * num3; float num6 = 2f * num5 - 3f * num4 + 1f; float num7 = (num5 - 2f * num4 + num3) * num2; float num8 = -2f * num5 + 3f * num4; float num9 = (num5 - num4) * num2; pos = num6 * pos2 + num7 * mp + num8 * pos3 + num9 * mp2; euler = num6 * euler2 + num7 * me + num8 * euler3 + num9 * me2; } private static void Tangent(Key[] keys, int i, Vector3 grip, Vector3 rest, Vector3 delta, out Vector3 mp, out Vector3 me) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_0040: 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_0055: 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_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: 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_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: 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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) int num = keys.Length; if (i <= 0 || i >= num - 1 || keys[i].stop) { mp = Vector3.zero; me = Vector3.zero; return; } Resolve(in keys[i - 1], grip, rest, delta, out var pos, out var euler); Resolve(in keys[i + 1], grip, rest, delta, out var pos2, out var euler2); float num2 = keys[i + 1].t - keys[i - 1].t; if (num2 <= 1E-06f) { mp = Vector3.zero; me = Vector3.zero; } else { float num3 = 1f / num2; mp = (pos2 - pos) * num3; me = (euler2 - euler) * num3; } } private static void Resolve(in Key k, Vector3 grip, Vector3 rest, Vector3 delta, out Vector3 pos, out Vector3 euler) { //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_0038: 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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (k.idle) { pos = grip + k.pos; euler = rest + k.euler; } else { pos = k.pos + delta; euler = k.euler; } } private static Pose Blend(Pose a, Pose b, float w) { //IL_0017: 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_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (w <= 0f) { return a; } if (w >= 1f) { return b; } Pose result = default(Pose); result.pos = Vector3.LerpUnclamped(a.pos, b.pos, w); result.rot = QSlerp(a.rot, b.rot, w); return result; } private static Pose Blend2(Pose a, Pose b, float wPos, float wRot, ref Vector3 lastRel, ref bool lastValid) { //IL_0003: 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_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_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_0096: 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_00b1: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_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_0088: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: 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_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) Pose result = default(Pose); result.pos = Vector3.LerpUnclamped(a.pos, b.pos, Mathf.Clamp01(wPos)); Vector3 val = QToRotVec(QMul(b.rot, QInv(a.rot))); float magnitude = ((Vector3)(ref val)).magnitude; if (lastValid && magnitude > 0.0001f) { Vector3 val2 = val * (1f - MathF.PI * 2f / magnitude); Vector3 val3 = val2 - lastRel; float sqrMagnitude = ((Vector3)(ref val3)).sqrMagnitude; val3 = val - lastRel; if (sqrMagnitude < ((Vector3)(ref val3)).sqrMagnitude) { val = val2; } } if (Finite(val)) { lastRel = val; lastValid = true; } else { val = Vector3.zero; } float num = Mathf.Clamp01(wRot); result.rot = ((num >= 1f) ? b.rot : QNorm(QMul(QFromRotVec(val * num), a.rot))); return result; } private static float Smoother(float t) { t = Mathf.Clamp01(t); return t * t * t * (t * (t * 6f - 15f) + 10f); } private static void Spring(ref float x, ref float v, float target, float omega, float dt) { if (!(dt <= 0f)) { float num = v - (x - target) * (omega * omega * dt); float num2 = 1f + omega * dt; v = num / (num2 * num2); x += v * dt; if (float.IsNaN(x) || float.IsNaN(v)) { x = target; v = 0f; } } } private static void StepUnderdamped(ref float x, ref float v, float omega, float zeta, float dt) { if (!(dt <= 0f)) { int num = Mathf.Clamp(Mathf.CeilToInt(dt / (1f / 120f)), 1, 16); float num2 = dt / (float)num; for (int i = 0; i < num; i++) { float num3 = (0f - omega) * omega * x - 2f * zeta * omega * v; v += num3 * num2; x += v * num2; } if (float.IsNaN(x) || float.IsNaN(v)) { x = 0f; v = 0f; } } } private static void StepSpring(ref Vector3 x, ref Vector3 v, Vector3 target, float omega, float zeta, float dt) { //IL_002a: 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_0031: 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_003f: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: 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_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_00a4: Unknown result type (might be due to invalid IL or missing references) if (!(dt <= 0f)) { int num = Mathf.Clamp(Mathf.CeilToInt(dt / (1f / 120f)), 1, 16); float num2 = dt / (float)num; for (int i = 0; i < num; i++) { Vector3 val = (target - x) * (omega * omega) - v * (2f * zeta * omega); v += val * num2; x += v * num2; } if (!Finite(x) || !Finite(v)) { x = target; v = Vector3.zero; } } } private static Vector3 SoftReach(Vector3 p) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) Vector3 val = p - RightShoulder; float magnitude = ((Vector3)(ref val)).magnitude; if (!(magnitude > 0.20210001f)) { return p; } float num = 0.20210001f + 0.00939998f * (float)Math.Tanh((magnitude - 0.20210001f) / 0.00939998f); return RightShoulder + val * (num / magnitude); } private static Vector3 SoftReachLeft(Vector3 grip, Quaternion rot) { //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_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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_002a: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_007e: 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) Vector3 val = grip - QRotate(rot, new Vector3(0f, 0f, LeftHandDistance())) - LeftShoulder; float magnitude = ((Vector3)(ref val)).magnitude; if (!(magnitude > 0.21620001f)) { return grip; } float num = 0.21620001f + 0.011749998f * (float)Math.Tanh((magnitude - 0.21620001f) / 0.011749998f); Vector3 val2 = grip + val * (num / magnitude - 1f); if (!Finite(val2)) { return grip; } return val2; } private static float LeftHandDistance() { float num = ((KatanaPlugin.LeftHandOffset != null) ? KatanaPlugin.LeftHandOffset.Value : 0.12f); if (!(num > 0.182f)) { num = 0.182f; } float num2 = ((KatanaPlugin.ModelScale != null) ? KatanaPlugin.ModelScale.Value : 1f); float num3 = ((KatanaPlugin.FirstPersonScale != null) ? KatanaPlugin.FirstPersonScale.Value : 0.55f); float num4 = num * num2 * Mathf.Clamp(num3, 0.05f, 5f); if (float.IsNaN(num4) || float.IsInfinity(num4)) { num4 = 0.1001f; } return Mathf.Clamp(num4, 0f, 0.25f); } private static Pose IdlePose() { //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_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) Pose result = default(Pose); result.pos = GetGrip(); result.rot = QEuler(GetRest()); return result; } private static bool Valid(Pose p) { //IL_0001: 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_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_004a: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) if (Finite(p.pos)) { if (!float.IsNaN(p.rot.x) && !float.IsNaN(p.rot.y) && !float.IsNaN(p.rot.z) && !float.IsNaN(p.rot.w)) { if (p.rot.x == 0f && p.rot.y == 0f && p.rot.z == 0f) { return p.rot.w != 0f; } return true; } return false; } return false; } private static bool Finite(Vector3 v) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001a: 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_0034: 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) if (!float.IsNaN(v.x) && !float.IsNaN(v.y) && !float.IsNaN(v.z) && !float.IsInfinity(v.x) && !float.IsInfinity(v.y)) { return !float.IsInfinity(v.z); } return false; } private static Quaternion QAxis(Vector3 axis, float deg) { //IL_0015: 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_0025: 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) float num = deg * 0.5f * (MathF.PI / 180f); float num2 = Mathf.Sin(num); return new Quaternion(axis.x * num2, axis.y * num2, axis.z * num2, Mathf.Cos(num)); } private static Quaternion QEuler(Vector3 e) { //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_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_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) return QMul(QAxis(Vector3.up, e.y), QMul(QAxis(Vector3.right, e.x), QAxis(Vector3.forward, e.z))); } private static Quaternion QMul(Quaternion a, Quaternion b) { //IL_0000: 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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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_0044: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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_006e: 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_007b: 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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0097: 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_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_00b2: 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_00c0: 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_00ce: 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_00dc: Unknown result type (might be due to invalid IL or missing references) return new Quaternion(a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, a.w * b.y + a.y * b.w + a.z * b.x - a.x * b.z, a.w * b.z + a.z * b.w + a.x * b.y - a.y * b.x, a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z); } private static Quaternion QInv(Quaternion q) { //IL_0000: 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_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) return new Quaternion(0f - q.x, 0f - q.y, 0f - q.z, q.w); } private static Vector3 QRotate(Quaternion q, Vector3 v) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_002a: 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_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_0038: 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_003e: 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) Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(q.x, q.y, q.z); Vector3 val2 = 2f * Vector3.Cross(val, v); return v + q.w * val2 + Vector3.Cross(val, val2); } private static Quaternion QNorm(Quaternion q) { //IL_0000: 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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0061: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Sqrt(q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w); if (num < 1E-06f || float.IsNaN(num)) { return new Quaternion(0f, 0f, 0f, 1f); } float num2 = 1f / num; return new Quaternion(q.x * num2, q.y * num2, q.z * num2, q.w * num2); } private static Quaternion QSlerp(Quaternion a, Quaternion b, float t) { //IL_0000: 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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: 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_0053: 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_00b7: 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_00c8: 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_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: 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_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) float num = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; if (num < 0f) { num = 0f - num; ((Quaternion)(ref b))..ctor(0f - b.x, 0f - b.y, 0f - b.z, 0f - b.w); } float num2; float num3; if (num > 0.9995f) { num2 = 1f - t; num3 = t; } else { float num4 = Mathf.Acos(Mathf.Clamp(num, -1f, 1f)); float num5 = Mathf.Sin(num4); num2 = Mathf.Sin((1f - t) * num4) / num5; num3 = Mathf.Sin(t * num4) / num5; } return QNorm(new Quaternion(num2 * a.x + num3 * b.x, num2 * a.y + num3 * b.y, num2 * a.z + num3 * b.z, num2 * a.w + num3 * b.w)); } private static Quaternion QLook(Vector3 fwd, Vector3 up) { //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_0008: 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_000a: 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_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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0058: 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_0067: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_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) Vector3 normalized = ((Vector3)(ref fwd)).normalized; Vector3 val = Vector3.Cross(up, normalized); if (((Vector3)(ref val)).sqrMagnitude < 1E-10f) { val = Vector3.Cross((Mathf.Abs(normalized.y) < 0.9f) ? Vector3.up : Vector3.right, normalized); } ((Vector3)(ref val)).Normalize(); Vector3 val2 = Vector3.Cross(normalized, val); float x = val.x; float x2 = val2.x; float x3 = normalized.x; float y = val.y; float y2 = val2.y; float y3 = normalized.y; float z = val.z; float z2 = val2.z; float z3 = normalized.z; float num = x + y2 + z3; Quaternion q = default(Quaternion); if (num > 0f) { float num2 = Mathf.Sqrt(num + 1f) * 2f; ((Quaternion)(ref q))..ctor((z2 - y3) / num2, (x3 - z) / num2, (y - x2) / num2, 0.25f * num2); } else if (x > y2 && x > z3) { float num3 = Mathf.Sqrt(1f + x - y2 - z3) * 2f; ((Quaternion)(ref q))..ctor(0.25f * num3, (x2 + y) / num3, (x3 + z) / num3, (z2 - y3) / num3); } else if (y2 > z3) { float num4 = Mathf.Sqrt(1f + y2 - x - z3) * 2f; ((Quaternion)(ref q))..ctor((x2 + y) / num4, 0.25f * num4, (y3 + z2) / num4, (x3 - z) / num4); } else { float num5 = Mathf.Sqrt(1f + z3 - x - y2) * 2f; ((Quaternion)(ref q))..ctor((x3 + z) / num5, (y3 + z2) / num5, 0.25f * num5, (y - x2) / num5); } return QNorm(q); } private static Vector3 QToRotVec(Quaternion q) { //IL_0000: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_006b: 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_007c: 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_005f: Unknown result type (might be due to invalid IL or missing references) if (q.w < 0f) { ((Quaternion)(ref q))..ctor(0f - q.x, 0f - q.y, 0f - q.z, 0f - q.w); } Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(q.x, q.y, q.z); float magnitude = ((Vector3)(ref val)).magnitude; if (magnitude < 1E-07f) { return val * 2f; } float num = 2f * Mathf.Atan2(magnitude, q.w); return val * (num / magnitude); } private static Quaternion QFromRotVec(Vector3 r) { //IL_0044: 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_0052: 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_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) float magnitude = ((Vector3)(ref r)).magnitude; if (magnitude < 1E-07f) { return QNorm(new Quaternion(r.x * 0.5f, r.y * 0.5f, r.z * 0.5f, 1f)); } return QAxis(r / magnitude, magnitude * 57.29578f); } private static PoseKey P(float t, float gx, float gy, float gz, float bx, float by, float bz, float ex, float ey, float ez, bool stop = false, float roll = 0f) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) return new PoseKey { t = t, g = new Vector3(gx, gy, gz), blade = new Vector3(bx, by, bz), edge = new Vector3(ex, ey, ez), stop = stop, roll = roll }; } private static PoseKey PIdle(float t, float roll = 0f) { return new PoseKey { t = t, idle = true, stop = true, roll = roll }; } private static Vector3 EulerOf(Vector3 blade, Vector3 edge) { //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_0008: 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_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: 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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: 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_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: 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_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_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) Vector3 normalized = ((Vector3)(ref blade)).normalized; Vector3 val = -(edge - Vector3.Dot(edge, normalized) * normalized); if (((Vector3)(ref val)).sqrMagnitude < 1E-08f) { val = Vector3.Cross(normalized, Vector3.right); } ((Vector3)(ref val)).Normalize(); float num = Mathf.Asin(Mathf.Clamp(0f - normalized.y, -1f, 1f)); float num2 = Mathf.Atan2(normalized.x, normalized.z); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(Mathf.Cos(num2), 0f, 0f - Mathf.Sin(num2)); Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(Mathf.Sin(num) * Mathf.Sin(num2), Mathf.Cos(num), Mathf.Sin(num) * Mathf.Cos(num2)); float num3 = Mathf.Atan2(0f - Vector3.Dot(val, val2), Vector3.Dot(val, val3)); return new Vector3(num, num2, num3) * 57.29578f; } private static float Near(float a, float reference) { return reference + Mathf.DeltaAngle(reference, a); } private static Key[] BuildKeys(params PoseKey[] ks) { //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_0085: 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_0090: 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_0099: 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_00ab: 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_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: 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_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: 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_0107: 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_0118: 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_0030: 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_0074: 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_007e: Unknown result type (might be due to invalid IL or missing references) Key[] array = new Key[ks.Length]; Vector3 val = DefaultRest; for (int i = 0; i < ks.Length; i++) { PoseKey poseKey = ks[i]; if (poseKey.idle) { float num = Near(DefaultRest.z, val.z) - DefaultRest.z; array[i] = Idle(poseKey.t, num + poseKey.roll); val = DefaultRest + new Vector3(0f, 0f, num); } else { Vector3 val2 = EulerOf(poseKey.blade, poseKey.edge); ((Vector3)(ref val2))..ctor(Near(val2.x, val.x), Near(val2.y, val.y), Near(val2.z, val.z)); val = val2; val2.z += poseKey.roll; array[i] = K(poseKey.t, poseKey.g.x, poseKey.g.y, poseKey.g.z, val2.x, val2.y, val2.z, poseKey.stop); } } return array; } private static DKey D(float t, float ox, float oy, float oz, float ang, bool stop = false) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) return new DKey { t = t, off = new Vector3(ox, oy, oz), ang = ang, stop = stop }; } private static WKey W(float t, float w) { return new WKey { t = t, w = w }; } private static float SampleW(WKey[] k, float t) { int num = ((k != null) ? k.Length : 0); if (num == 0 || float.IsNaN(t)) { return 0f; } if (t <= k[0].t) { return k[0].w; } if (t >= k[num - 1].t) { ret