Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of LethalEmotesAPI v1.18.0
LethalEmotesApi/LethalEmotesApi.Ui.dll
Decompiled 2 weeks 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.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Text; using System.Threading; using LethalEmotesApi.Ui.Animation; using LethalEmotesApi.Ui.Customize; using LethalEmotesApi.Ui.Customize.DragDrop; using LethalEmotesApi.Ui.Customize.Preview; using LethalEmotesApi.Ui.Customize.RebindConflict; using LethalEmotesApi.Ui.Customize.Wheel; using LethalEmotesApi.Ui.Data; using LethalEmotesApi.Ui.Db; using LethalEmotesApi.Ui.Elements; using LethalEmotesApi.Ui.Elements.Recycle; using LethalEmotesApi.Ui.NetcodePatcher; using LethalEmotesApi.Ui.Utils; using LethalEmotesApi.Ui.Wheel; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.InputSystem; using UnityEngine.Rendering; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LethalEmotesApi.Ui")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+2892fc8cd03ed2d1549afad23392d18df3e893a0")] [assembly: AssemblyProduct("LethalEmotesApi.Ui")] [assembly: AssemblyTitle("LethalEmotesApi.Ui")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] [CompilerGenerated] internal sealed class <>z__ReadOnlySingleElementList<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { private sealed class Enumerator : IDisposable, IEnumerator, IEnumerator<T> { object IEnumerator.Current => _item; T IEnumerator<T>.Current => _item; public Enumerator(T item) { _item = item; } bool IEnumerator.MoveNext() { return !_moveNextCalled && (_moveNextCalled = true); } void IEnumerator.Reset() { _moveNextCalled = false; } void IDisposable.Dispose() { } } int ICollection.Count => 1; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => 1; T IReadOnlyList<T>.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } } int ICollection<T>.Count => 1; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } set { throw new NotSupportedException(); } } public <>z__ReadOnlySingleElementList(T item) { _item = item; } IEnumerator IEnumerable.GetEnumerator() { return new Enumerator(_item); } void ICollection.CopyTo(Array array, int index) { array.SetValue(_item, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return EqualityComparer<T>.Default.Equals(_item, (T)value); } int IList.IndexOf(object value) { return (!EqualityComparer<T>.Default.Equals(_item, (T)value)) ? (-1) : 0; } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return new Enumerator(_item); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return EqualityComparer<T>.Default.Equals(_item, item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { array[arrayIndex] = _item; } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { return (!EqualityComparer<T>.Default.Equals(_item, item)) ? (-1) : 0; } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } } namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.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 LethalEmotesApi.Ui { internal static class DebugUtils { public static string ToPrettyString<T>(this IEnumerable<T> enumerable) { StringBuilder stringBuilder = new StringBuilder(); int num = 0; stringBuilder.AppendLine("{"); num++; int num2 = 0; foreach (T item in enumerable) { if (item != null) { for (int i = 0; i < num; i++) { stringBuilder.Append(" "); } stringBuilder.AppendLine($"[{num2}]: {item.ToString()}"); num2++; } } stringBuilder.AppendLine("}"); return stringBuilder.ToString(); } } public static class EmoteUiManager { private static IEmoteUiStateController? _stateController; internal static EmoteUiPanel? emoteUiInstance; private static bool _hasShownDmcaPrompt; private static EmoteWheelSetDisplayData? _emoteDisplayData; internal static IEmoteDb EmoteDb => _stateController.EmoteDb; internal static IReadOnlyCollection<string> EmoteKeys => _stateController.EmoteDb.EmoteKeys; internal static IReadOnlyCollection<string> RandomPoolBlacklist => _stateController.RandomPoolBlacklist; internal static IReadOnlyCollection<string> EmotePoolBlacklist => _stateController.EmotePoolBlacklist; public static float EmoteVolume { get { return _stateController.EmoteVolume; } set { _stateController.EmoteVolume = value; } } public static bool HideJoinSpots { get { return _stateController.HideJoinSpots; } set { _stateController.HideJoinSpots = value; } } public static int RootMotionType { get { return _stateController.RootMotionType; } set { _stateController.RootMotionType = value; } } public static bool EmotesAlertEnemies { get { return _stateController.EmotesAlertEnemies; } set { _stateController.EmotesAlertEnemies = value; } } public static int DmcaFree { get { return _stateController.DmcaFree; } set { _stateController.DmcaFree = value; } } public static int ThirdPerson { get { return _stateController.ThirdPerson; } set { _stateController.ThirdPerson = value; } } public static bool UseGlobalSettings { get { return _stateController.UseGlobalSettings; } set { _stateController.UseGlobalSettings = value; } } public static bool DontShowDmcaPrompt { get { return _stateController.DontShowDmcaPrompt; } set { _stateController.DontShowDmcaPrompt = value; } } public static bool PermanentEmotingHealthbar { get { return _stateController.PermanentEmotingHealthbar; } set { _stateController.PermanentEmotingHealthbar = value; } } public static bool ImportTME { get { return _stateController.ImportTME; } set { _stateController.ImportTME = value; } } public static bool ImportBetterEmotes { get { return _stateController.ImportBetterEmotes; } set { _stateController.ImportBetterEmotes = value; } } public static bool NearestEmoteText { get { return _stateController.NearestEmoteText; } set { _stateController.NearestEmoteText = value; } } public static bool NearestEmoteTutorial { get { return _stateController.NearestEmoteTextTutorial; } set { _stateController.NearestEmoteTextTutorial = value; } } public static void RegisterStateController(IEmoteUiStateController stateController) { _stateController = stateController; } public static IEmoteUiStateController? GetStateController() { return _stateController; } internal static void PlayEmote(string emoteKey) { try { _stateController?.PlayEmote(emoteKey); } catch { Debug.Log((object)"Emote selected might not exist"); } } internal static void LockMouseInput() { _stateController?.LockMouseInput(); } internal static void UnlockMouseInput() { _stateController?.UnlockMouseInput(); } internal static void LockPlayerInput() { _stateController?.LockPlayerInput(); } internal static void UnlockPlayerInput() { _stateController?.UnlockPlayerInput(); } internal static void EnableKeybinds() { _stateController?.EnableKeybinds(); } internal static void DisableKeybinds() { _stateController?.DisableKeybinds(); } internal static void PlayAnimationOn(Animator animator, string emoteKey) { _stateController?.PlayAnimationOn(animator, emoteKey); } internal static string GetEmoteName(string emoteKey) { IEmoteDb emoteDb = _stateController.EmoteDb; if (emoteDb.EmoteExists(emoteKey)) { return emoteDb.GetEmoteName(emoteKey); } if (_emoteDisplayData == null) { return emoteKey; } return _emoteDisplayData.EmoteKeyEmoteNameLut.GetValueOrDefault(emoteKey, emoteKey); } internal static string GetEmoteModName(string emoteKey) { IEmoteDb emoteDb = _stateController.EmoteDb; if (emoteDb.EmoteExists(emoteKey)) { return emoteDb.GetModName(emoteKey); } if (_emoteDisplayData == null) { return "Unknown"; } return _emoteDisplayData.EmoteKeyModNameLut.GetValueOrDefault(emoteKey, "Unknown"); } internal static bool GetEmoteVisibility(string emoteKey) { return _stateController.EmoteDb.GetEmoteVisibility(emoteKey); } internal static void AddToRandomPoolBlacklist(string emoteKey) { _stateController?.AddToRandomPoolBlacklist(emoteKey); } internal static void RemoveFromRandomPoolBlacklist(string emoteKey) { _stateController?.RemoveFromRandomPoolBlacklist(emoteKey); } internal static void AddToEmoteBlacklist(string emoteKey) { _stateController?.AddToEmoteBlacklist(emoteKey); } internal static void RemoveFromEmoteBlacklist(string emoteKey) { _stateController?.RemoveFromEmoteBlacklist(emoteKey); } internal static void RefreshBothLists() { _stateController?.RefreshBothLists(); } internal static InputActionReference? GetEmoteKeybind(string? emoteKey) { if (emoteKey == null) { return null; } return _stateController?.GetEmoteKeybind(emoteKey); } internal static string[] GetEmoteKeysForBindPath(string bindPath) { return _stateController.GetEmoteKeysForBindPath(bindPath); } internal static EmoteWheelSetData LoadEmoteWheelSetData() { _emoteDisplayData = _stateController.LoadEmoteWheelSetDisplayData(); EmoteWheelSetData emoteWheelSetData = _stateController.LoadEmoteWheelSetData(); _stateController.SaveEmoteWheelSetDisplayData(_emoteDisplayData.LoadFromWheelSetData(emoteWheelSetData)); return emoteWheelSetData; } internal static void SaveEmoteWheelSetData(EmoteWheelSetData dataToSave) { _stateController.SaveEmoteWheelSetData(dataToSave); _emoteDisplayData = _emoteDisplayData.LoadFromWheelSetData(dataToSave); _stateController.SaveEmoteWheelSetDisplayData(_emoteDisplayData); if (emoteUiInstance != null) { emoteUiInstance.ReloadData(); } } internal static void SaveKeybinds() { _stateController?.SaveKeybinds(); } internal static void LoadKeybinds() { _stateController?.LoadKeybinds(); } public static bool IsEmoteWheelsOpen() { EmoteUiPanel emoteUiPanel = emoteUiInstance; return emoteUiPanel != null && emoteUiPanel.IsOpen && emoteUiPanel.CurrentView == EmoteUiPanel.UiView.EmoteWheels; } public static bool IsCustomizePanelOpen() { EmoteUiPanel emoteUiPanel = emoteUiInstance; return emoteUiPanel != null && emoteUiPanel.IsOpen && emoteUiPanel.CurrentView == EmoteUiPanel.UiView.Customize; } public static bool IsEmoteUiOpen() { return emoteUiInstance?.IsOpen ?? false; } public static bool CanOpenEmoteWheels() { if (_stateController == null) { return false; } return _stateController.CanOpenEmoteUi() && !IsCustomizePanelOpen(); } public static void OnLeftWheel() { if (emoteUiInstance != null && emoteUiInstance.emoteWheelsController != null && IsEmoteWheelsOpen()) { emoteUiInstance.emoteWheelsController.PrevWheel(); } } public static void OnRightWheel() { if (emoteUiInstance != null && emoteUiInstance.emoteWheelsController != null && IsEmoteWheelsOpen()) { emoteUiInstance.emoteWheelsController.NextWheel(); } } public static void OpenEmoteWheels() { if (emoteUiInstance != null && CanOpenEmoteWheels()) { emoteUiInstance.Show(); _stateController?.DisableKeybinds(); } } public static void CloseEmoteWheels() { if (emoteUiInstance != null && IsEmoteWheelsOpen()) { emoteUiInstance.Hide(); _stateController?.EnableKeybinds(); } } public static void CloseCustomizationPanel() { if (emoteUiInstance != null && IsCustomizePanelOpen()) { emoteUiInstance.Hide(); _stateController?.EnableKeybinds(); } } public static void CloseUiGracefully() { if (emoteUiInstance != null) { emoteUiInstance.CloseGracefully(); _stateController?.EnableKeybinds(); } } public static void ShowDmcaPrompt() { if (_stateController == null || _hasShownDmcaPrompt) { return; } ThreadPool.QueueUserWorkItem(delegate { while (emoteUiInstance == null) { Thread.Sleep(250); } _hasShownDmcaPrompt = true; _stateController.EnqueueWorkOnUnityThread(emoteUiInstance.ShowDmcaPrompt); }); } public static float GetUIScale() { if (emoteUiInstance == null) { Debug.LogWarning((object)"EmoteUiInstance is null!"); return 0f; } return ((Component)((Component)emoteUiInstance).transform.parent).GetComponent<Canvas>().scaleFactor; } } public class EmoteUiPanel : MonoBehaviour { internal enum UiView { None, EmoteWheels, Customize, DmcaPrompt, DmcaVerificationPrompt } public EmoteWheelsController? emoteWheelsController; public CustomizePanel? customizePanel; public RectTransform? customizeButton; public GameObject? dmcaPromptPrefab; public GameObject? dmcaVerificationPromptPrefab; private TextMeshProUGUI? _customizeButtonLabel; private GameObject? _dmcaPromptInstance; private GameObject? _dmcaVerificationPromptInstance; private UiView _prevView; public bool IsOpen { get; private set; } internal UiView CurrentView { get; private set; } = UiView.EmoteWheels; private void Awake() { EmoteUiManager.emoteUiInstance = this; if (customizeButton != null && _customizeButtonLabel == null) { _customizeButtonLabel = ((Component)customizeButton).GetComponentInChildren<TextMeshProUGUI>(); } } private void OnEnable() { if (customizeButton != null && _customizeButtonLabel == null) { _customizeButtonLabel = ((Component)customizeButton).GetComponentInChildren<TextMeshProUGUI>(); } } public void ReloadData() { if (emoteWheelsController != null) { emoteWheelsController.ReloadWheels(); } } public void Show() { CurrentView = UiView.EmoteWheels; _prevView = UiView.None; UpdateCustomizeButton(); ShowCustomizeButton(); ShowEmoteWheels(); EmoteUiManager.LockMouseInput(); IsOpen = true; } public void Hide() { HideCustomizePanel(); HideCustomizeButton(); HideEmoteWheels(); CloseDmcaPrompt(); CloseDmcaVerificationPrompt(); CurrentView = UiView.EmoteWheels; _prevView = UiView.None; EmoteUiManager.UnlockMouseInput(); EmoteUiManager.UnlockPlayerInput(); EmoteUiManager.EnableKeybinds(); IsOpen = false; } public void CloseGracefully() { HideCustomizePanel(); HideCustomizeButton(); CloseEmoteWheelsGracefully(); CloseDmcaVerificationPrompt(); if (_prevView == UiView.DmcaPrompt) { CurrentView = _prevView; _prevView = UiView.None; EmoteUiManager.LockMouseInput(); EmoteUiManager.LockPlayerInput(); EmoteUiManager.DisableKeybinds(); } else { CloseDmcaPrompt(); CurrentView = UiView.EmoteWheels; _prevView = UiView.None; IsOpen = false; } } public void ToggleCustomizePanel() { if (emoteWheelsController != null) { if (CurrentView == UiView.EmoteWheels) { EmoteUiManager.GetStateController()?.RefreshTME(); CloseEmoteWheelsGracefully(); ShowCustomizePanel(); CurrentView = UiView.Customize; EmoteUiManager.LockPlayerInput(); } else if (CurrentView == UiView.Customize) { Hide(); } UpdateCustomizeButton(); } } public void ShowEmoteWheels() { if (emoteWheelsController != null) { emoteWheelsController.Show(); ((Component)emoteWheelsController.wheelLabel).gameObject.SetActive(true); } } public void HideEmoteWheels() { if (emoteWheelsController != null) { emoteWheelsController.Hide(); ((Component)emoteWheelsController.wheelLabel).gameObject.SetActive(false); } } public void CloseEmoteWheelsGracefully() { if (emoteWheelsController != null) { emoteWheelsController.CloseGracefully(); ((Component)emoteWheelsController.wheelLabel).gameObject.SetActive(false); } } public void ShowCustomizePanel() { if (customizePanel != null) { ((Component)customizePanel).gameObject.SetActive(true); } } public void HideCustomizePanel() { RebindConflictController.CancelExisting(); if (customizePanel != null) { customizePanel.dragDropController.CancelDrag(); ((Component)customizePanel).gameObject.SetActive(false); EmoteUiManager.UnlockPlayerInput(); EmoteUiManager.UnlockMouseInput(); } } public void ShowCustomizeButton() { if (customizeButton != null) { ((Component)customizeButton).gameObject.SetActive(true); } } public void HideCustomizeButton() { if (customizeButton != null) { ((Component)customizeButton).gameObject.SetActive(false); } } private void UpdateCustomizeButton() { if (_customizeButtonLabel != null) { ((TMP_Text)_customizeButtonLabel).SetText((CurrentView == UiView.EmoteWheels) ? "Customize" : "Close", true); } } public void ShowDmcaPrompt() { if (dmcaPromptPrefab != null) { CloseGracefully(); if (_dmcaPromptInstance != null && Object.op_Implicit((Object)(object)_dmcaPromptInstance)) { Object.DestroyImmediate((Object)(object)_dmcaPromptInstance); _dmcaPromptInstance = null; } CurrentView = UiView.DmcaPrompt; _dmcaPromptInstance = Object.Instantiate<GameObject>(dmcaPromptPrefab, ((Component)this).transform); EmoteUiManager.LockMouseInput(); EmoteUiManager.LockPlayerInput(); EmoteUiManager.DisableKeybinds(); IsOpen = true; } } private void CloseDmcaPrompt() { if (_dmcaPromptInstance != null) { Object.DestroyImmediate((Object)(object)_dmcaPromptInstance); _dmcaPromptInstance = null; } } public void ShowDmcaVerificationPrompt() { if (dmcaVerificationPromptPrefab != null) { if (CurrentView == UiView.DmcaPrompt) { _prevView = UiView.DmcaPrompt; } else { CloseGracefully(); } if (_dmcaVerificationPromptInstance != null && Object.op_Implicit((Object)(object)_dmcaVerificationPromptInstance)) { Object.DestroyImmediate((Object)(object)_dmcaVerificationPromptInstance); _dmcaVerificationPromptInstance = null; } CurrentView = UiView.DmcaVerificationPrompt; _dmcaVerificationPromptInstance = Object.Instantiate<GameObject>(dmcaVerificationPromptPrefab, ((Component)this).transform); EmoteUiManager.LockMouseInput(); EmoteUiManager.LockPlayerInput(); EmoteUiManager.DisableKeybinds(); IsOpen = true; } } private void CloseDmcaVerificationPrompt() { if (_dmcaVerificationPromptInstance != null) { Object.DestroyImmediate((Object)(object)_dmcaVerificationPromptInstance); _dmcaVerificationPromptInstance = null; } } private void OnDestroy() { EmoteUiManager.emoteUiInstance = null; } } [ExecuteAlways] public class WheelSegmentGen : MonoBehaviour { public Material segmentMat; public ColorBlock colorBlock; [Range(1f, 20f)] public int segments = 8; [Range(-90f, 90f)] public float offset; [Range(0f, 700f)] public float maxRadius = 300f; [Range(0f, 699f)] public float minRadius = 100f; private void OnDrawGizmos() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0082: 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_00b8: 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_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) if (minRadius >= maxRadius) { minRadius = maxRadius - 1f; } Vector3 position = ((Component)this).transform.position; float num = (float)(Math.PI * 2.0 / (double)segments); Vector3 val = default(Vector3); Vector3 val2 = default(Vector3); for (int i = 0; i < segments; i++) { float num2 = (float)i * num + MathF.PI / 180f * offset; float num3 = ((float)i * num + (float)(i + 1) * num) / 2f + MathF.PI / 180f * offset; float num4 = (float)((double)position.x + Math.Cos(num2) * (double)maxRadius); float num5 = (float)((double)position.y + Math.Sin(num2) * (double)maxRadius); float num6 = (float)((double)position.x + Math.Cos(num2) * (double)minRadius); float num7 = (float)((double)position.y + Math.Sin(num2) * (double)minRadius); ((Vector3)(ref val))..ctor(num6, num7, position.z); ((Vector3)(ref val2))..ctor(num4, num5, position.z); Gizmos.DrawLine(val, val2); } } } } namespace LethalEmotesApi.Ui.Wheel { [RequireComponent(typeof(CanvasGroup))] public class EmoteWheel : MonoBehaviour, IPointerMoveHandler, IEventSystemHandler { private class EmoteSelectedCallback : UnityEvent<string> { } private readonly TweenRunner<AnimCurveTween<Vector3Tween>> _posTweenRunner = new TweenRunner<AnimCurveTween<Vector3Tween>>(); private readonly TweenRunner<AnimCurveTween<FloatTween>> _alphaTweenRunner = new TweenRunner<AnimCurveTween<FloatTween>>(); private readonly DelayedActionRunner<DelayedAction> _delayedActionRunner = new DelayedActionRunner<DelayedAction>(); public CanvasGroup? canvasGroup; public WheelStopEmote? wheelStopEmote; public ColorBlock colors; [Range(1f, 2f)] public float scaleMultiplier; public int segmentCount = 8; public float segmentRotOffset = 22.5f; public float minRadius = 100f; public float maxRadius = 300f; public List<EmoteWheelSegment> wheelSegments = new List<EmoteWheelSegment>(); public string[] emoteArray; private int _currentSegmentIndex = -1; private RectTransform? _rectTransform; private readonly EmoteSelectedCallback _emoteSelectedCallback = new EmoteSelectedCallback(); private bool _focused; public bool Focused { get { return _focused; } set { _focused = value; foreach (EmoteWheelSegment wheelSegment in wheelSegments) { wheelSegment.focused = _focused; } if (!_focused) { ((UnityEventBase)_emoteSelectedCallback).RemoveAllListeners(); } } } protected EmoteWheel() { emoteArray = new string[segmentCount]; _posTweenRunner.Init((MonoBehaviour)(object)this); _alphaTweenRunner.Init((MonoBehaviour)(object)this); _delayedActionRunner.Init((MonoBehaviour)(object)this); } private void Awake() { //IL_0040: 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) _rectTransform = ((Component)this).GetComponent<RectTransform>(); if (canvasGroup == null) { canvasGroup = ((Component)this).GetComponent<CanvasGroup>(); } foreach (EmoteWheelSegment wheelSegment in wheelSegments) { wheelSegment.colors = colors; wheelSegment.scaleMultiplier = scaleMultiplier; wheelSegment.targetGraphic.segmentCount = segmentCount; wheelSegment.targetGraphic.segmentRotOffset = segmentRotOffset; wheelSegment.targetGraphic.minRadius = minRadius; wheelSegment.targetGraphic.maxRadius = maxRadius; wheelSegment.ResetState(); } } private void OnEnable() { ResetState(); } public void OnPointerMove(PointerEventData eventData) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_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_0081: 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_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) if (!_focused) { return; } Vector2 val = default(Vector2); RectTransformUtility.ScreenPointToLocalPointInRectangle(_rectTransform, eventData.position, eventData.enterEventCamera, ref val); Rect rect = _rectTransform.rect; float num = Vector2.Distance(Vector2.zero, val); if (num < minRadius) { DeSelectAll(); ((UnityEvent<string>)(object)_emoteSelectedCallback).Invoke("none"); wheelStopEmote.OnPointerEnter(eventData); return; } if (val.x > ((Rect)(ref rect)).xMax || val.x < ((Rect)(ref rect)).xMin || val.y > ((Rect)(ref rect)).yMax || val.y < ((Rect)(ref rect)).yMin) { DeSelectAll(); ((UnityEvent<string>)(object)_emoteSelectedCallback).Invoke(""); return; } int closestSegmentIndex = GetClosestSegmentIndex(val); if (closestSegmentIndex != _currentSegmentIndex) { wheelStopEmote.OnPointerExit(eventData); if (_currentSegmentIndex > -1) { wheelSegments[_currentSegmentIndex].OnPointerExit(eventData); } _currentSegmentIndex = closestSegmentIndex; wheelSegments[closestSegmentIndex].OnPointerEnter(eventData); ((UnityEvent<string>)(object)_emoteSelectedCallback).Invoke(emoteArray[_currentSegmentIndex]); } } public void DeSelectAll() { _currentSegmentIndex = -1; foreach (EmoteWheelSegment wheelSegment in wheelSegments) { wheelSegment.DeSelect(); } } public void ResetState() { _currentSegmentIndex = -1; foreach (EmoteWheelSegment wheelSegment in wheelSegments) { wheelSegment.ResetState(); } _posTweenRunner.StopTween(); _alphaTweenRunner.StopTween(); _delayedActionRunner.StopAction(); canvasGroup.alpha = 1f; } public void LoadEmotes(string[] emotes) { emoteArray = emotes; for (int i = 0; i < emoteArray.Length; i++) { wheelSegments[i].targetLabel?.SetEmote(emoteArray[i]); } } private int GetClosestSegmentIndex(Vector2 mousePos) { //IL_0021: 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_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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) int result = -1; float num = float.MaxValue; for (int i = 0; i < wheelSegments.Count; i++) { EmoteWheelSegment emoteWheelSegment = wheelSegments[i]; Vector2 val = Vector2.op_Implicit(((Transform)emoteWheelSegment.segmentRectTransform).position - ((Transform)_rectTransform).position); float num2 = Vector2.Distance(val, mousePos); if (num2 < num) { num = num2; result = i; } } return result; } public void AddOnEmoteSelectedCallback(UnityAction<string> callback) { ((UnityEvent<string>)(object)_emoteSelectedCallback).AddListener(callback); } public void TweenPos(Vector3 targetPos, AnimationCurve curve, float duration, bool ignoreTimeScale) { //IL_0007: 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_003e: 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) if (((Component)this).transform.localPosition == targetPos) { _posTweenRunner.StopTween(); return; } Vector3Tween vector3Tween = default(Vector3Tween); vector3Tween.Duration = duration; vector3Tween.StartValue = ((Component)this).transform.localPosition; vector3Tween.TargetValue = targetPos; vector3Tween.IgnoreTimeScale = ignoreTimeScale; Vector3Tween wrappedTweenValue = vector3Tween; wrappedTweenValue.AddOnChangedCallback(TweenPosChanged); AnimCurveTween<Vector3Tween> animCurveTween = default(AnimCurveTween<Vector3Tween>); animCurveTween.WrappedTweenValue = wrappedTweenValue; animCurveTween.Curve = curve; AnimCurveTween<Vector3Tween> tweenValue = animCurveTween; _posTweenRunner.StartTween(tweenValue); } private void TweenPosChanged(Vector3 pos) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.localPosition = pos; } public void TweenAlpha(float targetAlpha, AnimationCurve curve, float duration, bool ignoreTimeScale) { if (canvasGroup != null) { if (canvasGroup.alpha == targetAlpha) { _alphaTweenRunner.StopTween(); return; } FloatTween floatTween = default(FloatTween); floatTween.Duration = duration; floatTween.StartValue = canvasGroup.alpha; floatTween.TargetValue = targetAlpha; floatTween.IgnoreTimeScale = ignoreTimeScale; FloatTween wrappedTweenValue = floatTween; wrappedTweenValue.AddOnChangedCallback(TweenAlphaChanged); AnimCurveTween<FloatTween> animCurveTween = default(AnimCurveTween<FloatTween>); animCurveTween.WrappedTweenValue = wrappedTweenValue; animCurveTween.Curve = curve; AnimCurveTween<FloatTween> tweenValue = animCurveTween; _alphaTweenRunner.StartTween(tweenValue); } } private void TweenAlphaChanged(float alpha) { canvasGroup.alpha = alpha; } public void DisableAfterDuration(float duration, bool ignoreTimeScale) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown if (!((Component)this).gameObject.activeInHierarchy) { _delayedActionRunner.StopAction(); return; } DelayedAction delayedAction = default(DelayedAction); delayedAction.Duration = duration; delayedAction.IgnoreTimeScale = ignoreTimeScale; delayedAction.Action = new UnityAction(DelayedDisable); DelayedAction delayedAction2 = delayedAction; _delayedActionRunner.StartAction(delayedAction2); } private void DelayedDisable() { ((Component)this).gameObject.SetActive(false); } } public class EmoteWheelsController : MonoBehaviour { public GameObject? wheelPrefab; public RectTransform? wheelContainer; public TextMeshProUGUI? wheelLabel; public float fadeDist = 500f; public float fadeDuration = 0.5f; public AnimationCurve? fadeCurve; private EmoteWheel[] _wheels = Array.Empty<EmoteWheel>(); private int _currentWheelIndex; private string _selectedEmote = ""; private bool _wheelLock; private EmoteWheelSetData WheelSetData => EmoteUiManager.LoadEmoteWheelSetData(); public void Start() { InitWheels(); } private void OnEnable() { ReloadWheels(); } public void ReloadWheels() { if (WheelSetData.EmoteWheels.Length != _wheels.Length) { EmoteWheel[] wheels = _wheels; foreach (EmoteWheel emoteWheel in wheels) { Object.DestroyImmediate((Object)(object)((Component)emoteWheel).gameObject); } InitWheels(); } else { for (int j = 0; j < _wheels.Length; j++) { EmoteWheel emoteWheel2 = _wheels[j]; EmoteWheelData emoteWheelData = WheelSetData.EmoteWheels[j]; ((Component)emoteWheel2).gameObject.SetActive(true); emoteWheel2.LoadEmotes(emoteWheelData.Emotes); } } } public void LockWheels() { _wheelLock = true; if (_currentWheelIndex >= 0) { _wheels[_currentWheelIndex].DeSelectAll(); } } public void UnlockWheels() { _wheelLock = false; } private void InitWheels() { //IL_0075: Unknown result type (might be due to invalid IL or missing references) if (wheelPrefab == null || wheelContainer == null) { return; } int num = WheelSetData.EmoteWheels.Length; if (_wheels.Length != num) { _wheels = new EmoteWheel[num]; for (int i = 0; i < _wheels.Length; i++) { GameObject val = Object.Instantiate<GameObject>(wheelPrefab, (Transform)(object)wheelContainer); val.transform.localPosition = Vector3.zero; EmoteWheel component = val.GetComponent<EmoteWheel>(); EmoteWheelData emoteWheelData = WheelSetData.EmoteWheels[i]; component.LoadEmotes(emoteWheelData.Emotes); component.Focused = false; ((Component)component).gameObject.SetActive(false); _wheels[i] = component; } _currentWheelIndex = 0; int num2 = WheelSetData.IndexOfDefault(); if (num2 >= 0) { _currentWheelIndex = num2; } UpdateWheelState(); } } public void NextWheel() { if (!_wheelLock) { int currentWheelIndex = _currentWheelIndex; _currentWheelIndex++; if (_currentWheelIndex >= _wheels.Length) { _currentWheelIndex = 0; } EmoteWheel emoteWheel = _wheels[currentWheelIndex]; emoteWheel.Focused = false; emoteWheel.DeSelectAll(); FadeWheelLeft(currentWheelIndex); UpdateWheelState(); } } public void PrevWheel() { if (!_wheelLock) { int currentWheelIndex = _currentWheelIndex; _currentWheelIndex--; if (_currentWheelIndex < 0) { _currentWheelIndex = _wheels.Length - 1; } EmoteWheel emoteWheel = _wheels[currentWheelIndex]; emoteWheel.Focused = false; emoteWheel.DeSelectAll(); FadeWheelRight(currentWheelIndex); UpdateWheelState(); } } public void Show() { UnlockWheels(); if (wheelContainer != null) { int num = WheelSetData.IndexOfDefault(); if (num >= 0) { _currentWheelIndex = num; } EmoteWheel currentWheel = GetCurrentWheel(); ((Component)currentWheel).gameObject.SetActive(true); ((Component)wheelContainer).gameObject.SetActive(true); if (wheelLabel != null) { ((Component)wheelLabel).gameObject.SetActive(true); UpdateWheelState(); } } } public void Hide() { UnlockWheels(); if (wheelContainer == null) { return; } EmoteWheel[] wheels = _wheels; foreach (EmoteWheel emoteWheel in wheels) { ((Component)emoteWheel).gameObject.SetActive(false); } ((Component)wheelContainer).gameObject.SetActive(false); if (!string.IsNullOrEmpty(_selectedEmote)) { EmoteUiManager.PlayEmote(_selectedEmote); _selectedEmote = "none"; if (wheelLabel != null) { ((Component)wheelLabel).gameObject.SetActive(false); } } } public void CloseGracefully() { if (wheelContainer != null) { EmoteWheel[] wheels = _wheels; foreach (EmoteWheel emoteWheel in wheels) { ((Component)emoteWheel).gameObject.SetActive(false); } ((Component)wheelContainer).gameObject.SetActive(false); _selectedEmote = ""; if (wheelLabel != null) { ((Component)wheelLabel).gameObject.SetActive(false); } } } private EmoteWheel GetCurrentWheel() { return _wheels[_currentWheelIndex]; } private void UpdateWheelState() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) EmoteWheel currentWheel = GetCurrentWheel(); ((Component)currentWheel).gameObject.SetActive(true); Transform transform = ((Component)currentWheel).transform; transform.SetAsLastSibling(); transform.localPosition = Vector3.zero; currentWheel.ResetState(); currentWheel.Focused = true; currentWheel.AddOnEmoteSelectedCallback(UpdateSelectedEmote); EmoteWheelData emoteWheelData = WheelSetData.EmoteWheels[_currentWheelIndex]; ((TMP_Text)wheelLabel).SetText(emoteWheelData.Name, true); } private void UpdateSelectedEmote(string selectedEmote) { _selectedEmote = selectedEmote; } private void FadeWheelLeft(int wheelIndex, bool instant = false) { FadeWheel(wheelIndex, left: true, instant); } private void FadeWheelRight(int wheelIndex, bool instant = false) { FadeWheel(wheelIndex, left: false, instant); } private void FadeWheel(int wheelIndex, bool left, bool instant = false) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) if (fadeCurve != null) { EmoteWheel emoteWheel = _wheels[wheelIndex]; Vector3 targetPos = default(Vector3); ((Vector3)(ref targetPos))..ctor(left ? (0f - fadeDist) : fadeDist, 0f, 0f); emoteWheel.TweenPos(targetPos, fadeCurve, instant ? 0f : fadeDuration, ignoreTimeScale: true); emoteWheel.TweenAlpha(0f, fadeCurve, instant ? 0f : fadeDuration, ignoreTimeScale: true); emoteWheel.DisableAfterDuration(instant ? 0f : fadeDuration, ignoreTimeScale: true); } } } [DisallowMultipleComponent] [RequireComponent(typeof(RectTransform))] [ExecuteAlways] public class EmoteWheelSegment : UIBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler { public WheelSegmentGraphic? targetGraphic; public SegmentLabel? targetLabel; public RectTransform? segmentRectTransform; public ColorBlock colors; [Range(1f, 2f)] public float scaleMultiplier; public bool selected; public bool focused; private bool IsSelected() { return selected && focused; } protected override void Awake() { ((UIBehaviour)this).Awake(); if (targetGraphic == null) { targetGraphic = ((Component)this).GetComponentInChildren<WheelSegmentGraphic>(); } if (targetLabel == null) { targetLabel = ((Component)this).GetComponentInChildren<SegmentLabel>(); } } protected override void OnEnable() { ((UIBehaviour)this).OnEnable(); UpdateState(requireFocus: false, instant: true); } public void OnPointerEnter(PointerEventData eventData) { selected = true; UpdateState(); } public void OnPointerExit(PointerEventData eventData) { selected = false; UpdateState(); } public void DeSelect() { selected = false; UpdateState(requireFocus: false); } public void ResetState() { selected = false; UpdateState(requireFocus: false, instant: true); } private Color GetColor() { //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_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_0027: Unknown result type (might be due to invalid IL or missing references) if (IsSelected()) { return ((ColorBlock)(ref colors)).selectedColor; } return ((ColorBlock)(ref colors)).normalColor; } private float GetScale() { if (IsSelected()) { return scaleMultiplier; } return 1f; } private void UpdateState(bool requireFocus = true, bool instant = false) { //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) //IL_001a: 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) if (!(!focused && requireFocus)) { Color color = GetColor(); StartColorTween(color * ((ColorBlock)(ref colors)).colorMultiplier, instant); StartScaleTween(GetScale(), instant); } } private void StartColorTween(Color targetColor, bool instant) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) if (targetGraphic != null) { ((Graphic)targetGraphic).CrossFadeColor(targetColor, instant ? 0f : ((ColorBlock)(ref colors)).fadeDuration, true, true); } } private void StartScaleTween(float targetScale, bool instant) { //IL_0024: 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) if (targetGraphic != null && targetLabel != null) { targetGraphic.TweenScale(new Vector3(targetScale, targetScale, targetScale), instant ? 0f : ((ColorBlock)(ref colors)).fadeDuration, ignoreTimeScale: true); targetLabel.TweenScale(new Vector3(targetScale, targetScale, targetScale), instant ? 0f : ((ColorBlock)(ref colors)).fadeDuration, ignoreTimeScale: true); } } } [DisallowMultipleComponent] [RequireComponent(typeof(RectTransform))] [ExecuteAlways] public class SegmentLabel : UIBehaviour { private readonly TweenRunner<Vector3Tween> _scaleTweenRunner = new TweenRunner<Vector3Tween>(); public RectTransform? targetLabel; public TextMeshProUGUI? targetText; public RectTransform? missingLabel; public TextMeshProUGUI? missingText; public RectTransform? lockedLabel; public TextMeshProUGUI? lockedText; private RectTransform? _rectTransform; private string? _emoteKey; protected DrivenRectTransformTracker tracker; public RectTransform RectTransform { get { if (_rectTransform == null) { _rectTransform = ((Component)this).GetComponent<RectTransform>(); } return _rectTransform; } } protected SegmentLabel() { _scaleTweenRunner.Init((MonoBehaviour)(object)this); } protected override void OnEnable() { //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007e: 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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: 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) ((UIBehaviour)this).OnEnable(); if (targetLabel != null && missingLabel != null && lockedLabel != null) { ((DrivenRectTransformTracker)(ref tracker)).Add((Object)(object)this, targetLabel, (DrivenTransformProperties)16); ((DrivenRectTransformTracker)(ref tracker)).Add((Object)(object)this, missingLabel, (DrivenTransformProperties)16); ((DrivenRectTransformTracker)(ref tracker)).Add((Object)(object)this, lockedLabel, (DrivenTransformProperties)16); Vector3 eulerAngles = ((Transform)RectTransform).eulerAngles; ((Transform)targetLabel).localEulerAngles = -eulerAngles; ((Transform)missingLabel).localEulerAngles = -eulerAngles; ((Transform)lockedLabel).localEulerAngles = -eulerAngles; UpdateText(); } } protected override void OnDisable() { ((UIBehaviour)this).OnDisable(); ((DrivenRectTransformTracker)(ref tracker)).Clear(); } public void SetEmote(string? emoteKey) { _emoteKey = emoteKey; UpdateText(); } private void UpdateText() { if (targetText != null && missingLabel != null && missingText != null && _emoteKey != null) { string emoteName = EmoteUiManager.GetEmoteName(_emoteKey); ((Component)lockedLabel).gameObject.SetActive(false); ((Component)missingLabel).gameObject.SetActive(false); if (!EmoteUiManager.EmoteDb.EmoteExists(_emoteKey)) { ((TMP_Text)targetText).SetText("", true); string emoteModName = EmoteUiManager.GetEmoteModName(_emoteKey); ((TMP_Text)missingText).SetText("<color=#FFFFFF>" + emoteName + "</color>\n<color=#eed202>Requires</color>\n<color=#FFFFFF>" + emoteModName + "</color>", true); ((Component)missingLabel).gameObject.SetActive(true); } else if (!EmoteUiManager.GetEmoteVisibility(_emoteKey)) { ((TMP_Text)targetText).SetText("", true); ((TMP_Text)lockedText).SetText("<color=#eed202>Unlock</color>\n" + emoteName + "\n<color=#eed202>With</color>\nTooManyEmotes", true); ((Component)lockedLabel).gameObject.SetActive(true); } else { ((TMP_Text)targetText).SetText(emoteName, true); } } } public void TweenScale(Vector3 targetScale, float duration, bool ignoreTimeScale) { //IL_0007: 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_003e: 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) if (((Component)this).transform.localScale == targetScale) { _scaleTweenRunner.StopTween(); return; } Vector3Tween vector3Tween = default(Vector3Tween); vector3Tween.Duration = duration; vector3Tween.StartValue = ((Component)this).transform.localScale; vector3Tween.TargetValue = targetScale; vector3Tween.IgnoreTimeScale = ignoreTimeScale; Vector3Tween tweenValue = vector3Tween; tweenValue.AddOnChangedCallback(TweenScaleChanged); _scaleTweenRunner.StartTween(tweenValue); } private void TweenScaleChanged(Vector3 scale) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.localScale = scale; } } [DisallowMultipleComponent] [RequireComponent(typeof(CanvasRenderer))] [ExecuteAlways] public class WheelSegmentGraphic : Graphic { private readonly TweenRunner<Vector3Tween> _scaleTweenRunner = new TweenRunner<Vector3Tween>(); public int segmentCount = 8; public float segmentRotOffset = 22.5f; public float minRadius = 100f; public float maxRadius = 300f; protected WheelSegmentGraphic() { _scaleTweenRunner.Init((MonoBehaviour)(object)this); } protected override void OnEnable() { ((Graphic)this).OnEnable(); ((Graphic)this).raycastTarget = false; } protected override void OnPopulateMesh(VertexHelper vh) { //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_0013: 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_004b: 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_005b: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_009c: 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_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) vh.Clear(); Color32 val = Color32.op_Implicit(((Graphic)this).color); float num = (float)(Math.PI * 2.0 / (double)segmentCount); float num2 = num + MathF.PI / 180f * segmentRotOffset; int num3 = 0; float num4 = MathF.PI / 180f; Vector3 val2 = CosSin(num2, minRadius); Vector3 val3 = CosSin(num2 + num, minRadius); Vector3 val4 = -Vector3.Lerp(val2, val3, 0.5f); float num5 = num + num4 / 2f - num4; for (float num6 = 0f; num6 < num5; num6 += num4) { float rad = num2 + num6; Vector3 val5 = CosSin(rad, minRadius) + val4; Vector3 val6 = CosSin(rad, maxRadius) + val4; rad = num2 + num6 + num4; Vector3 val7 = CosSin(rad, minRadius) + val4; Vector3 val8 = CosSin(rad, maxRadius) + val4; float num7 = num6 / num5; float num8 = (num6 + num4) / num5; vh.AddVert(val5, val, Vector4.op_Implicit(new Vector2(num7, 0f))); vh.AddVert(val6, val, Vector4.op_Implicit(new Vector2(num7, 1f))); vh.AddVert(val7, val, Vector4.op_Implicit(new Vector2(num8, 0f))); vh.AddVert(val8, val, Vector4.op_Implicit(new Vector2(num8, 1f))); vh.AddTriangle(num3 + 2, num3 + 1, num3); vh.AddTriangle(num3 + 3, num3 + 1, num3 + 2); num3 += 4; } } private static Vector3 CosSin(float rad, float dist) { //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_0028: Unknown result type (might be due to invalid IL or missing references) float num = (float)(Math.Cos(rad) * (double)dist); float num2 = (float)(Math.Sin(rad) * (double)dist); return new Vector3(num, num2, 0f); } public void TweenScale(Vector3 targetScale, float duration, bool ignoreTimeScale) { //IL_0007: 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_003e: 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) if (((Component)this).transform.localScale == targetScale) { _scaleTweenRunner.StopTween(); return; } Vector3Tween vector3Tween = default(Vector3Tween); vector3Tween.Duration = duration; vector3Tween.StartValue = ((Component)this).transform.localScale; vector3Tween.TargetValue = targetScale; vector3Tween.IgnoreTimeScale = ignoreTimeScale; Vector3Tween tweenValue = vector3Tween; tweenValue.AddOnChangedCallback(TweenScaleChanged); _scaleTweenRunner.StartTween(tweenValue); } private void TweenScaleChanged(Vector3 scale) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.localScale = scale; } } [DisallowMultipleComponent] [RequireComponent(typeof(RectTransform))] [ExecuteAlways] public class WheelStopEmote : UIBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler { public WheelStopEmoteGraphic? backgroundGraphic; public Graphic? foregroundGraphic; public LeUiScaleTweener? scaleTweener; public ColorBlock colors; [Range(1f, 2f)] public float scaleMultiplier; public bool selected; protected override void OnEnable() { ((UIBehaviour)this).OnEnable(); UpdateState(instant: true); } public void OnPointerEnter(PointerEventData eventData) { selected = true; UpdateState(); } public void OnPointerExit(PointerEventData eventData) { selected = false; UpdateState(); } private Color GetBackgroundColor() { //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_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_0027: Unknown result type (might be due to invalid IL or missing references) if (selected) { return ((ColorBlock)(ref colors)).selectedColor; } return ((ColorBlock)(ref colors)).normalColor; } private Color GetForegroundColor() { //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_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_0027: Unknown result type (might be due to invalid IL or missing references) if (selected) { return ((ColorBlock)(ref colors)).highlightedColor; } return ((ColorBlock)(ref colors)).disabledColor; } private float GetScale() { if (selected) { return scaleMultiplier; } return 1f; } private void UpdateState(bool instant = false) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_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_0021: 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) Color backgroundColor = GetBackgroundColor(); Color foregroundColor = GetForegroundColor(); StartColorTween(foregroundColor * ((ColorBlock)(ref colors)).colorMultiplier, backgroundColor * ((ColorBlock)(ref colors)).colorMultiplier, instant); float scale = GetScale(); StartScaleTween(scale, instant); } private void StartColorTween(Color foregroundColor, Color backgroundColor, bool instant) { //IL_0007: 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) ((Graphic)backgroundGraphic).CrossFadeColor(backgroundColor, instant ? 0f : ((ColorBlock)(ref colors)).fadeDuration, true, true); foregroundGraphic.CrossFadeColor(foregroundColor, instant ? 0f : ((ColorBlock)(ref colors)).fadeDuration, true, true); } private void StartScaleTween(float scale, bool instant) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) if (scaleTweener != null) { Vector3 targetScale = default(Vector3); ((Vector3)(ref targetScale))..ctor(scale, scale, scale); scaleTweener.TweenScale(targetScale, instant ? 0f : ((ColorBlock)(ref colors)).fadeDuration, ignoreTimeScale: true); } } } [DisallowMultipleComponent] [RequireComponent(typeof(CanvasRenderer))] [ExecuteAlways] public class WheelStopEmoteGraphic : Graphic { public float radius = 95f; protected override void OnPopulateMesh(VertexHelper vh) { //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_0013: 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_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_0079: 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_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_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_00a7: 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_00b8: 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_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) vh.Clear(); Color32 val = Color32.op_Implicit(((Graphic)this).color); float num = MathF.PI * 2f; int num2 = 0; float num3 = MathF.PI / 180f; for (float num4 = 0f; num4 + num3 < num; num4 += num3) { float rad = num4; Vector3 val2 = CosSin(rad, radius); rad = num4 + num3; Vector3 val3 = CosSin(rad, radius); vh.AddVert(Vector3.zero, val, Vector4.op_Implicit(new Vector2(0f, 0f))); vh.AddVert(val2, val, Vector4.op_Implicit(new Vector2(0f, 1f))); vh.AddVert(Vector3.zero, val, Vector4.op_Implicit(new Vector2(1f, 0f))); vh.AddVert(val3, val, Vector4.op_Implicit(new Vector2(1f, 1f))); vh.AddTriangle(num2 + 2, num2 + 1, num2); vh.AddTriangle(num2 + 3, num2 + 1, num2 + 2); num2 += 4; } } private static Vector3 CosSin(float rad, float dist) { //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_0028: Unknown result type (might be due to invalid IL or missing references) float num = (float)(Math.Cos(rad) * (double)dist); float num2 = (float)(Math.Sin(rad) * (double)dist); return new Vector3(num, num2, 0f); } } } namespace LethalEmotesApi.Ui.Utils { internal static class RectTransformUtils { private static Camera? _uiCamera; private static readonly Vector3[] Corners = (Vector3[])(object)new Vector3[4]; private static Camera GetUiCamera() { //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) if (_uiCamera != null && Object.op_Implicit((Object)(object)_uiCamera)) { return _uiCamera; } _uiCamera = null; Scene activeScene = SceneManager.GetActiveScene(); GameObject val = ((IEnumerable<GameObject>)((Scene)(ref activeScene)).GetRootGameObjects()).FirstOrDefault((Func<GameObject, bool>)((GameObject go) => ((Object)go).name == "Systems")); if (val == null) { Debug.LogWarning((object)"Failed to find UICamera in active scene, falling back to Camera.current!"); return Camera.current; } Transform val2 = val.transform.Find("UI/UICamera"); if (val2 == null) { Debug.LogWarning((object)"Failed to find UICamera at MainMenu, falling back to Camera.current!"); return Camera.current; } Camera component = ((Component)val2).GetComponent<Camera>(); if (component == null) { Debug.LogWarning((object)"Failed to find Camera component on UICamera, falling back to Camera.current!"); return Camera.current; } _uiCamera = component; return _uiCamera; } public static Rect GetRelativeRect(this RectTransform root, RectTransform worldRectTransform) { //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_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_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_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_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_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) Camera uiCamera = GetUiCamera(); worldRectTransform.GetWorldCorners(Corners); Vector3[] array = (Vector3[])(object)new Vector3[4]; for (int i = 0; i < Corners.Length; i++) { array[i] = Vector2.op_Implicit(RectTransformUtility.WorldToScreenPoint(uiCamera, Corners[i])); } Vector2[] array2 = (Vector2[])(object)new Vector2[4]; for (int j = 0; j < array.Length; j++) { RectTransformUtility.ScreenPointToLocalPointInRectangle(root, Vector2.op_Implicit(array[j]), uiCamera, ref array2[j]); } Vector2 val = Vector2.zero; Vector2 val2 = Vector2.zero; Vector2[] array3 = array2; foreach (Vector2 val3 in array3) { val = Vector2.Min(val, val3); val2 = Vector2.Max(val2, val3); } Vector2 val4 = val2 - val; return new Rect(val.x, val.y, val4.x, val4.y); } } } namespace LethalEmotesApi.Ui.Options { public class DmcaFreeDropdown : LeUiDropdown { protected override int GetCurrentValue() { return EmoteUiManager.DmcaFree; } protected override void SetCurrentValue(int value) { EmoteUiManager.DmcaFree = value; } } public class DontShowDmcaPromptToggle : LeUiToggle { protected override bool GetCurrentValue() { return EmoteUiManager.DontShowDmcaPrompt; } protected override void SetCurrentValue(bool value) { EmoteUiManager.DontShowDmcaPrompt = value; } } public class EmotesAlertEnemies : LeUiToggle { protected override bool GetCurrentValue() { return EmoteUiManager.EmotesAlertEnemies; } protected override void SetCurrentValue(bool value) { EmoteUiManager.EmotesAlertEnemies = value; } } public class EmoteVolumeSlider : MonoBehaviour { public Slider? volumeSlider; private bool _hasListener; private void Awake() { UpdateSliderValue(); EnsureListener(); } private void Start() { UpdateSliderValue(); EnsureListener(); } private void OnEnable() { UpdateSliderValue(); EnsureListener(); } private void UpdateStateBroadcast() { UpdateSliderValue(); } private void UpdateSliderValue() { if (volumeSlider != null) { volumeSlider.value = EmoteUiManager.EmoteVolume; } } private void EnsureListener() { if (volumeSlider != null && !_hasListener) { ((UnityEvent<float>)(object)volumeSlider.onValueChanged).AddListener((UnityAction<float>)SliderChanged); _hasListener = true; } } private void SliderChanged(float value) { EmoteUiManager.EmoteVolume = value; SetValueWithoutNotify(value); } private void SetValueWithoutNotify(float value) { if (volumeSlider != null) { volumeSlider.SetValueWithoutNotify(value); } } } public class HideJoinSpots : LeUiToggle { protected override bool GetCurrentValue() { return EmoteUiManager.HideJoinSpots; } protected override void SetCurrentValue(bool value) { EmoteUiManager.HideJoinSpots = value; } } public class ImportBetterEmotes : LeUiToggle { protected override bool GetCurrentValue() { return EmoteUiManager.ImportBetterEmotes; } protected override void SetCurrentValue(bool value) { EmoteUiManager.ImportBetterEmotes = value; } } public class ImportTME : LeUiToggle { protected override bool GetCurrentValue() { return EmoteUiManager.ImportTME; } protected override void SetCurrentValue(bool value) { EmoteUiManager.ImportTME = value; } } public abstract class LeUiDropdown : MonoBehaviour { public TMP_Dropdown? dropdown; private bool _hasListener; private void Awake() { UpdateDropdown(); EnsureListener(); } private void Start() { UpdateDropdown(); EnsureListener(); } private void OnEnable() { UpdateDropdown(); EnsureListener(); } private void UpdateDropdown() { if (dropdown != null) { dropdown.value = GetCurrentValue(); } } private void EnsureListener() { if (dropdown != null && !_hasListener) { ((UnityEvent<int>)(object)dropdown.onValueChanged).AddListener((UnityAction<int>)DropdownChanged); _hasListener = true; } } private void DropdownChanged(int value) { SetCurrentValue(value); SetValueWithoutNotify(value); } protected abstract int GetCurrentValue(); protected abstract void SetCurrentValue(int value); private void SetValueWithoutNotify(int value) { if (dropdown != null) { dropdown.SetValueWithoutNotify(value); } } private void UpdateStateBroadcast() { UpdateDropdown(); } } public abstract class LeUiToggle : MonoBehaviour { public Image? checkboxImage; private void Awake() { UpdateCheckbox(); } private void Start() { UpdateCheckbox(); } private void OnEnable() { UpdateCheckbox(); } public void Toggle() { SetCurrentValue(!GetCurrentValue()); UpdateCheckbox(); } private void UpdateCheckbox() { if (checkboxImage != null) { ((Behaviour)checkboxImage).enabled = GetCurrentValue(); } } protected abstract bool GetCurrentValue(); protected abstract void SetCurrentValue(bool value); private void UpdateStateBroadcast() { UpdateCheckbox(); } } public class NearestEmoteText : LeUiToggle { protected override bool GetCurrentValue() { return EmoteUiManager.NearestEmoteText; } protected override void SetCurrentValue(bool value) { EmoteUiManager.NearestEmoteText = value; } } public class NearestEmoteTextTutorial : LeUiToggle { protected override bool GetCurrentValue() { return EmoteUiManager.NearestEmoteTutorial; } protected override void SetCurrentValue(bool value) { EmoteUiManager.NearestEmoteTutorial = value; } } public class PermanentEmotingHealthbar : LeUiToggle { protected override bool GetCurrentValue() { return EmoteUiManager.PermanentEmotingHealthbar; } protected override void SetCurrentValue(bool value) { EmoteUiManager.PermanentEmotingHealthbar = value; } } public class RootMotionTypeDropdown : LeUiDropdown { protected override int GetCurrentValue() { return EmoteUiManager.RootMotionType; } protected override void SetCurrentValue(int value) { EmoteUiManager.RootMotionType = value; } } public class ThirdPersonDropdown : LeUiDropdown { protected override int GetCurrentValue() { return EmoteUiManager.ThirdPerson; } protected override void SetCurrentValue(int value) { EmoteUiManager.ThirdPerson = value; } } public class UseGlobalSettings : LeUiToggle { protected override bool GetCurrentValue() { return EmoteUiManager.UseGlobalSettings; } protected override void SetCurrentValue(bool value) { EmoteUiManager.UseGlobalSettings = !value; EmoteUiManager.UseGlobalSettings = value; EmoteUiManager.RefreshBothLists(); EmoteUiManager.emoteUiInstance.ReloadData(); ((Component)((Component)this).GetComponentInParent<CustomizePanel>()).gameObject.BroadcastMessage("UpdateStateBroadcast"); } } } namespace LethalEmotesApi.Ui.Hud { [DefaultExecutionOrder(-4)] public class HealthEmoteRenderer : MonoBehaviour { public SkinnedMeshRenderer? emoteSkinnedMeshRenderer; public Material? material; public RenderTexture? targetRenderTexture; private CommandBuffer? _cmdBuf; private readonly Matrix4x4 _projMat = Matrix4x4.Perspective(60f, 1f, 0.3f, 15f); private Matrix4x4 GetViewMatrix() { //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_0013: 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_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_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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_003a: 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_0056: 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_0075: Unknown result type (might be due to invalid IL or missing references) Transform transform = ((Component)this).transform; Matrix4x4 val = Matrix4x4.Rotate(Quaternion.Inverse(transform.rotation)) * Matrix4x4.Translate(-transform.position); if (SystemInfo.usesReversedZBuffer) { val.m20 = 0f - val.m20; val.m21 = 0f - val.m21; val.m22 = 0f - val.m22; val.m23 = 0f - val.m23; } return val; } private void Start() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown _cmdBuf = new CommandBuffer(); } private void LateUpdate() { //IL_0014: 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_004b: Unknown result type (might be due to invalid IL or missing references) _cmdBuf.Clear(); _cmdBuf.SetViewProjectionMatrices(GetViewMatrix(), _projMat); _cmdBuf.DrawRenderer((Renderer)(object)emoteSkinnedMeshRenderer, material); Graphics.SetRenderTarget(targetRenderTexture); GL.Clear(false, true, Color.green); Graphics.ExecuteCommandBuffer(_cmdBuf); } private void OnDestroy() { CommandBuffer? cmdBuf = _cmdBuf; if (cmdBuf != null) { cmdBuf.Dispose(); } } } } namespace LethalEmotesApi.Ui.Elements { [DisallowMultipleComponent] public class LeUiButton : UIBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler { public Graphic? targetGraphic; public LeUiScaleTweener? scaleTweener; public ColorBlock colors; [Range(0f, 2f)] public float scaleSelected; [Range(0f, 2f)] public float scalePressed; public UnityEvent onClick = new UnityEvent(); public UnityEvent onEnter = new UnityEvent(); public UnityEvent onExit = new UnityEvent(); private bool _selected; private bool _pressed; protected override void OnEnable() { ((UIBehaviour)this).OnEnable(); UpdateState(instant: true); } public void OnPointerEnter(PointerEventData eventData) { _selected = true; onEnter.Invoke(); UpdateState(); } public void OnPointerExit(PointerEventData eventData) { _selected = false; onExit.Invoke(); UpdateState(); } public void OnPointerDown(PointerEventData eventData) { _pressed = _selected; UpdateState(); } public void OnPointerUp(PointerEventData eventData) { _pressed = false; UpdateState(); } public void OnPointerClick(PointerEventData eventData) { onClick.Invoke(); } private Color GetColor() { //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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //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) //IL_003f: Unknown result type (might be due to invalid IL or missing references) if (_pressed) { return ((ColorBlock)(ref colors)).pressedColor; } if (_selected) { return ((ColorBlock)(ref colors)).selectedColor; } return ((ColorBlock)(ref colors)).normalColor; } private float GetScale() { if (_pressed) { return scalePressed; } if (_selected) { return scaleSelected; } return 1f; } private void UpdateState(bool instant = false) { //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_0043: Unknown result type (might be due to invalid IL or missing references) Color color = GetColor(); targetGraphic.CrossFadeColor(color, instant ? 0f : ((ColorBlock)(ref colors)).fadeDuration, true, true); float scale = GetScale(); Vector3 targetScale = default(Vector3); ((Vector3)(ref targetScale))..ctor(scale, scale, scale); scaleTweener.TweenScale(targetScale, instant ? 0f : ((ColorBlock)(ref colors)).fadeDuration, ignoreTimeScale: true); } } [DisallowMultipleComponent] [ExecuteAlways] public class LeUiScaleTweener : MonoBehaviour { private readonly TweenRunner<Vector3Tween> _scaleTweenRunner = new TweenRunner<Vector3Tween>(); private Vector3 _internalScale = Vector3.one; public List<RectTransform> targets = new List<RectTransform>(); protected LeUiScaleTweener() { //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) _scaleTweenRunner.Init((MonoBehaviour)(object)this); } public void TweenScale(Vector3 targetScale, float duration, bool ignoreTimeScale) { //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_003d: 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) if (_internalScale == targetScale) { _scaleTweenRunner.StopTween(); return; } Vector3Tween vector3Tween = default(Vector3Tween); vector3Tween.Duration = duration; vector3Tween.IgnoreTimeScale = ignoreTimeScale; vector3Tween.StartValue = _internalScale; vector3Tween.TargetValue = targetScale; Vector3Tween tweenValue = vector3Tween; tweenValue.AddOnChangedCallback(TweenScaleChanged); _scaleTweenRunner.StartTween(tweenValue); } private void TweenScaleChanged(Vector3 scale) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) _internalScale = scale; foreach (RectTransform target in targets) { ((Transform)target).localScale = scale; } } } public class LeUiSelectOutline : UIBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler { public Image? selectImage; public void OnPointerEnter(PointerEventData eventData) { if (selectImage != null) { ((Behaviour)selectImage).enabled = true; } } public void OnPointerExit(PointerEventData eventData) { if (selectImage != null) { ((Behaviour)selectImage).enabled = false; } } } } namespace LethalEmotesApi.Ui.Elements.Recycle { public interface IRecycleViewItem<in TData> { int ConstraintIndex { get; set; } RectTransform RectTransform { get; } void BindData(TData data); } [DisallowMultipleComponent] [RequireComponent(typeof(RectTransform))] public abstract class RecycleListView<TRecycleItem, TData> : UIBehaviour where TRecycleItem : Component, IRecycleViewItem<TData> { public enum Constraint { Columns, Rows } public ScrollRect? scrollRect; public GameObject? listItemPrefab; public RectOffset padding = new RectOffset(); public float spacing; public Vector2 preferredItemSize; public Corner startCorner; public Constraint constraint; public int maxInConstraint; public int minPoolSize = 10; public float requiredCoverageMultiplier = 1.5f; public float recyclingThreshold = 0.2f; private RectTransform? _recycleViewTransform; private RectTransform? _viewport; private RectTransform? _content; private Bounds _viewBounds; private Vector2 _prevAnchoredPos; private bool _recycling; private bool _firstUpdate; private readonly RecyclePool<TRecycleItem, TData> _pool = new RecyclePool<TRecycleItem, TData>(); private DrivenRectTransformTracker _tracker; private DrivenRectTransformTracker _poolTracker; protected abstract IList<TData> ListData { get; } protected override void Awake() { ((UIBehaviour)this).Awake(); _recycleViewTransform = ((Component)this).GetComponent<RectTransform>(); if (scrollRect != null) { _viewport = scrollRect.viewport; _content = scrollRect.content; if (_viewport != null && _content != null) { ((DrivenRectTransformTracker)(ref _tracker)).Add((Object)(object)this, _content, (DrivenTransformProperties)65286); ((UnityEvent<Vector2>)(object)scrollRect.onValueChanged).AddListener((UnityAction<Vector2>)HandleScroll); } } } protected override void Start() { ((UIBehaviour)this).Start(); UpdateState(); } protected override void OnEnable() { ((UIBehaviour)this).OnEnable(); } protected virtual void Update() { if (!_firstUpdate) { UpdateState(); _firstUpdate = true; } } private void OnValidate() { UpdateState(); } public void UpdateState() { UpdateContentSize(); UpdateViewBounds(); SetupPool(); } private void UpdateContentSize() { //IL_00c9: 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_00b2: 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) if (_content != null) { int num = Mathf.CeilToInt((float)ListData.Count / (float)maxInConstraint); float num2 = ((constraint == Constraint.Columns) ? preferredItemSize.y : preferredItemSize.x); int num3 = ((constraint == Constraint.Columns) ? (padding.top + padding.bottom) : (padding.left + padding.right)); float num4 = (float)num3 + (spacing * (float)(num - 1) + num2 * (float)num); _content.sizeDelta = ((constraint == Constraint.Columns) ? new Vector2(_content.sizeDelta.x, num4) : new Vector2(num4, _content.sizeDelta.y)); } } private void UpdateViewBounds() { //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_0072: 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) if (_recycleViewTransform != null && _viewport != null) { Rect relativeRect = _recycleViewTransform.GetRelativeRect(_viewport); float num = ((Rect)(ref relativeRect)).width / 2f * recyclingThreshold; float num2 = ((Rect)(ref relativeRect)).height / 2f * recyclingThreshold; ((Bounds)(ref _viewBounds)).min = new Vector3(((Rect)(ref relativeRect)).xMin - num, ((Rect)(ref relativeRect)).yMin - num2); ((Bounds)(ref _viewBounds)).max = new Vector3(((Rect)(ref relativeRect)).xMax + num, ((Rect)(ref relativeRect)).yMax + num2); } } private void SetupPool() { //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_006a: 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_0099: 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_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Invalid comparison between Unknown and I4 //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_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Invalid comparison between Unknown and I4 //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: 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_01bd: 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_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Invalid comparison between Unknown and I4 //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Invalid comparison between Unknown and I4 //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Expected I4, but got Unknown //IL_0331: Unknown result type (might be due to invalid IL or missing references) //IL_0390: Unknown result type (might be due to invalid IL or missing references) //IL_03f0: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_03ce: Unknown result type (might be due to invalid IL or missing references) //IL_042d: Unknown result type (might be due to invalid IL or missing references) //IL_048a: Unknown result type (might be due to invalid IL or missing references) //IL_04de: Unknown result type (might be due to invalid IL or missing references) //IL_04e3: Unknown result type (might be due to invalid IL or missing references) //IL_04e5: Unknown result type (might be due to invalid IL or missing references) //IL_04e7: Unknown result type (might be due to invalid IL or missing references) //IL_04e9: Unknown result type (might be due to invalid IL or missing references) //IL_0500: Expected I4, but got Unknown //IL_0507: Unknown result type (might be due to invalid IL or missing references) //IL_0567: Unknown result type (might be due to invalid IL or missing references) //IL_05c7: Unknown result type (might be due to invalid IL or missing references) //IL_0623: Unknown result type (might be due to invalid IL or missing references) //IL_0537: Unknown result type (might be due to invalid IL or missing references) //IL_0597: Unknown result type (might be due to invalid IL or missing references) //IL_05f7: Unknown result type (might be due to invalid IL or missing references) //IL_0653: Unknown result type (might be due to invalid IL or missing references) if (listItemPrefab == null || _viewport == null || _content == null) { return; } ((DrivenRectTransformTracker)(ref _poolTracker)).Clear(); _pool.Clear(); if (ListData.Count <= 0) { return; } Rect rect; float num; if (constraint != 0) { rect = _viewport.rect; num = ((Rect)(ref rect)).height; } else { rect = _viewport.rect; num = ((Rect)(ref rect)).width; } float num2 = num; float num3 = requiredCoverageMultiplier * num2; Corner val = startCorner; bool flag = (((int)val == 0 || (int)val == 2) ? true : false); float num4 = (flag ? padding.left : (-padding.right)); val = startCorner; flag = val - 2 <= 1; float num5 = (flag ? (-padding.bottom) : (-padding.top)); int num6 = ((constraint == Constraint.Columns) ? (padding.left + padding.right) : (padding.top + padding.bottom)); float num7 = (num2 - (float)num6) / (float)maxInConstraint - spacing * (float)(maxInConstraint - 1); Vector2 sizeDelta = ((constraint == Constraint.Columns) ? new Vector2(Mathf.Min(preferredItemSize.x, num7), preferredItemSize.y) : new Vector2(preferredItemSize.x, Mathf.Min(preferredItemSize.y, num7))); val = startCorner; flag = (((int)val == 0 || (int)val == 2) ? true : false); float num8 = (flag ? 0f : 1f); val = startCorner; flag = val - 2 <= 1; float num9 = (flag ? 0f : 1f); Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(num8, num9); float num10 = 0f; int num11 = 0; while ((_pool.Size < minPoolSize || num10 < num3) && _pool.Size < ListData.Count) { TRecycleItem component = Object.Instantiate<GameObject>(listItemPrefab, (Transform)(object)_content).GetComponent<TRecycleItem>(); ((Object)((Component)component).gameObject).name = $"RecycleViewListItem {_pool.Size + 1}"; OnInstantiateListItem(component); component.ConstraintIndex = num11; RectTransform rectTransform = component.RectTransform; rectTransform.anchoredPosition = new Vector2(num4, num5); rectTransform.anchorMin = val2; rectTransform.anchorMax = val2; rectTransform.pivot = val2; rectTransform.sizeDelta = sizeDelta; Rect rect2 = component.RectTransform.rect; num11++; switch (constraint) { case Constraint.Columns: { Corner val5 = startCorner; Corner val6 = val5; switch ((int)val6) { case 0: num4 = rectTransform.anchoredPosition.x + ((Rect)(ref rect2)).width + spacing; if (num11 >= maxInConstraint) { num4 = padding.left; num5 = rectTransform.anchoredPosition.y - (((Rect)(ref rect2)).height + spacing); } break; case 1: num4 = rectTransform.anchoredPosition.x - (((Rect)(ref rect2)).width + spacing); if (num11 >= maxInConstraint) { num4 = -padding.right; num5 = rectTransform.anchoredPosition.y - (((Rect)(ref rect2)).height + spacing); } break; case 2: num4 = rectTransform.anchoredPosition.x + ((Rect)(ref rect2)).width + spacing; if (num11 >= maxInConstraint) { num4 = padding.left; num5 = rectTransform.anchoredPosition.y + ((Rect)(ref rect2)).height + spacing; } break; case 3: num4 = rectTransform.anchoredPosition.x - (((Rect)(ref rect2)).width + spacing); if (num11 >= maxInConstraint) { num4 = -padding.right; num5 = rectTransform.anchoredPosition.y + ((Rect)(ref rect2)).height + spacing; } break; default: throw new ArgumentOutOfRangeException(); } if (num11 >= maxInConstraint) { num11 = 0; num10 += ((Rect)(ref rect2)).height + spacing; } break; } case Constraint.Rows: { Corner val3 = startCorner; Corner val4 = val3; switch ((int)val4) { case 0: num5 = rectTransform.anchoredPosition.y - (((Rect)(ref rect2)).height + spacing); if (num11 >= maxInConstraint) { num4 = rectTransform.anchoredPosition.x + ((Rect)(ref rect2)).width + spacing; num5 = -padding.top; } break; case 1: num5 = rectTransform.anchoredPosition.y - (((Rect)(ref rect2)).height + spacing); if (num11 >= maxInConstraint) { num4 = rectTransform.anchoredPosition.x - (((Rect)(ref rect2)).width + spacing); num5 = -padding.top; } break; case 2: num5 = rectTransform.anchoredPosition.y + ((Rect)(ref rect2)).height + spacing; if (num11 >= maxInConstraint) { num4 = rectTransform.anchoredPosition.x + ((Rect)(ref rect2)).width + spacing; num5 = padding.bottom; } break; case 3: num5 = rectTransform.anchoredPosition.y + ((Rect)(ref rect2)).height + spacing; if (num11 >= maxInConstraint) { num4 = rectTransform.anchoredPosition.x - (((Rect)(ref rect2)).width + spacing); num5 = padding.bottom; } break; default: throw new ArgumentOutOfRangeException(); } if (num11 >= maxInConstraint) { num11 = 0; num10 += ((Rect)(ref rect2)).width + spacing; } break; } default: throw new ArgumentOutOfRangeException(); } ((DrivenRectTransformTracker)(ref _poolTracker)).Add((Object)(object)this, rectTransform, (DrivenTransformProperties)65286); component.BindData(ListData[_pool.Size]); _pool.Add(component); } } protected abstract void OnInstantiateListItem(TRecycleItem instance); private void RefreshView() { int num = _pool.FirstIndex; foreach (TRecycleItem item in _pool) { item.BindData(ListData[num]); num++; } } private void HandleScroll(Vector2 _) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) if (_content != null) { Vector2 dir = _content.anchoredPosition - _prevAnchoredPos; RecycleOnScroll(dir); _prevAnchoredPos = _content.anchoredPosition; } } private void RecycleOnScroll(Vector2 dir) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_020f: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_021c: 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_00d1: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Invalid comparison between Unknown and I4 //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Invalid comparison between Unknown and I4 //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017d: 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_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Invalid comparison between Unknown and I4 //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Invalid comparison between Unknown and I4 //IL_0185: Unknown result type (might be due to invalid
LethalEmotesApi/LethalEmotesAPI.dll
Decompiled 2 weeks 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.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Threading; using AdvancedCompany.Game; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using BetterEmote.AssetScripts; using BetterEmote.Patches; using BetterEmote.Utils; using EmotesAPI; using GameNetcodeStuff; using HarmonyLib; using JetBrains.Annotations; using LethalCompanyInputUtils.Api; using LethalEmotesAPI; using LethalEmotesAPI.Core; using LethalEmotesAPI.Data; using LethalEmotesAPI.ImportV2; using LethalEmotesAPI.NetcodePatcher; using LethalEmotesAPI.Patches; using LethalEmotesAPI.Patches.ModCompat; using LethalEmotesAPI.Utils; using LethalEmotesApi.Ui; using LethalEmotesApi.Ui.Data; using LethalEmotesApi.Ui.Db; using LethalEmotesApi.Ui.Dmca; using LethalInternship.Core.Interns.AI; using LethalVRM; using Microsoft.CodeAnalysis; using ModelReplacement; using MonoMod.RuntimeDetour; using MoreCompany.Cosmetics; using Newtonsoft.Json; using TMPro; using TooManyEmotes; using Unity.Netcode; using UnityEngine; using UnityEngine.Animations; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.InputSystem.Utilities; using UnityEngine.Rendering; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("BetterEmotes")] [assembly: IgnoresAccessChecksTo("LethalInternship.Core")] [assembly: IgnoresAccessChecksTo("LethalInternship")] [assembly: IgnoresAccessChecksTo("LethalInternship.Patches")] [assembly: IgnoresAccessChecksTo("LethalInternship.SharedAbstractions")] [assembly: IgnoresAccessChecksTo("LethalVRM")] [assembly: IgnoresAccessChecksTo("MToon")] [assembly: IgnoresAccessChecksTo("UniGLTF")] [assembly: IgnoresAccessChecksTo("UniGLTF.Utils")] [assembly: IgnoresAccessChecksTo("UniHumanoid")] [assembly: IgnoresAccessChecksTo("VRM10")] [assembly: IgnoresAccessChecksTo("VrmLib")] [assembly: IgnoresAccessChecksTo("VRMShaders.GLTF.IO.Runtime")] [assembly: IgnoresAccessChecksTo("VRMShaders.VRM.IO.Runtime")] [assembly: IgnoresAccessChecksTo("VRMShaders.VRM10.Format.Runtime")] [assembly: IgnoresAccessChecksTo("VRMShaders.VRM10.MToon10.Runtime")] [assembly: AssemblyCompany("LethalEmotesAPI")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+2892fc8cd03ed2d1549afad23392d18df3e893a0")] [assembly: AssemblyProduct("LethalEmotesAPI")] [assembly: AssemblyTitle("LethalEmotesAPI")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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; } } } internal static class AnimationReplacements { internal static GameObject g; internal static bool setup; internal static void RunAll() { ChangeAnims(); } internal static BoneMapper Import(GameObject prefab, string skeleton, int[] pos, bool hidemesh = true) { GameObject val = Object.Instantiate<GameObject>(Assets.Load<GameObject>("@CustomEmotesAPI_customemotespackage:assets/animationreplacements/commando.prefab")); GameObject val2 = Object.Instantiate<GameObject>(Assets.Load<GameObject>(skeleton)); val2.GetComponent<Animator>().runtimeAnimatorController = val.GetComponent<Animator>().runtimeAnimatorController; BoneMapper result = ApplyAnimationStuff(prefab, val2, pos, hidemesh, jank: false, revertBonePositions: true); val.transform.SetParent(val2.transform); return result; } public static void DebugBones(GameObject fab) { SkinnedMeshRenderer[] componentsInChildren = fab.GetComponentsInChildren<SkinnedMeshRenderer>(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append($"rendererererer: {componentsInChildren[0]}\n"); stringBuilder.Append($"bone count: {componentsInChildren[0].bones.Length}\n"); stringBuilder.Append($"mesh count: {componentsInChildren.Length}\n"); stringBuilder.Append("root bone: " + ((Object)componentsInChildren[0].rootBone).name + "\n"); stringBuilder.Append(((object)fab).ToString() + ":\n"); SkinnedMeshRenderer[] array = componentsInChildren; foreach (SkinnedMeshRenderer val in array) { if (val.bones.Length == 0) { stringBuilder.Append("No bones"); } else { stringBuilder.Append("["); Transform[] bones = val.bones; foreach (Transform val2 in bones) { stringBuilder.Append("'" + ((Object)val2).name + "', "); } stringBuilder.Remove(stringBuilder.Length - 2, 2); stringBuilder.Append("]"); } stringBuilder.Append("\n\n"); DebugClass.Log(stringBuilder.ToString()); } } internal static void ChangeAnims() { } internal static void ApplyAnimationStuff(GameObject bodyPrefab, string resource, int[] pos) { GameObject animcontroller = Assets.Load<GameObject>(resource); ApplyAnimationStuff(bodyPrefab, animcontroller, pos); } internal static BoneMapper ApplyAnimationStuff(GameObject bodyPrefab, GameObject animcontroller, int[] pos, bool hidemeshes = true, bool jank = false, bool revertBonePositions = false) { //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: 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_020d: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) try { if (!animcontroller.GetComponentInChildren<Animator>().avatar.isHuman) { DebugClass.Log($"{animcontroller}'s avatar isn't humanoid, please fix it in unity!"); return null; } } catch (Exception arg) { DebugClass.Log($"Had issue checking if avatar was humanoid: {arg}"); throw; } try { if (hidemeshes) { SkinnedMeshRenderer[] componentsInChildren = animcontroller.GetComponentsInChildren<SkinnedMeshRenderer>(); foreach (SkinnedMeshRenderer val in componentsInChildren) { val.sharedMesh = null; } MeshFilter[] componentsInChildren2 = animcontroller.GetComponentsInChildren<MeshFilter>(); foreach (MeshFilter val2 in componentsInChildren2) { val2.sharedMesh = null; } } } catch (Exception arg2) { DebugClass.Log($"Had trouble while hiding meshes: {arg2}"); throw; } Transform transform = ((Component)bodyPrefab.GetComponentInChildren<Animator>()).transform; SkinnedMeshRenderer[] array = (SkinnedMeshRenderer[])(object)new SkinnedMeshRenderer[pos.Length]; SkinnedMeshRenderer emoteSkeletonSMR; try { emoteSkeletonSMR = animcontroller.GetComponentsInChildren<SkinnedMeshRenderer>()[0]; } catch (Exception arg3) { DebugClass.Log($"Had trouble setting emote skeletons SkinnedMeshRenderer: {arg3}"); throw; } try { for (int k = 0; k < pos.Length; k++) { array[k] = bodyPrefab.GetComponentsInChildren<SkinnedMeshRenderer>()[pos[k]]; } } catch (Exception arg4) { DebugClass.Log($"Had trouble setting the original skeleton's skinned mesh renderer: {arg4}"); throw; } BoneMapper boneMapper = animcontroller.AddComponent<BoneMapper>(); try { boneMapper.jank = jank; boneMapper.emoteSkeletonSMR = emoteSkeletonSMR; boneMapper.basePlayerModelSMR = array; boneMapper.bodyPrefab = bodyPrefab; boneMapper.basePlayerModelAnimator = ((Component)transform).GetComponentInChildren<Animator>(); boneMapper.emoteSkeletonAnimator = animcontroller.GetComponentInChildren<Animator>(); } catch (Exception arg5) { DebugClass.Log($"Had issue when setting up BoneMapper settings 1: {arg5}"); throw; } try { GameObject val3 = Assets.Load<GameObject>("assets/customstuff/scavEmoteSkeleton.prefab"); val3.transform.localScale = new Vector3(1.1216f, 1.1216f, 1.1216f); float num = Vector3.Distance(val3.GetComponentInChildren<Animator>().GetBoneTransform((HumanBodyBones)10).position, val3.GetComponentInChildren<Animator>().GetBoneTransform((HumanBodyBones)5).position); float num2 = Vector3.Distance(animcontroller.GetComponentInChildren<Animator>().GetBoneTransform((HumanBodyBones)10).position, animcontroller.GetComponentInChildren<Animator>().GetBoneTransform((HumanBodyBones)5).position); boneMapper.scale = num2 / num; boneMapper.model = ((Component)transform).gameObject; } catch (Exception arg6) { DebugClass.Log($"Had issue when setting up BoneMapper settings 2: {arg6}"); throw; } try { animcontroller.transform.parent = transform; animcontroller.transform.localPosition = Vector3.zero; animcontroller.transform.eulerAngles = bodyPrefab.transform.eulerAngles; animcontroller.transform.localScale = Vector3.one; } catch (Exception arg7) { DebugClass.Log($"Had trouble setting emote skeletons parent: {arg7}"); throw; } boneMapper.revertTransform = revertBonePositions; return boneMapper; } } public struct WorldProp { internal GameObject prop; internal JoinSpot[] joinSpots; public WorldProp(GameObject _prop, JoinSpot[] _joinSpots) { prop = _prop; joinSpots = _joinSpots; } } public enum TempThirdPerson { none, on, off } public class BoneMapper : MonoBehaviour { [CompilerGenerated] private sealed class <ActivateCameraConstraintsAfterFrame>d__135 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public bool onlyY; public BoneMapper <>4__this; private List<EmoteConstraint>.Enumerator <>s__1; private EmoteConstraint <item>5__2; private List<EmoteConstraint>.Enumerator <>s__3; private EmoteConstraint <item>5__4; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ActivateCameraConstraintsAfterFrame>d__135(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__1 = default(List<EmoteConstraint>.Enumerator); <item>5__2 = null; <>s__3 = default(List<EmoteConstraint>.Enumerator); <item>5__4 = null; <>1__state = -2; } private bool MoveNext() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 1; return true; case 1: <>1__state = -1; <>s__1 = <>4__this.cameraConstraints.GetEnumerator(); try { while (<>s__1.MoveNext()) { <item>5__2 = <>s__1.Current; ((Behaviour)<item>5__2).enabled = true; <item>5__2.ActivateConstraints(); if (onlyY && (Object)(object)<item>5__2 != (Object)(object)<>4__this.cameraConstraints[<>4__this.cameraConstraints.Count - 1]) { <item>5__2.onlyY = true; } <item>5__2 = null; } } finally { ((IDisposable)<>s__1).Dispose(); } <>s__1 = default(List<EmoteConstraint>.Enumerator); <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 2; return true; case 2: <>1__state = -1; <>s__3 = <>4__this.cameraConstraints.GetEnumerator(); try { while (<>s__3.MoveNext()) { <item>5__4 = <>s__3.Current; if (!((Behaviour)<item>5__4).enabled) { ((Behaviour)<item>5__4).enabled = true; <item>5__4.ActivateConstraints(); if (onlyY && (Object)(object)<item>5__4 != (Object)(object)<>4__this.cameraConstraints[<>4__this.cameraConstraints.Count - 1]) { <item>5__4.onlyY = true; } } <item>5__4 = null; } } finally { ((IDisposable)<>s__3).Dispose(); } <>s__3 = default(List<EmoteConstraint>.Enumerator); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <GetLocal>d__104 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public BoneMapper <>4__this; private EmoteConstraint <e>5__1; private Camera <c>5__2; private List<EmoteConstraint>.Enumerator <>s__3; private EmoteConstraint <item>5__4; private GameObject <cameraRotationObjectLmao>5__5; private GameObject <camHolder>5__6; private Exception <e>5__7; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <GetLocal>d__104(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <e>5__1 = null; <c>5__2 = null; <>s__3 = default(List<EmoteConstraint>.Enumerator); <item>5__4 = null; <cameraRotationObjectLmao>5__5 = null; <camHolder>5__6 = null; <e>5__7 = null; <>1__state = -2; } private bool MoveNext() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Expected O, but got Unknown //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Expected O, but got Unknown //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Expected O, but got Unknown //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_0380: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Expected O, but got Unknown //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03ec: Unknown result type (might be due to invalid IL or missing references) //IL_0473: Unknown result type (might be due to invalid IL or missing references) //IL_047d: Expected O, but got Unknown //IL_04bf: Unknown result type (might be due to invalid IL or missing references) //IL_04e5: Unknown result type (might be due to invalid IL or missing references) //IL_04fc: Unknown result type (might be due to invalid IL or missing references) //IL_0510: Unknown result type (might be due to invalid IL or missing references) //IL_0515: Unknown result type (might be due to invalid IL or missing references) //IL_05ae: Unknown result type (might be due to invalid IL or missing references) //IL_05b8: Expected O, but got Unknown //IL_05ee: Unknown result type (might be due to invalid IL or missing references) //IL_0613: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 1; return true; case 1: <>1__state = -1; try { if (!Object.op_Implicit((Object)(object)CustomEmotesAPI.localMapper) && (Object)(object)<>4__this.playerController == (Object)(object)StartOfRound.Instance.localPlayerController) { CustomEmotesAPI.localMapper = <>4__this; <>4__this.local = true; <>4__this.originalCosmeticPosition = new GameObject(); <>4__this.originalCosmeticPosition.transform.parent = <>4__this.playerController.headCostumeContainerLocal.parent; <>4__this.originalCosmeticPosition.transform.position = <>4__this.playerController.headCostumeContainerLocal.position; <>4__this.originalCosmeticPosition.transform.localEulerAngles = <>4__this.playerController.headCostumeContainerLocal.localEulerAngles; <e>5__1 = ((Component)<>4__this.playerController.headCostumeContainerLocal).gameObject.AddComponent<EmoteConstraint>(); <e>5__1.AddSource(<>4__this.playerController.headCostumeContainerLocal, <>4__this.emoteSkeletonAnimator.GetBoneTransform((HumanBodyBones)10)); <>4__this.cosmeticConstraints.Add(<e>5__1); <>s__3 = <>4__this.cosmeticConstraints.GetEnumerator(); try { while (<>s__3.MoveNext()) { <item>5__4 = <>s__3.Current; <item>5__4.emoteBone = <>4__this.originalCosmeticPosition.transform; <item>5__4 = null; } } finally { ((IDisposable)<>s__3).Dispose(); } <>s__3 = default(List<EmoteConstraint>.Enumerator); ((Component)<>4__this).gameObject.AddComponent<NearestEmoterChecker>().self = <>4__this; <>4__this.isServer = ((NetworkBehaviour)<>4__this.playerController).IsServer && ((NetworkBehaviour)<>4__this.playerController).IsOwner; HealthbarAnimator.Setup(<>4__this); <>4__this.FixLocalArms(); <c>5__2 = <>4__this.playerController.gameplayCamera; if (<c>5__2 != null) { <>4__this.rotationPoint = new GameObject(); <>4__this.rotationPoint.transform.SetParent(((Component)<c>5__2).transform.parent.parent.parent.parent); <>4__this.rotationPoint.transform.localPosition = new Vector3(0f, 0.8f, 0f); <>4__this.rotationPoint.transform.localEulerAngles = Vector3.zero; <>4__this.desiredCameraPos = new GameObject(); <>4__this.desiredCameraPos.transform.SetParent(<>4__this.rotationPoint.transform); <>4__this.desiredCameraPos.transform.localPosition = new Vector3(0.3f, 1f, -3f); <>4__this.desiredCameraPos.transform.localEulerAngles = Vector3.zero; <>4__this.realCameraPos = new GameObject(); <>4__this.realCameraPos.transform.SetParent(<>4__this.desiredCameraPos.transform); <>4__this.realCameraPos.transform.localPosition = Vector3.zero; <>4__this.realCameraPos.transform.localEulerAngles = Vector3.zero; <>4__this.thirdPersonConstraint = EmoteConstraint.AddConstraint(((Component)((Component)<c>5__2).transform.parent).gameObject, <>4__this, <>4__this.realCameraPos.transform, needToFix: false); <>4__this.thirdPersonConstraint.debug = true; if (((Object)<>4__this.basePlayerModelSMR[0].bones[32]).name == "spine.004") { <camHolder>5__6 = new GameObject(); ((Object)<camHolder>5__6).name = "EmotesAPICameraHolderThing"; <camHolder>5__6.transform.parent = <>4__this.basePlayerModelSMR[0].bones[32]; <camHolder>5__6.transform.localEulerAngles = Vector3.zero; <camHolder>5__6.transform.position = ((Component)<c>5__2).transform.parent.position; Transform transform = <camHolder>5__6.transform; transform.localPosition += new Vector3(0f, 0.045f, 0f); <>4__this.cameraConstraints.Add(EmoteConstraint.AddConstraint(((Component)((Component)<c>5__2).transform.parent).gameObject, <>4__this, <camHolder>5__6.transform, needToFix: false)); <camHolder>5__6 = null; } else { <>4__this.cameraConstraints.Add(EmoteConstraint.AddConstraint(((Component)((Component)<c>5__2).transform.parent).gameObject, <>4__this, <>4__this.emoteSkeletonAnimator.GetBoneTransform((HumanBodyBones)10), needToFix: false)); } <cameraRotationObjectLmao>5__5 = new GameObject(); <cameraRotationObjectLmao>5__5.transform.SetParent(((Component)<c>5__2).transform); <cameraRotationObjectLmao>5__5.transform.localPosition = new Vector3(0.01f, -0.048f, -0.053f); <cameraRotationObjectLmao>5__5.transform.localEulerAngles = new Vector3(270f, 0f, 0f); <>4__this.cameraConstraints.Add(EmoteConstraint.AddConstraint(((Component)StartOfRound.Instance.localPlayerController.localVisor).gameObject, <>4__this, <cameraRotationObjectLmao>5__5.transform, needToFix: false)); <cameraRotationObjectLmao>5__5 = null; } <e>5__1 = null; <c>5__2 = null; } } catch (Exception ex) { <e>5__7 = ex; DebugClass.Log(<e>5__7); } if (!Object.op_Implicit((Object)(object)CustomEmotesAPI.localMapper)) { ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.GetLocal()); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <SetupHandConstraint>d__91 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public BoneMapper <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SetupHandConstraint>d__91(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } if (!Object.op_Implicit((Object)(object)CustomEmotesAPI.localMapper)) { <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 1; return true; } <>4__this.itemHolderPosition = ((Component)<>4__this).GetComponentInChildren<Animator>().GetBoneTransform((HumanBodyBones)18).Find("ServerItemHolder"); <>4__this.itemHolderConstraints.Add(EmoteConstraint.AddConstraint(((Component)<>4__this.playerController.serverItemHolder).gameObject, <>4__this, <>4__this.itemHolderPosition, needToFix: true)); <>4__this.itemHolderConstraints.Add(EmoteConstraint.AddConstraint(((Component)<>4__this.playerController.localItemHolder).gameObject, <>4__this, <>4__this.itemHolderPosition, needToFix: true)); ((Component)<>4__this.itemHolderPosition).gameObject.AddComponent<EmoteConstraint>(); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <lockBonesAfterAFrame>d__80 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public BoneMapper <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <lockBonesAfterAFrame>d__80(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.LockBones(); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <preventEmotesInSpawnAnimation>d__89 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public BoneMapper <>4__this; private List<EmoteConstraint>.Enumerator <>s__1; private EmoteConstraint <item>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <preventEmotesInSpawnAnimation>d__89(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__1 = default(List<EmoteConstraint>.Enumerator); <item>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(3f); <>1__state = 1; return true; case 1: <>1__state = -1; <>s__1 = <>4__this.cosmeticConstraints.GetEnumerator(); try { while (<>s__1.MoveNext()) { <item>5__2 = <>s__1.Current; <item>5__2.ActivateConstraints(); <item>5__2 = null; } } finally { ((IDisposable)<>s__1).Dispose(); } <>s__1 = default(List<EmoteConstraint>.Enumerator); <>4__this.canEmote = true; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <waitForTwoFramesThenDisableA1>d__128 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public BoneMapper <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <waitForTwoFramesThenDisableA1>d__128(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 1; return true; case 1: <>1__state = -1; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static List<AudioClip[]> primaryAudioClips = new List<AudioClip[]>(); public static List<AudioClip[]> secondaryAudioClips = new List<AudioClip[]>(); public static List<AudioClip[]> primaryDMCAFreeAudioClips = new List<AudioClip[]>(); public static List<AudioClip[]> secondaryDMCAFreeAudioClips = new List<AudioClip[]>(); public GameObject audioObject; public SkinnedMeshRenderer emoteSkeletonSMR; public SkinnedMeshRenderer[] basePlayerModelSMR; public Animator basePlayerModelAnimator; public Animator emoteSkeletonAnimator; public int h; public List<BonePair> pairs = new List<BonePair>(); public float timer = 0f; public GameObject model; private bool twopart = false; public static Dictionary<string, CustomAnimationClip> animClips = new Dictionary<string, CustomAnimationClip>(); public CustomAnimationClip currentClip = null; public string currentClipName = "none"; public string prevClipName = "none"; public CustomAnimationClip prevClip = null; internal static float Current_MSX = 69f; internal static List<BoneMapper> allMappers = new List<BoneMapper>(); internal static List<WorldProp> allWorldProps = new List<WorldProp>(); public bool local = false; internal static bool moving = false; internal static bool attacking = false; public bool jank = false; public List<GameObject> props = new List<GameObject>(); public float scale = 1f; internal int desiredEvent = 0; public int currEvent = 0; public float autoWalkSpeed = 0f; public bool overrideMoveSpeed = false; public bool autoWalk = false; public GameObject currentEmoteSpot = null; public GameObject reservedEmoteSpot = null; public bool worldProp = false; public bool ragdolling = false; public GameObject bodyPrefab; public int uniqueSpot = -1; public bool preserveProps = false; public bool preserveParent = false; internal bool useSafePositionReset = false; public List<EmoteLocation> emoteLocations = new List<EmoteLocation>(); private List<string> dontAnimateUs = new List<string>(); public bool enableAnimatorOnDeath = true; public bool revertTransform = false; public bool oneFrameAnimatorLeeWay = false; public GameObject mapperBody; public PlayerControllerB playerController; public EnemyAI enemyController; public Transform mapperBodyTransform; public static bool firstMapperSpawn = true; public static List<List<AudioSource>> listOfCurrentEmoteAudio = new List<List<AudioSource>>(); public List<EmoteConstraint> cameraConstraints = new List<EmoteConstraint>(); public List<EmoteConstraint> itemHolderConstraints = new List<EmoteConstraint>(); public Transform itemHolderPosition; public List<EmoteConstraint> additionalConstraints = new List<EmoteConstraint>(); public EmoteConstraint thirdPersonConstraint; public static Dictionary<string, string> customNamePairs = new Dictionary<string, string>(); public Vector3 positionBeforeRootMotion = new Vector3(69f, 69f, 69f); public Quaternion rotationBeforeRootMotion = Quaternion.identity; public float currentAudioLevel = 0f; public TempThirdPerson temporarilyThirdPerson = TempThirdPerson.none; internal int originalCullingMask; internal bool needToTurnOffRenderingThing = false; public BoneMapper currentlyLockedBoneMapper; public static Dictionary<GameObject, BoneMapper> playersToMappers = new Dictionary<GameObject, BoneMapper>(); public AudioSource personalAudioSource; public InteractTrigger personalTrigger; public string currentJoinButton; public bool isServer = false; public int networkId; public bool joined = false; public bool canThirdPerson = true; internal bool canEmote = false; public bool isValidPlayer = false; internal bool canStop = true; internal List<EmoteConstraint> cosmeticConstraints = new List<EmoteConstraint>(); internal GameObject originalCosmeticPosition; public GameObject parentGameObject; public bool positionLock; public bool rotationLock; public bool scaleLock; private Vector3 ogScale = new Vector3(-69f, -69f, -69f); private Vector3 ogVisorScale = Vector3.zeroVector; private Vector3 scaleDiff = Vector3.one; public GameObject rotationPoint; public GameObject desiredCameraPos; public GameObject realCameraPos; private bool ranSinceLastAnim = false; public Vector3 deltaPos = new Vector3(0f, 0f, 0f); public Quaternion deltaRot = Quaternion.identity; public Vector3 prevPosition = Vector3.zero; public Quaternion prevRotation = Quaternion.identity; public Vector3 prevMapperPos = new Vector3(69f, 69f, 69f); public Vector3 prevMapperRot = default(Vector3); public bool justSwitched = false; public bool isEnemy = false; public bool isInThirdPerson = false; public int originalLayer = -1; internal bool needToTurnOffShadows = true; internal bool needToTurnOffCosmetics = true; private Renderer helmetRenderer = null; public static string GetRealAnimationName(string animationName) { if (customNamePairs.ContainsKey(animationName)) { return customNamePairs[animationName]; } return animationName; } [IteratorStateMachine(typeof(<lockBonesAfterAFrame>d__80))] private IEnumerator lockBonesAfterAFrame() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <lockBonesAfterAFrame>d__80(0) { <>4__this = this }; } public void PlayAnim(string s, int pos, int eventNum) { desiredEvent = eventNum; s = GetRealAnimationName(s); PlayAnim(s, pos); } public void PlayAnim(string s, int pos) { //IL_058d: Unknown result type (might be due to invalid IL or missing references) //IL_0593: Expected O, but got Unknown ranSinceLastAnim = false; s = GetRealAnimationName(s); prevClipName = currentClipName; if (s != "none") { if (!animClips.ContainsKey(s)) { DebugClass.Log("No emote bound to the name [" + s + "]"); return; } if (animClips[s] == null || !animClips[s].animates) { CustomEmotesAPI.Changed(s, this); return; } } ((Behaviour)emoteSkeletonAnimator).enabled = true; dontAnimateUs.Clear(); if (currentClip != null) { try { if (currentClip.syncronizeAnimation || currentClip.syncronizeAudio) { CustomAnimationClip.syncPlayerCount[currentClip.syncPos]--; } audioObject.GetComponent<AudioManager>().Stop(); } catch (Exception arg) { DebugClass.Log($"had issue turning off audio before new audio played step 1: {arg}"); } try { if ((Object)(object)primaryAudioClips[currentClip.syncPos][currEvent] != (Object)null && currentClip.syncronizeAudio) { try { listOfCurrentEmoteAudio[currentClip.syncPos].Remove(audioObject.GetComponent<AudioSource>()); } catch (Exception arg2) { DebugClass.Log($"had issue turning off audio before new audio played step 2: {arg2}"); try { DebugClass.Log($"{prevClip.syncPos}"); DebugClass.Log($"{currentClip.syncPos}"); DebugClass.Log(listOfCurrentEmoteAudio[currentClip.syncPos]); } catch (Exception) { } try { DebugClass.Log("going to try a brute force method to avoid audio desync issues"); foreach (List<AudioSource> item in listOfCurrentEmoteAudio) { if (item.Contains(audioObject.GetComponent<AudioSource>())) { item.Remove(audioObject.GetComponent<AudioSource>()); } } } catch (Exception arg3) { DebugClass.Log($"wow {arg3}"); } } } } catch (Exception ex2) { DebugClass.Log($"had issue turning off audio before new audio played step 3: {primaryAudioClips[currentClip.syncPos]} {currentClip.syncPos} {currEvent} {ex2}"); } try { if (uniqueSpot != -1 && CustomAnimationClip.uniqueAnimations[currentClip.syncPos][uniqueSpot]) { CustomAnimationClip.uniqueAnimations[currentClip.syncPos][uniqueSpot] = false; uniqueSpot = -1; } } catch (Exception arg4) { DebugClass.Log($"had issue turning off audio before new audio played step 4: {arg4}"); } } currEvent = 0; currentClipName = s; if (s == "none") { UnlockBones(); emoteSkeletonAnimator.Play("none", -1, 0f); twopart = false; prevClip = currentClip; currentClip = null; NewAnimation(null); CustomEmotesAPI.Changed(s, this); } else { if (BlacklistSettings.emotesDisabled.Contains(s)) { return; } if (s != "none") { prevClip = currentClip; currentClip = animClips[s]; if (currentClip == null) { return; } if (pos == -2) { pos = ((CustomAnimationClip.syncPlayerCount[animClips[s].syncPos] != 0) ? animClips[s].joinPref : animClips[s].startPref); } if (pos == -2) { for (int i = 0; i < CustomAnimationClip.uniqueAnimations[currentClip.syncPos].Count; i++) { if (!CustomAnimationClip.uniqueAnimations[currentClip.syncPos][i]) { pos = i; uniqueSpot = pos; CustomAnimationClip.uniqueAnimations[currentClip.syncPos][uniqueSpot] = true; break; } } if (uniqueSpot == -1) { pos = -1; } } if (pos == -1) { pos = Random.Range(0, currentClip.clip.Length); } ((MonoBehaviour)this).StartCoroutine(lockBonesAfterAFrame()); } AnimatorOverrideController animController = new AnimatorOverrideController(emoteSkeletonAnimator.runtimeAnimatorController); if (currentClip.syncronizeAnimation || currentClip.syncronizeAudio) { CustomAnimationClip.syncPlayerCount[currentClip.syncPos]++; if (CustomAnimationClip.syncPlayerCount[currentClip.syncPos] == 1) { CustomAnimationClip.syncTimer[currentClip.syncPos] = 0f; } } if ((Object)(object)primaryAudioClips[currentClip.syncPos][currEvent] != (Object)null) { if (CustomAnimationClip.syncPlayerCount[currentClip.syncPos] == 1 && currentClip.syncronizeAudio) { if (desiredEvent != -1) { currEvent = desiredEvent; } else { currEvent = Random.Range(0, primaryAudioClips[currentClip.syncPos].Length); } foreach (BoneMapper allMapper in allMappers) { allMapper.currEvent = currEvent; } if (currentClip.customPostEventCodeSync != null) { currentClip.customPostEventCodeSync(this); } } else if (!currentClip.syncronizeAudio) { currEvent = Random.Range(0, primaryAudioClips[currentClip.syncPos].Length); if (currentClip.customPostEventCodeNoSync != null) { currentClip.customPostEventCodeNoSync(this); } } currentAudioLevel = currentClip.audioLevel; audioObject.GetComponent<AudioManager>().Play(currentClip.syncPos, currEvent, currentClip.looping, currentClip.syncronizeAudio, currentClip.willGetClaimed); if (currentClip.syncronizeAudio && (Object)(object)primaryAudioClips[currentClip.syncPos][currEvent] != (Object)null) { listOfCurrentEmoteAudio[currentClip.syncPos].Add(audioObject.GetComponent<AudioSource>()); } } SetAnimationSpeed(1f); StartAnimations(animController, pos, emoteSkeletonAnimator); if (local && CustomEmotesAPI.hudObject != null) { if (currentClip.displayName != "") { ((TMP_Text)CustomEmotesAPI.currentEmoteText).text = currentClip.displayName; } else if (currentClip.customInternalName != "") { ((TMP_Text)CustomEmotesAPI.currentEmoteText).text = currentClip.customInternalName; } else if (!currentClip.visibility) { ((TMP_Text)CustomEmotesAPI.currentEmoteText).text = ""; } else { ((TMP_Text)CustomEmotesAPI.currentEmoteText).text = currentClipName; } } twopart = false; NewAnimation(currentClip.joinSpots); if (currentClip.usesNewImportSystem) { CustomEmotesAPI.Changed(currentClip.customInternalName, this); } else { CustomEmotesAPI.Changed(s, this); } } } public void StartAnimations(AnimatorOverrideController animController, int pos, Animator animator) { if (currentClip.secondaryClip != null && currentClip.secondaryClip.Length != 0) { bool flag = true; if (CustomAnimationClip.syncTimer[currentClip.syncPos] > currentClip.clip[pos].length) { animController["Floss"] = currentClip.secondaryClip[pos]; animator.runtimeAnimatorController = (RuntimeAnimatorController)(object)animController; float num = (currentClip.syncronizeAnimation ? ((CustomAnimationClip.syncTimer[currentClip.syncPos] - currentClip.clip[pos].length) % currentClip.secondaryClip[pos].length / currentClip.secondaryClip[pos].length) : 0f); animator.Play("Loop", -1, num); } else { animController["Dab"] = currentClip.clip[pos]; animController["nobones"] = currentClip.secondaryClip[pos]; animator.runtimeAnimatorController = (RuntimeAnimatorController)(object)animController; float num2 = (currentClip.syncronizeAnimation ? (CustomAnimationClip.syncTimer[currentClip.syncPos] % currentClip.clip[pos].length / currentClip.clip[pos].length) : 0f); animator.Play("PoopToLoop", -1, num2); } } else if (((Motion)currentClip.clip[0]).isLooping) { animController["Floss"] = currentClip.clip[pos]; animator.runtimeAnimatorController = (RuntimeAnimatorController)(object)animController; if (currentClip.clip[pos].length != 0f) { float num3 = (currentClip.syncronizeAnimation ? (CustomAnimationClip.syncTimer[currentClip.syncPos] % currentClip.clip[pos].length / currentClip.clip[pos].length) : 0f); animator.Play("Loop", -1, num3); } else { animator.Play("Loop", -1, 0f); } } else { animController["Default Dance"] = currentClip.clip[pos]; animator.runtimeAnimatorController = (RuntimeAnimatorController)(object)animController; float num4 = (currentClip.syncronizeAnimation ? (CustomAnimationClip.syncTimer[currentClip.syncPos] % currentClip.clip[pos].length / currentClip.clip[pos].length) : 0f); animator.Play("Poop", -1, num4); } } public static void PreviewAnimations(Animator animator, string animation) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown AnimatorOverrideController val = new AnimatorOverrideController(animator.runtimeAnimatorController); animation = GetRealAnimationName(animation); if (!animClips.ContainsKey(animation)) { return; } CustomAnimationClip customAnimationClip = animClips[animation]; if (customAnimationClip != null && customAnimationClip.clip != null && customAnimationClip.clip[0] != null) { int num = 0; if (customAnimationClip.secondaryClip != null && customAnimationClip.secondaryClip.Length != 0) { val["Dab"] = customAnimationClip.clip[num]; val["nobones"] = customAnimationClip.secondaryClip[num]; animator.runtimeAnimatorController = (RuntimeAnimatorController)(object)val; animator.Play("PoopToLoop", -1, 0f); } else if (((Motion)customAnimationClip.clip[0]).isLooping) { val["Floss"] = customAnimationClip.clip[num]; animator.runtimeAnimatorController = (RuntimeAnimatorController)(object)val; animator.Play("Loop", -1, 0f); } else { val["Default Dance"] = customAnimationClip.clip[num]; animator.runtimeAnimatorController = (RuntimeAnimatorController)(object)val; animator.Play("Poop", -1, 0f); } } } public void SetAnimationSpeed(float speed) { emoteSkeletonAnimator.speed = speed; } internal void NewAnimation(JoinSpot[] locations) { //IL_00e4: 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_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) try { try { if (local) { ((Component)itemHolderPosition).gameObject.GetComponent<EmoteConstraint>().DeactivateConstraints(); } } catch (Exception) { } try { emoteLocations.Clear(); autoWalkSpeed = 0f; autoWalk = false; overrideMoveSpeed = false; if (Object.op_Implicit((Object)(object)parentGameObject) && !preserveParent) { parentGameObject = null; } } catch (Exception) { } try { useSafePositionReset = currentClip.useSafePositionReset; } catch (Exception) { useSafePositionReset = true; } try { if (preserveParent) { preserveParent = false; } else { mapperBody.gameObject.transform.localEulerAngles = new Vector3(0f, mapperBody.gameObject.transform.localEulerAngles.y, 0f); if (ogScale != new Vector3(-69f, -69f, -69f)) { mapperBody.transform.localScale = ogScale; if (local) { playerController.localVisor.localScale = ogVisorScale; } ogScale = new Vector3(-69f, -69f, -69f); if (CustomEmotesAPI.ModelReplacementAPIPresent) { ModelReplacementAPICompat.ScaleModelAsMapper(Vector3.one, Vector3.one, playerController); } if (CustomEmotesAPI.VRMPresent) { VRMCompat.ScaleModelAsMapper(Vector3.one, Vector3.one, playerController); } } Collider[] componentsInChildren = mapperBody.GetComponentsInChildren<Collider>(); foreach (Collider val in componentsInChildren) { val.enabled = true; } if (Object.op_Implicit((Object)(object)mapperBody.GetComponent<CharacterController>())) { ((Collider)mapperBody.GetComponent<CharacterController>()).enabled = true; } } } catch (Exception) { } if (preserveProps) { preserveProps = false; } else { foreach (GameObject prop in props) { if (Object.op_Implicit((Object)(object)prop)) { Object.Destroy((Object)(object)prop); } } props.Clear(); } if (locations != null) { for (int j = 0; j < locations.Length; j++) { SpawnJoinSpot(locations[j]); } } } catch (Exception arg) { DebugClass.Log($"error during new animation: {arg}"); } } public void ScaleProps() { //IL_0067: Unknown result type (might be due to invalid IL or missing references) foreach (GameObject prop in props) { if (Object.op_Implicit((Object)(object)prop)) { Transform parent = prop.transform.parent; prop.transform.SetParent((Transform)null); prop.transform.localScale = new Vector3(scale * 1.15f, scale * 1.15f, scale * 1.15f); prop.transform.SetParent(parent); } } } public void UpdateHoverTip(string emoteName) { //IL_001d: 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_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) if (personalTrigger != null) { InputBinding val = EmotesInputSettings.Instance.JoinEmote.bindings[0]; currentJoinButton = InputControlPath.ToHumanReadableString(((InputBinding)(ref val)).effectivePath, (HumanReadableStringOptions)2, (InputControl)null); personalTrigger.hoverTip = "Press [" + currentJoinButton + "] to join " + emoteName; } } [IteratorStateMachine(typeof(<preventEmotesInSpawnAnimation>d__89))] internal IEnumerator preventEmotesInSpawnAnimation() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <preventEmotesInSpawnAnimation>d__89(0) { <>4__this = this }; } private void Start() { //IL_0544: Unknown result type (might be due to invalid IL or missing references) //IL_0591: Unknown result type (might be due to invalid IL or missing references) //IL_0598: Expected O, but got Unknown //IL_05ca: Unknown result type (might be due to invalid IL or missing references) //IL_05e2: Unknown result type (might be due to invalid IL or missing references) //IL_0607: 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) if (worldProp) { return; } PlayerControllerB componentInParent = ((Component)((Component)this).transform).GetComponentInParent<PlayerControllerB>(); if (Object.op_Implicit((Object)(object)((Component)((Component)this).transform).GetComponentInParent<EnemyAI>()) || (componentInParent != null && Object.op_Implicit((Object)(object)((Component)componentInParent).GetComponentInChildren<EnemyAI>()))) { EnemyAI val = ((Component)((Component)this).transform).GetComponentInParent<EnemyAI>(); if (val == null) { val = ((Component)componentInParent).GetComponentInChildren<EnemyAI>(); } mapperBody = ((Component)val).gameObject; networkId = -1; isEnemy = CustomEmotesAPI.localMapper.isServer; enemyController = val; } else if (Object.op_Implicit((Object)(object)componentInParent)) { mapperBody = ((Component)componentInParent).gameObject; networkId = (int)((NetworkBehaviour)mapperBody.GetComponent<PlayerControllerB>()).NetworkObjectId; } else { networkId = -1; mapperBody = ((Component)this).gameObject; } if (enemyController == null) { playerController = mapperBody.GetComponent<PlayerControllerB>(); } isValidPlayer = playerController != null; if (playersToMappers.ContainsKey(mapperBody)) { playersToMappers[mapperBody] = this; } else { playersToMappers.Add(mapperBody, this); } mapperBodyTransform = mapperBody.transform; allMappers.Add(this); if (playerController != null) { GameObject gameObject = ((Component)mapperBody.gameObject.transform.Find("PlayerPhysicsBox")).gameObject; gameObject.tag = "InteractTrigger"; personalTrigger = gameObject.AddComponent<InteractTrigger>(); personalTrigger.interactable = false; personalTrigger.hoverIcon = Object.Instantiate<Sprite>(Assets.Load<Sprite>("assets/fineilldoitmyself/nothing.png")); personalTrigger.disabledHoverIcon = Object.Instantiate<Sprite>(Assets.Load<Sprite>("assets/fineilldoitmyself/nothing.png")); personalTrigger.disabledHoverTip = ""; UpdateHoverTip("none"); } GameObject val2 = Object.Instantiate<GameObject>(Assets.Load<GameObject>("assets/source1.prefab")); ((Object)val2).name = ((Object)this).name + "_AudioObject"; val2.transform.SetParent(mapperBody.transform); val2.transform.localPosition = Vector3.zero; SphereCollider val3 = val2.AddComponent<SphereCollider>(); val3.radius = 0.01f; ((Collider)val3).isTrigger = true; val2.layer = 6; personalAudioSource = val2.GetComponent<AudioSource>(); val2.AddComponent<AudioManager>().Setup(personalAudioSource, this); personalAudioSource.playOnAwake = false; personalAudioSource.volume = Settings.EmotesVolume.Value / 100f; audioObject = val2; int num = 0; if (true) { SkinnedMeshRenderer[] array = basePlayerModelSMR; foreach (SkinnedMeshRenderer val4 in array) { int num2 = 0; for (int j = 0; j < emoteSkeletonSMR.bones.Length; j++) { for (int k = num2; k < val4.bones.Length; k++) { if (emoteSkeletonSMR.bones[j] != null && ((Object)emoteSkeletonSMR.bones[j]).name == ((Object)val4.bones[k]).name && !Object.op_Implicit((Object)(object)((Component)val4.bones[k]).gameObject.GetComponent<EmoteConstraint>())) { num2 = k; EmoteConstraint emoteConstraint = ((Component)val4.bones[k]).gameObject.GetComponent<EmoteConstraint>(); if (emoteConstraint == null) { emoteConstraint = ((Component)val4.bones[k]).gameObject.AddComponent<EmoteConstraint>(); } else { emoteConstraint.Reset(); } emoteConstraint.AddSource(ref val4.bones[k], ref emoteSkeletonSMR.bones[j]); emoteConstraint.revertTransform = revertTransform; break; } if (k == num2 - 1) { break; } if (num2 > 0 && k == val4.bones.Length - 1) { k = -1; } } } } } if (jank) { SkinnedMeshRenderer[] array2 = basePlayerModelSMR; foreach (SkinnedMeshRenderer val5 in array2) { for (int m = 0; m < val5.bones.Length; m++) { try { if (Object.op_Implicit((Object)(object)((Component)val5.bones[m]).gameObject.GetComponent<EmoteConstraint>())) { ((Component)val5.bones[m]).gameObject.GetComponent<EmoteConstraint>().ActivateConstraints(); } } catch (Exception arg) { DebugClass.Log($"{arg}"); } } } } ((Component)this).transform.localPosition = Vector3.zero; CustomEmotesAPI.MapperCreated(this); if (playerController != null) { ((MonoBehaviour)this).StartCoroutine(SetupHandConstraint()); } ((MonoBehaviour)this).StartCoroutine(preventEmotesInSpawnAnimation()); ((MonoBehaviour)this).StartCoroutine(GetLocal()); GameObject val6 = new GameObject(); ((Object)val6).name = "BoneMapperHolder"; val6.transform.SetParent(mapperBody.transform); val6.transform.localEulerAngles = ((Component)this).transform.localEulerAngles; val6.transform.position = ((Component)this).transform.position; ((Component)this).transform.SetParent(val6.transform); val6.transform.localPosition = Vector3.zero; } [IteratorStateMachine(typeof(<SetupHandConstraint>d__91))] public IEnumerator SetupHandConstraint() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SetupHandConstraint>d__91(0) { <>4__this = this }; } public void AssignParentGameObject(GameObject youAreTheFather, bool lockPosition, bool lockRotation, bool lockScale, bool scaleAsScavenger = true, bool disableCollider = true) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)parentGameObject)) { NewAnimation(null); } ogScale = mapperBody.transform.localScale; if (local) { ogVisorScale = playerController.localVisor.localScale; } if (scaleAsScavenger) { scaleDiff = ogScale / scale; } else { scaleDiff = ogScale; } parentGameObject = youAreTheFather; positionLock = lockPosition; rotationLock = lockRotation; scaleLock = lockScale; Collider[] componentsInChildren = mapperBody.GetComponentsInChildren<Collider>(); foreach (Collider val in componentsInChildren) { val.enabled = !disableCollider; } if (Object.op_Implicit((Object)(object)mapperBody.GetComponent<CharacterController>())) { ((Collider)mapperBody.GetComponent<CharacterController>()).enabled = !disableCollider; } if (disableCollider && Object.op_Implicit((Object)(object)currentEmoteSpot)) { if (currentEmoteSpot.GetComponent<EmoteLocation>().validPlayers != 0) { currentEmoteSpot.GetComponent<EmoteLocation>().validPlayers--; } currentEmoteSpot.GetComponent<EmoteLocation>().SetColor(); currentEmoteSpot = null; } } private void LocalFunctions() { if (!((Behaviour)emoteSkeletonAnimator).enabled) { return; } try { if (moving && currentClip != null && currentClip.stopOnMove) { CustomEmotesAPI.PlayAnimation("none"); } } catch (Exception) { } } [IteratorStateMachine(typeof(<GetLocal>d__104))] private IEnumerator GetLocal() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GetLocal>d__104(0) { <>4__this = this }; } internal void FixLocalArms() { int i = 0; for (int j = 0; j < basePlayerModelSMR[1].bones.Length; j++) { EmoteConstraint component = ((Component)basePlayerModelSMR[1].bones[j]).GetComponent<EmoteConstraint>(); if (component == null) { continue; } int num = i; for (; i < basePlayerModelSMR[0].bones.Length; i++) { if (((Object)basePlayerModelSMR[1].bones[j]).name == ((Object)basePlayerModelSMR[0].bones[i]).name) { component.AddSource(basePlayerModelSMR[1].bones[j], basePlayerModelSMR[0].bones[i]); component.forceGlobalTransforms = true; break; } if (i == num - 1) { break; } if (num > 0 && i == basePlayerModelSMR[0].bones.Length - 1) { i = -1; } } } } private void TwoPartThing() { //IL_0019: 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) if (ranSinceLastAnim) { return; } AnimatorStateInfo currentAnimatorStateInfo = emoteSkeletonAnimator.GetCurrentAnimatorStateInfo(0); if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("none")) { if (twopart) { ranSinceLastAnim = true; if (((Behaviour)emoteSkeletonAnimator).enabled && !jank) { UnlockBones(); } if (!ragdolling) { oneFrameAnimatorLeeWay = true; } ((Behaviour)emoteSkeletonAnimator).enabled = false; try { if (currentClip == null) { return; } CustomEmotesAPI.Changed("none", this); NewAnimation(null); if (currentClip.syncronizeAnimation || currentClip.syncronizeAudio) { CustomAnimationClip.syncPlayerCount[currentClip.syncPos]--; } if ((Object)(object)primaryAudioClips[currentClip.syncPos][currEvent] != (Object)null) { audioObject.GetComponent<AudioManager>().Stop(); if ((Object)(object)primaryAudioClips[currentClip.syncPos][currEvent] != (Object)null && currentClip.syncronizeAudio) { listOfCurrentEmoteAudio[currentClip.syncPos].Remove(audioObject.GetComponent<AudioSource>()); } } prevClip = currentClip; currentClip = null; return; } catch (Exception) { return; } } twopart = true; } else { twopart = false; } } private void Health() { if (!isValidPlayer || !playerController.isPlayerDead || !local || currentClip == null) { return; } UnlockBones(); CustomEmotesAPI.PlayAnimation("none"); foreach (GameObject prop in props) { if (Object.op_Implicit((Object)(object)prop)) { Object.Destroy((Object)(object)prop); } } props.Clear(); } private void WorldPropAndParent() { //IL_003a: 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_0074: 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_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)parentGameObject)) { return; } if (positionLock) { mapperBody.gameObject.transform.position = parentGameObject.transform.position + new Vector3(0f, 1f, 0f); mapperBody.transform.position = parentGameObject.transform.position; PlayerControllerB obj = playerController; if (obj != null) { obj.ResetFallGravity(); } } if (rotationLock) { mapperBody.transform.rotation = parentGameObject.transform.rotation; } if (scaleLock) { mapperBody.transform.localScale = new Vector3(parentGameObject.transform.localScale.x * scaleDiff.x, parentGameObject.transform.localScale.y * scaleDiff.y, parentGameObject.transform.localScale.z * scaleDiff.z); if (local) { playerController.localVisor.localScale = ogVisorScale * (mapperBody.transform.localScale.x / ogScale.x); } if (CustomEmotesAPI.ModelReplacementAPIPresent) { ModelReplacementAPICompat.ScaleModelAsMapper(mapperBody.transform.localScale, ogScale, playerController); } if (CustomEmotesAPI.VRMPresent) { VRMCompat.ScaleModelAsMapper(Vector3.one, Vector3.one, playerController); } } } private void Update() { if (!worldProp) { WorldPropAndParent(); if (local) { LocalFunctions(); } TwoPartThing(); Health(); SetDeltaPosition(); RootMotion(); CameraControls(); } } internal bool ThirdPersonCheck() { return !CustomEmotesAPI.LCThirdPersonPresent && ((CustomEmotesAPI.NunchukThirdPersonPresent && currentClip == null) || (currentClip != null && (((currentClip.thirdPerson || Settings.thirdPersonType.Value == ThirdPersonType.All) && Settings.thirdPersonType.Value != ThirdPersonType.None) || temporarilyThirdPerson == TempThirdPerson.on))) && canThirdPerson && temporarilyThirdPerson != TempThirdPerson.off; } public void CameraControls() { //IL_0020: 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_0040: 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_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_00b9: 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_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_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) if (local && isInThirdPerson) { Vector3 val = mapperBodyTransform.position + new Vector3(0f, 1.75f * scale, 0f); Ray val2 = default(Ray); ((Ray)(ref val2))..ctor(val, desiredCameraPos.transform.position - val); RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(val2, ref val3, 10f, 268437761, (QueryTriggerInteraction)1)) { realCameraPos.transform.position = ((Ray)(ref val2)).GetPoint(((RaycastHit)(ref val3)).distance - 0.25f); } else { realCameraPos.transform.position = ((Ray)(ref val2)).GetPoint(10f); } if (Vector3.Distance(realCameraPos.transform.position, val) > Vector3.Distance(desiredCameraPos.transform.position, val)) { realCameraPos.transform.position = desiredCameraPos.transform.position; } } } private void SetDeltaPosition() { //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_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) //IL_0024: 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_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_0056: 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) deltaPos = ((Component)this).transform.position - prevPosition; deltaRot = ((Component)this).transform.rotation * Quaternion.Inverse(prevRotation); prevPosition = ((Component)this).transform.position; prevRotation = ((Component)this).transform.rotation; } public void RootMotion() { //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_021d: 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_018d: 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_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_025f: 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_01de: 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_01fe: Unknown result type (might be due to invalid IL or missing references) try { if (!((Behaviour)emoteSkeletonAnimator).enabled) { return; } if (justSwitched) { justSwitched = false; } else { if (currentClip == null || currentClip.lockType != AnimationClipParams.LockType.rootMotion) { return; } if (local || isEnemy) { if (Settings.rootMotionType.Value != RootMotionType.None || isEnemy) { Vector3 position = ((Component)this).transform.position; Quaternion rotation = ((Component)this).transform.rotation; mapperBody.transform.position = new Vector3(emoteSkeletonAnimator.GetBoneTransform((HumanBodyBones)7).position.x, mapperBody.transform.position.y, emoteSkeletonAnimator.GetBoneTransform((HumanBodyBones)7).position.z); if (isEnemy || !isInThirdPerson) { mapperBody.transform.eulerAngles = new Vector3(mapperBody.transform.eulerAngles.x, emoteSkeletonAnimator.GetBoneTransform((HumanBodyBones)10).eulerAngles.y, mapperBody.transform.eulerAngles.z); } ((Component)this).transform.position = position; ((Component)this).transform.rotation = rotation; if (positionBeforeRootMotion != new Vector3(69f, 69f, 69f)) { mapperBody.transform.position = positionBeforeRootMotion; mapperBody.transform.rotation = rotationBeforeRootMotion; positionBeforeRootMotion = new Vector3(69f, 69f, 69f); } } if (deltaPos != Vector3.zero || deltaRot != Quaternion.identity) { if (isEnemy) { EmoteNetworker.instance.SyncBoneMapperPos(((NetworkBehaviour)enemyController).NetworkObjectId, ((Component)this).transform.position, ((Component)this).transform.eulerAngles); } else { EmoteNetworker.instance.SyncBoneMapperPos(((NetworkBehaviour)playerController).NetworkObjectId, ((Component)this).transform.position, ((Component)this).transform.eulerAngles); } } } else { ((Component)this).transform.position = prevMapperPos; ((Component)this).transform.eulerAngles = prevMapperRot; } } } catch (Exception) { } } public int SpawnJoinSpot(JoinSpot joinSpot) { props.Add(Object.Instantiate<GameObject>(Assets.Load<GameObject>("@CustomEmotesAPI_customemotespackage:assets/emotejoiner/JoinVisual.prefab"))); props[props.Count - 1].transform.SetParent(((Component)this).transform); ((Object)props[props.Count - 1]).name = joinSpot.name; EmoteLocation emoteLocation = props[props.Count - 1].AddComponent<EmoteLocation>(); emoteLocation.joinSpot = joinSpot; emoteLocation.owner = this; emoteLocations.Add(emoteLocation); return props.Count - 1; } public void JoinEmoteSpot() { //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)reservedEmoteSpot)) { if (Object.op_Implicit((Object)(object)currentEmoteSpot)) { if (currentEmoteSpot.GetComponent<EmoteLocation>().validPlayers != 0) { currentEmoteSpot.GetComponent<EmoteLocation>().validPlayers--; } currentEmoteSpot.GetComponent<EmoteLocation>().SetColor(); } currentEmoteSpot = reservedEmoteSpot; reservedEmoteSpot = null; } int i; for (i = 0; i < ((Component)currentEmoteSpot.transform.parent).GetComponentsInChildren<EmoteLocation>().Length && !((Object)(object)((Component)currentEmoteSpot.transform.parent).GetComponentsInChildren<EmoteLocation>()[i] == (Object)(object)currentEmoteSpot.GetComponent<EmoteLocation>()); i++) { } if (!currentEmoteSpot.GetComponent<EmoteLocation>().owner.worldProp && currentEmoteSpot.GetComponent<EmoteLocation>().joinSpot.requireRaycastToJoin) { Vector3 val = mapperBodyTransform.position + new Vector3(0f, 1.75f * scale, 0f); BoneMapper owner = currentEmoteSpot.GetComponent<EmoteLocation>().owner; Ray val2 = default(Ray); ((Ray)(ref val2))..ctor(val, owner.mapperBodyTransform.position - val); float num = Vector3.Distance(owner.mapperBodyTransform.position, mapperBodyTransform.position) + 2f; RaycastHit[] array = Physics.RaycastAll(val2, num, 8); RaycastHit[] array2 = array; RaycastHit val4 = default(RaycastHit); for (int j = 0; j < array2.Length; j++) { RaycastHit val3 = array2[j]; if (Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref val3)).collider).gameObject.GetComponent<PlayerControllerB>()) && (Object)(object)playersToMappers[((Component)((RaycastHit)(ref val3)).collider).gameObject] == (Object)(object)owner) { if (Physics.Raycast(val2, ref val4, num, StartOfRound.Instance.allPlayersCollideWithMask, (QueryTriggerInteraction)1) && ((RaycastHit)(ref val4)).distance < ((RaycastHit)(ref val3)).distance) { return; } break; } } } EmoteNetworker.instance.SyncJoinSpot(mapperBody.GetComponent<NetworkObject>().NetworkObjectId, currentEmoteSpot.GetComponentInParent<NetworkObject>().NetworkObjectId, currentEmoteSpot.GetComponent<EmoteLocation>().owner.worldProp, i); } public void RemoveProp(int propPos) { Object.Destroy((Object)(object)props[propPos]); } public void SetAutoWalk(float speed, bool overrideBaseMovement, bool autoWalk) { autoWalkSpeed = speed; overrideMoveSpeed = overrideBaseMovement; this.autoWalk = autoWalk; } public void SetAutoWalk(float speed, bool overrideBaseMovement) { autoWalkSpeed = speed; overrideMoveSpeed = overrideBaseMovement; autoWalk = true; } [IteratorStateMachine(typeof(<waitForTwoFramesThenDisableA1>d__128))] internal IEnumerator waitForTwoFramesThenDisableA1() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <waitForTwoFramesThenDisableA1>d__128(0) { <>4__this = this }; } private void OnDestroy() { if (playerController == null) { return; } playersToMappers.Remove(((Component)playerController).gameObject); if (worldProp) { return; } playersToMappers.Remove(mapperBody); PlayAnim("none", -1); try { if (currentClip != null) { ((object)currentClip.clip[0]).ToString(); NewAnimation(null); if ((currentClip.syncronizeAnimation || currentClip.syncronizeAudio) && CustomAnimationClip.syncPlayerCount[currentClip.syncPos] > 0) { CustomAnimationClip.syncPlayerCount[currentClip.syncPos]--; } if ((Object)(object)primaryAudioClips[currentClip.syncPos][currEvent] != (Object)null) { audioObject.GetComponent<AudioManager>().Stop(); if (currentClip.syncronizeAudio) { listOfCurrentEmoteAudio[currentClip.syncPos].Remove(audioObject.GetComponent<AudioSource>()); } } if (uniqueSpot != -1 && CustomAnimationClip.uniqueAnimations[currentClip.syncPos][uniqueSpot]) { CustomAnimationClip.uniqueAnimations[currentClip.syncPos][uniqueSpot] = false; uniqueSpot = -1; } prevClip = currentClip; currentClip = null; } } catch (Exception) { } allMappers.Remove(this); } public void UnlockBones(bool animatorEnabled = true) { //IL_0007: 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) ((Component)this).transform.localPosition = Vector3.zero; ((Component)this).transform.eulerAngles = bodyPrefab.transform.eulerAngles; SkinnedMeshRenderer[] array = basePlayerModelSMR; foreach (SkinnedMeshRenderer val in array) { for (int j = 0; j < val.bones.Length; j++) { try { if (Object.op_Implicit((Object)(object)((Component)val.bones[j]).gameObject.GetComponent<EmoteConstraint>())) { ((Component)val.bones[j]).gameObject.GetComponent<EmoteConstraint>().DeactivateConstraints(); } } catch (Exception) { break; } } } foreach (EmoteConstraint cameraConstraint in cameraConstraints) { cameraConstraint.DeactivateConstraints(); } foreach (EmoteConstraint itemHolderConstraint in itemHolderConstraints) { itemHolderConstraint.DeactivateConstraints(); } foreach (EmoteConstraint additionalConstraint in additionalConstraints) { additionalConstraint.DeactivateConstraints(); } if (thirdPersonConstraint != null) { thirdPersonConstraint.DeactivateConstraints(); } DeThirdPerson(); } public void LockBones() { //IL_000f: 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_004b: 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_0070: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) UnlockBones(); ((Component)this).transform.localPosition = Vector3.zero; bool flag = true; if (currentClip != null) { foreach (HumanBodyBones soloIgnoredBone in currentClip.soloIgnoredBones) { if (Object.op_Implicit((Object)(object)emoteSkeletonAnimator.GetBoneTransform(soloIgnoredBone))) { dontAnimateUs.Add(((Object)emoteSkeletonAnimator.GetBoneTransform(soloIgnoredBone)).name); } } foreach (HumanBodyBones rootIgnoredBone in currentClip.rootIgnoredBones) { if (Object.op_Implicit((Object)(object)emoteSkeletonAnimator.GetBoneTransform(rootIgnoredBone))) { dontAnimateUs.Add(((Object)emoteSkeletonAnimator.GetBoneTransform(rootIgnoredBone)).name); } Transform[] componentsInChildren = ((Component)emoteSkeletonAnimator.GetBoneTransform(rootIgnoredBone)).GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { dontAnimateUs.Add(((Object)val).name); } } flag = !currentClip.forceCameraMode || (currentClip.forceCameraMode && currentClip.thirdPerson); } if (!jank) { ((Renderer)emoteSkeletonSMR).enabled = true; SkinnedMeshRenderer[] array = basePlayerModelSMR; foreach (SkinnedMeshRenderer val2 in array) { for (int k = 0; k < val2.bones.Length; k++) { try { if (Object.op_Implicit((Object)(object)((Component)val2.bones[k]).gameObject.GetComponent<EmoteConstraint>()) && !dontAnimateUs.Contains(((Object)val2.bones[k]).name)) { EmoteConstraint component = ((Component)val2.bones[k]).gameObject.GetComponent<EmoteConstraint>(); component.ActivateConstraints(); if ((Object)(object)val2 == (Object)(object)basePlayerModelSMR.First() && currentClip != null) { component.SetLocalTransforms(currentClip.localTransforms); } } else if (dontAnimateUs.Contains(((Object)val2.bones[k]).name)) { ((Component)val2.bones[k]).gameObject.GetComponent<EmoteConstraint>().DeactivateConstraints(); } } catch (Exception arg) { DebugClass.Log($"{arg}"); } } } foreach (EmoteConstraint itemHolderConstraint in itemHolderConstraints) { itemHolderConstraint.ActivateConstraints(); } foreach (EmoteConstraint additionalConstraint in additionalConstraints) { additionalConstraint.ActivateConstraints(); } LockCameraStuff(local && ThirdPersonCheck() && flag); } else { ((MonoBehaviour)this).StartCoroutine(waitForTwoFramesThenDisableA1()); } } public void LockCameraStuff(bool thirdPersonLock) { bool flag = CustomEmotesAPI.NunchukThirdPersonPresent; if (currentClip != null) { flag = currentClip.allowThirdPerson && !currentClip.customInternalName.Contains("TooManyEmotes__"); } if (thirdPersonLock && flag) { TurnOnThirdPerson(); } else if (currentClip != null) { if (Settings.rootMotionType.Value != RootMotionType.None && (currentClip.lockType == AnimationClipParams.LockType.rootMotion || Settings.rootMotionType.Value == RootMotionType.All || currentClip.lockType == AnimationClipParams.LockType.lockHead)) { ((MonoBehaviour)this).StartCoroutine(ActivateCameraConstraintsAfterFrame(onlyY: false)); } else if (currentClip.lockType == AnimationClipParams.LockType.headBobbing && Settings.rootMotionType.Value != RootMotionType.None) { ((MonoBehaviour)this).StartCoroutine(ActivateCameraConstraintsAfterFrame(onlyY: true)); } } } [IteratorStateMachine(typeof(<ActivateCameraConstraintsAfterFrame>d__135))] private IEnumerator ActivateCameraConstraintsAfterFrame(bool onlyY) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ActivateCameraConstraintsAfterFrame>d__135(0) { <>4__this = this, onlyY = onlyY }; } public void UnlockCameraStuff() { foreach (EmoteConstraint cameraConstraint in cameraConstraints) { cameraConstraint.DeactivateConstraints(); } thirdPersonConstraint.DeactivateConstraints(); DeThirdPerson(); } public void TurnOnThirdPerson() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 if (helmetRenderer == null) { helmetRenderer = ((Component)((Component)playerController.localVisor).transform.GetChild(0)).GetComponent<Renderer>(); } helmetRenderer.enabled = false; if ((int)((Renderer)playerController.thisPlayerModel).shadowCastingMode == 1) { needToTurnOffShadows = false; } ((Renderer)playerController.thisPlayerModel).shadowCastingMode = (ShadowCastingMode)1; ((Renderer)playerController.thisPlayerModelArms).shadowCastingMode = (ShadowCastingMode)3; ((Component)playerController.thisPlayerModelLOD1).gameObject.SetActive(false); ((Component)playerController.thisPlayerModelLOD2).gameObject.SetActive(false); if (originalLayer == -1) { originalLayer = ((Component)playerController.thisPlayerModel).gameObject.layer; originalCullingMask = playerController.gameplayCamera.cullingMask; } ((Component)playerController.thisPlayerModel).gameObject.layer = 1; playerController.grabDistance = 5.65f; playerController.gameplayCamera.cullingMask = StartOfRound.Instance.spectateCamera.cullingMask; thirdPersonConstraint.ActivateConstraints(); isInThirdPerson = true; foreach (EmoteConstraint cosmeticConstraint in cosmeticConstraints) { cosmeticConstraint.emoteBone = playerController.playerGlobalHead; } if (CustomEmotesAPI.MoreCompanyPresent) { try { needToTurnOffCosmetics = true; MoreCompanyCompat.TurnOnCosmetics(this); } catch (Exception arg) { DebugClass.Log($"couldn't turn on cosmetics: {arg}"); } } if (CustomEmotesAPI.BetterEmotesPresent) { Transform val = ((Component)playerController).transform.Find("ScavengerModel/LEGS"); if (val != null) { ((Component)val).gameObject.layer = 31; } } } public void DeThirdPerson() { if (!isInThirdPerson) { return; } playerController.gameplayCamera.cullingMask = originalCullingMask; if (needToTurnOffShadows) { ((Renderer)playerController.thisPlayerModel).shadowCastingMode = (ShadowCastingMode)3; } needToTurnOffShadows = true; ((Renderer)playerController.thisPlayerModelArms).shadowCastingMode = (ShadowCastingMode)0; ((Component)playerController.thisPlayerModelLOD1).gameObject.SetActive(true); ((Component)playerController.thisPlayerModelLOD2).gameObject.SetActive(true); helmetRenderer.enabled = true; ((Component)playerController.thisPlayerModel).gameObject.layer = originalLayer; playerController.grabDistance = 3f; isInThirdPerson = false; foreach (EmoteConstraint cosmeticConstraint in cosmeticConstraints) { cosmeticConstraint.emoteBone = originalCosmeticPosition.transform; } if (CustomEmotesAPI.MoreCompanyPresent && needToTurnOffCosmetics) { try { MoreCompanyCompat.TurnOffCosmetics(this); } catch (Exception arg) { DebugClass.Log($"couldn't clear cosmetics: {arg}"); } } if (CustomEmotesAPI.BetterEmotesPresent) { Transform val = ((Component)playerController).transform.Find("ScavengerModel/LEGS"); if (val != null) { ((Component)val).gameObject.layer = 0; } } } public void AttachItemHolderToTransform(Transform target) { ((Component)itemHolderPosition).gameObject.GetComponent<EmoteConstraint>().AddSource(itemHolderPosition, target); ((Component)itemHolderPosition).gameObject.GetComponent<EmoteConstraint>().ActivateConstraints(); } } public class CustomAnimationClip : MonoBehaviour { public AnimationClip[] clip; public AnimationClip[] secondaryClip; public bool looping; public string wwiseEvent; public bool syncronizeAudio; public List<HumanBodyBones> soloIgnoredBones; public List<HumanBodyBones> rootIgnoredBones; public bool dimAudioWhenClose; public bool stopOnAttack; public bool stopOnMove; public bool visibility; public int startPref; public int joinPref; public JoinSpot[] joinSpots; public bool useSafePositionReset; public string customInternalName; public Action<BoneMapper> customPostEventCodeSync; public Action<BoneMapper> customPostEventCodeNoSync; public bool syncronizeAnimation; public int syncPos; public static List<float> syncTimer = new List<float>(); public static List<int> syncPlayerCount = new List<int>(); public static List<List<bool>> uniqueAnimations = new List<List<bool>>(); public bool vulnerableEmote = false; public AnimationClipParams.LockType lockType = AnimationClipParams.LockType.none; public bool willGetClaimed = false; public float audioLevel = 0.5f; public bool thirdPerson = false; public string displayName = ""; public bool localTransforms = false; public BepInPlugin ownerPlugin; public bool usesNewImportSystem = false; public bool animates = true; public bool preventsMovement = false; public bool allowJoining = true; public string joinEmote = ""; public bool forceCameraMode = false; public bool allowThirdPerson = true; public bool animateHealthbar = true; internal CustomAnimationClip(AnimationClip[] _clip, bool _loop, AudioClip[] primaryAudioClips = null, AudioClip[] secondaryAudioClips = null, HumanBodyBones[] rootBonesToIgnore = null, HumanBodyBones[] soloBonesToIgnore = null, AnimationClip[] _secondaryClip = null, bool dimWhenClose = false, bool stopWhenMove = false, bool stopWhenAttack = false, bool visible = true, bool syncAnim = false, bool syncAudio = false, int startPreference = -1, int joinPreference = -1, JoinSpot[] _joinSpots = null, bool safePositionReset = false, string customName = "", Action<BoneMapper> _customPostEventCodeSync = null, Action<BoneMapper> _customPostEventCodeNoSync = null, AnimationClipParams.LockType lockType = AnimationClipParams.LockType.none, AudioClip[] primaryDMCAFreeAudioClips = null, AudioClip[] secondaryDMCAFreeAudioClips = null, bool willGetClaimed = false, float audioLevel = 0.5f, bool thirdPerson = false, string displayName = "", BepInPlugin ownerPlugin = null, bool localTransforms = false, bool usesNewImportSystem = false, bool animates = true, bool preventsMovement = false, bool allowJoining = true, string joinEmote = "", bool forceCameraMode = false, bool allowThirdPerson = true, bool animateHealthbar = true) { if (rootBonesToIgnore == null) { rootBonesToIgnore = (HumanBodyBones[])(object)new HumanBodyBones[0]; } if (soloBonesToIgnore == null) { soloBonesToIgnore = (HumanBodyBones[])(object)new HumanBodyBones[0]; } clip = _clip; secondaryClip = _secondaryClip; looping = _loop; dimAudioWhenClose = dimWhenClose; stopOnAttack = stopWhenAttack; stopOnMove = stopWhenMove; visibility = visible; joinPref = joinPreference; startPref = startPreference; customPostEventCodeSync = _customPostEventCodeSync; customPostEventCodeNoSync = _customPostEventCodeNoSync; if (primaryAudioClips == null) { BoneMapper.primaryAudioClips.Add((AudioClip[])(object)new AudioClip[1]); } else { BoneMapper.primaryAudioClips.Add(primaryAudioClips); } if (secondaryAudioClips == null) { BoneMapper.secondaryAudioClips.Add((AudioClip[])(object)new AudioClip[1]); } else { BoneMapper.secondaryAudioClips.Add(secondaryAudioClips); } if (primaryDMCAFreeAudioClips == null) { BoneMapper.primaryDMCAFreeAudioClips.Add((AudioClip[])(object)new AudioClip[1]); } else { BoneMapper.primaryDMCAFreeAudioClips.Add(primaryDMCAFreeAudioClips); } if (secondaryDMCAFreeAudioClips == null) { BoneMapper.secondaryDMCAFreeAudioClips.Add((AudioClip[])(object)new AudioClip[1]); } else { BoneMapper.secondaryDMCAFreeAudioClips.Add(secondaryDMCAFreeAudioClips); } if (soloBonesToIgnore.Length != 0) { soloIgnoredBones = new List<HumanBodyBones>(soloBonesToIgnore); } else { soloIgnoredBones = new List<HumanBodyBones>(); } if (rootBonesToIgnore.Length != 0) { rootIgnoredBones = new List<HumanBodyBones>(rootBonesToIgnore); } else { rootIgnoredBones = new List<HumanBodyBones>(); } syncronizeAnimation = syncAnim; syncronizeAudio = syncAudio; syncPos = syncTimer.Count; syncTimer.Add(0f); syncPlayerCount.Add(0); if (_clip != null) { List<bool> list = new List<bool>(); for (int i = 0; i < _clip.Length; i++) { list.Add(item: false); } uniqueAnimations.Add(list); } if (_joinSpots == null) { _joinSpots = new JoinSpot[0]; } joinSpots = _joinSpots; useSafePositionReset = safePositionReset; customInternalName = customName; this.usesNewImportSystem = usesNewImportSystem; if (!usesNewImportSystem && customName != "") { BoneMapper.customNamePairs.Add(customName, ((Object)_clip[0]).name); } BoneMapper.listOfCurrentEmoteAudio.Add(new List<AudioSource>()); this.lockType = lockType; this.willGetClaimed = willGetClaimed; this.audioLevel = audioLevel; this.thirdPerson = thirdPerson; this.displayName = displayName; if (displayName == "") { DebugClass.Log("display name wasn't set, using " + customInternalName); this.displayName = customInternalName; } this.ownerPlugin = ownerPlugin; this.localTransforms = localTransforms; this.animates = animates; this.preventsMovement = preventsMovement; this.allowJoining = allowJoining; if (string.IsNullOrEmpty(customInternalName)) { return; } Keybinds.DisableKeybinds(); if (usesNewImportSystem) { InputActionReference orCreateInputRef = Keybinds.GetOrCreateInputRef(customInternalName); orCreateInputRef.action.Enable(); orCreateInputRef.action.started += EmoteAction_started; if (Keybinds.keyBindOverrideStorage.TryGetValue(customInternalName, out var value)) { InputActionRebindingExtensions.ApplyBindingOverride(orCreateInputRef.action, value, (string)null, (string)null); } } else { InputActionReference orCreateInputRef2 = Keybinds.GetOrCreateInputRef(((Object)clip[0]).name); orCreateInputRef2.action.Enable(); orCreateInputRef2.action.started += EmoteAction_started; if (Keybinds.keyBindOverrideStorage.TryGetValue(((Object)clip[0]).name, out var value2)) { InputActionRebindingExtensions.ApplyBindingOverride(orCreateInputRef2.action, value2, (string)null, (string)null); } } Keybinds.EnableKeybinds(); if (joinEmote == "") { joinEmote = customInternalName; } this.joinEmote = joinEmote; if (EmoteDmcaVerificationStatusDb.IsNonDmcaCompliant(ownerPlugin.GUID)) { this.willGetClaimed = true; } this.forceCameraMode = forceCameraMode; this.allowThirdPerson = allowThirdPerson; this.animateHealthbar = animateHealthbar; } private static void EmoteAction_started(CallbackContext obj) { if (EmoteUiManager.CanOpenEmoteWheels() && CustomEmotesAPI.localMapper != null) { CustomEmotesAPI.PlayAnimation(((CallbackContext)(ref obj)).action.name); } } } [DefaultExecutionOrder(-2)] public class EmoteConstraint : MonoBehaviour { [CompilerGenerated] private sealed class <FirstTimeActiveFix>d__21 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public EmoteConstraint e; public EmoteConstraint <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FirstTimeActiveFix>d__21(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; ((Behaviour)e).enabled = false; <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 1; return true; case 1: <>1__state = -1; ((Behaviour)e).enabled = true; if (e.onlyY) { e.ActivateConstraints(); e.onlyY = true; } else { e.ActivateConstraints(); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <FixConstraints>d__27 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public EmoteConstraint <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FixConstraints>d__27(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 1; return true; case 1: <>1__state = -1; if (<>4__this.needToFix) { <>4__this.ActivateConstraints(); <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 2; return true; } break; case 2: <>1__state = -1; <>4__this.DeactivateConstraints(); break; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public Transform originalBone; public Transform emoteBone; private Vector3 originalPosition; private Quaternion originalRotation; public bool constraintActive = false; public bool revertTransform; private bool firstTime = true; private bool firstTime2 = true; private bool hasEverActivatedConstraints = false; public bool onlyY = false; public bool debug = false; public bool forceGlobalTransforms = false; internal bool needToFix = true; public bool localTransforms { get; private set; } = false; public bool SetLocalTransforms(bool input) { localTransforms = !forceGlobalTransforms && input; return localTransforms; } private void LateUpdate() { ActUponConstraints(); } public void ActUponConstraints() { //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: 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_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: 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_0090: 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_0044: 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_005e: Unknown result type (might be due to invalid IL or missing references) if (!constraintActive) { return; } if (localTransforms) { if (onlyY) { originalBone.localPosition = new Vector3(originalBone.localPosition.x, emoteBone.localPosition.y, originalBone.localPosition.z); return; } originalBone.localPosition = emoteBone.localPosition; originalBone.localRotation = emoteBone.localRotation; } else if (onlyY) { originalBone.position = new Vector3(originalBone.position.x, emoteBone.position.y, originalBone.position.z); } else { originalBone.position = emoteBone.position; originalBone.rotation = emoteBone.rotation; } } public void ActivateConstraints() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //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) if (!constraintActive && emoteBone != null) { if (firstTime2) { firstTime2 = false; ((Component)this).gameObject.GetComponent<MonoBehaviour>().StartCoroutine(FirstTimeActiveFix(this)); return; } originalPosition = originalBone.localPosition; originalRotation = originalBone.localRotation; hasEverActivatedConstraints = true; constraintActive = true; onlyY = false; } } [IteratorStateMachine(typeof(<FirstTimeActiveFix>d__21))] internal IEnumerator FirstTimeActiveFix(EmoteConstraint e) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FirstTimeActiveFix>d__21(0) { <>4__this = this, e = e }; } public void DeactivateConstraints() { //IL_003b: 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) constraintActive = false; if (firstTime || !revertTransform || !hasEverActivatedConstraints) { firstTime = false; return; } originalBone.localPosition = originalPosition; originalBone.localRotation = originalRotation; } internal void AddSource(ref Transform originalBone, ref Transform emoteBone) { this.originalB