using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using Beetle_Utils;
using Beetleyes;
using Il2Cpp;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem.Collections.Generic;
using MelonLoader;
using Microsoft.CodeAnalysis;
using Unity.Cinemachine;
using UnityEngine;
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: MelonInfo(typeof(Core), "Beetleyes", "1.0.0", "pablops", null)]
[assembly: MelonGame("Bugfight Studio", "Beetleball")]
[assembly: MelonAdditionalDependencies(new string[] { "BeetleUtils" })]
[assembly: MelonAdditionalCredits("Spike")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("Beetleyes")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Beetleyes")]
[assembly: AssemblyTitle("Beetleyes")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Beetleyes
{
public class Core : MelonMod
{
public string assetFolder;
private Camera gameCamera;
private bool markersCreated = false;
public bool onMainMenu = true;
public Transform hudRoot;
private Texture2D markerTexture;
public RectTransform rt;
public List<RawImage> markers = new List<RawImage>();
public override void OnInitializeMelon()
{
string directoryName = Path.GetDirectoryName(((MelonBase)this).MelonAssembly.Assembly.Location);
assetFolder = Path.Combine(directoryName, "assets");
((MelonBase)this).LoggerInstance.Msg("BeetleEyes Initialized.");
}
public override void OnUpdate()
{
if ((Object)(object)gameCamera == (Object)null || !((Component)gameCamera).gameObject.activeInHierarchy)
{
gameCamera = getCamera();
}
if ((Object)(object)hudRoot == (Object)null || !((Component)hudRoot).gameObject.activeInHierarchy)
{
hudRoot = null;
FindHudRoot();
}
if ((Object)(object)gameCamera == (Object)null && (Object)(object)hudRoot == (Object)null && !onMainMenu)
{
gameCamera = getCamera();
return;
}
if (!onMainMenu)
{
HashSet<BeetleActor> activeBeetles = GameState.ActiveBeetles;
if (!markersCreated || markers.Count != activeBeetles.Count)
{
DestroyAllMarkers();
DrawEyesOnBeetles();
}
UpdateBeetleMarkers();
}
else if (markersCreated)
{
DestroyAllMarkers();
}
HandleInput();
}
private void HandleInput()
{
if (!Input.GetKeyDown((KeyCode)286))
{
}
}
public override void OnSceneWasLoaded(int buildIndex, string sceneName)
{
markersCreated = false;
if (0 <= buildIndex && buildIndex <= 2)
{
onMainMenu = true;
}
else
{
onMainMenu = false;
}
}
private Texture2D LoadTexture(string fileName)
{
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Expected O, but got Unknown
string text = BeetleUtils.ModFolder();
string text2 = Path.Combine(assetFolder, fileName);
if (!File.Exists(text2))
{
MelonLogger.Error("Texture not found: " + text2);
return null;
}
byte[] array = File.ReadAllBytes(text2);
Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false);
ImageConversion.LoadImage(val, Il2CppStructArray<byte>.op_Implicit(array));
return val;
}
private void FindHudRoot()
{
Il2CppArrayBase<Canvas> val = Object.FindObjectsOfType<Canvas>();
foreach (Canvas item in val)
{
if (!(((Object)item).name == "Canvas") && !(((Object)item).name == "Canvas_CustomLobby"))
{
continue;
}
Transform val2 = ((Component)item).transform.Find("PlayerHUD");
if ((Object)(object)val2 != (Object)null)
{
hudRoot = val2.Find("Root");
if ((Object)(object)hudRoot != (Object)null)
{
break;
}
}
}
}
public void DrawEyesOnBeetles()
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Expected O, but got Unknown
//IL_009b: 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_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)markerTexture == (Object)null)
{
markerTexture = LoadTexture("point.png");
}
markers.Clear();
Enumerator<BeetleActor> enumerator = GameState.ActiveBeetles.GetEnumerator();
Vector2 val3 = default(Vector2);
while (enumerator.MoveNext())
{
BeetleActor current = enumerator.Current;
GameObject val = new GameObject("Marker");
val.transform.SetParent(hudRoot, false);
RawImage val2 = val.AddComponent<RawImage>();
val2.texture = (Texture)(object)markerTexture;
RectTransform rectTransform = ((Graphic)val2).rectTransform;
((Vector2)(ref val3))..ctor(0.5f, 0.5f);
rectTransform.anchorMax = val3;
rectTransform.anchorMin = val3;
rectTransform.pivot = new Vector2(0.5f, 0.5f);
rectTransform.sizeDelta = new Vector2(100f, 100f);
markers.Add(val2);
}
markersCreated = true;
}
public Vector2 ScreenToHud(Vector3 screenPos)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
RectTransform component = ((Component)hudRoot).GetComponent<RectTransform>();
Vector2 result = default(Vector2);
RectTransformUtility.ScreenPointToLocalPointInRectangle(component, Vector2.op_Implicit(screenPos), (Camera)null, ref result);
return result;
}
public Camera getCamera()
{
Camera result = Camera.main;
foreach (CinemachineBrain item in Object.FindObjectsOfType<CinemachineBrain>(true))
{
result = ((Component)item).GetComponent<Camera>();
}
return result;
}
public void UpdateBeetleMarkers()
{
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: 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_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
if (onMainMenu)
{
return;
}
HashSet<BeetleActor> activeBeetles = GameState.ActiveBeetles;
int num = 0;
Enumerator<BeetleActor> enumerator = GameState.ActiveBeetles.GetEnumerator();
while (enumerator.MoveNext())
{
BeetleActor current = enumerator.Current;
if (num >= markers.Count)
{
break;
}
if ((Object)(object)current == (Object)null)
{
((Behaviour)markers[num]).enabled = false;
num++;
continue;
}
if ((Object)(object)markers[num] == (Object)null)
{
num++;
continue;
}
if (!IsBeetleVisible(current))
{
((Behaviour)markers[num]).enabled = false;
num++;
continue;
}
Vector3 val = gameCamera.WorldToScreenPoint(((Component)current).transform.position);
((Behaviour)markers[num]).enabled = true;
((Graphic)markers[num]).rectTransform.anchoredPosition = ScreenToHud(val);
float num2 = 5f / val.z;
((Graphic)markers[num]).rectTransform.sizeDelta = Vector2.one * 300f * num2;
num++;
}
}
public void DestroyAllMarkers()
{
foreach (RawImage marker in markers)
{
if ((Object)(object)marker != (Object)null)
{
Object.Destroy((Object)(object)((Component)marker).gameObject);
}
}
markers.Clear();
markersCreated = false;
}
public bool IsBeetleVisible(BeetleActor beetle)
{
//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_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_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_002e: 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)
Vector3 position = ((Component)beetle).transform.position;
Vector3 position2 = ((Component)gameCamera).transform.position;
Vector3 val = position - position2;
float magnitude = ((Vector3)(ref val)).magnitude;
RaycastHit val2 = default(RaycastHit);
if (Physics.Raycast(position2, ((Vector3)(ref val)).normalized, ref val2, magnitude) && !((RaycastHit)(ref val2)).transform.IsChildOf(((Component)beetle).transform))
{
return false;
}
return true;
}
}
}