

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 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