Decompiled source of Hologram v1.2.6

Mods/Hologram.dll

Decompiled 5 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using Hologram;
using MelonLoader;
using RumbleModUI;
using RumbleModdingAPI;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(main), "Hologram", "1.2.3", "ERROR", null)]
[assembly: MelonGame("Buckethead Entertainment", "RUMBLE")]
[assembly: MelonColor(255, 255, 0, 0)]
[assembly: MelonAuthorColor(255, 255, 0, 0)]
[assembly: AssemblyTitle("Hologram")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Hologram")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: VerifyLoaderVersion(0, 6, 2, true)]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("b10c94a1-8a40-4701-bc5b-98eabb44dfea")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Hologram;

public class main : MelonMod
{
	private bool init = false;

	private bool setPos = false;

	private string currentScene = "Loader";

	private int sceneCount = 0;

	private bool sceneChanged = false;

	private List<GameObject> cubeGrid = new List<GameObject>();

	private Vector3[] noisePositions = (Vector3[])(object)new Vector3[900];

	private float time;

	public List<Vector3[]> ModelsList = new List<Vector3[]>();

	private GameObject materialHolder;

	private GameObject player;

	private Transform RhandTransform;

	private Transform LhandTransform;

	private Vector3 RprevHandPosition;

	private Vector3 LprevHandPosition;

	private Vector3 RhandVelocity;

	private Vector3 LhandVelocity;

	private Vector3 cubeParentVelocity = Vector3.zero;

	private float rotationVelocity;

	private GameObject RhandCube;

	private GameObject LhandCube;

	private UI UI = UI.instance;

	private Mod Hologram = new Mod();

	private string FILEPATH = "UserData\\Hologram";

	private GameObject MainParent;

	private int CurrentModel = 0;

	private int CurrentShape = 1;

	private int waitedTicks = 0;

	public GameObject cubeParent;

	private bool isAdjustingCubeCount = false;

	public override void OnLateInitializeMelon()
	{
		//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_0066: Expected O, but got Unknown
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Expected O, but got Unknown
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Expected O, but got Unknown
		MelonLogger.Msg("Hologram Initiated");
		Hologram.ModName = "Hologram";
		Hologram.ModVersion = "1.2.3";
		Hologram.SetFolder("Hologram");
		Hologram.AddDescription("Description", "Description", "Shows a Hologram in Gym", new Tags
		{
			IsSummary = true
		});
		Hologram.AddToList("Follow Hands (Move)", false, 0, "Toggles if the hologram follows your hands in order to move it around", new Tags());
		Hologram.AddToList("Toggle Hologram", true, 0, "Toggles if the hologram should be enabled or not", new Tags());
		Hologram.GetFromFile();
		Hologram.ModSaved += Save;
		UI.instance.UI_Initialized += UIInit;
		Calls.onMapInitialized += OnMapInitialized;
	}

	public void UIInit()
	{
		UI.AddMod(Hologram);
	}

	public void Save()
	{
		if (currentScene == "Gym" || currentScene == "Park")
		{
			MainParent.SetActive((bool)Hologram.Settings[2].SavedValue);
		}
	}

	public void OnMapInitialized()
	{
		//IL_0134: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		if (currentScene == "Gym" || currentScene == "Park")
		{
			if (!init)
			{
				MelonCoroutines.Start(InitializeWithPause(sceneCount));
				return;
			}
			MainParent.SetActive((bool)Hologram.Settings[2].SavedValue);
			if ((Object)(object)LhandTransform == (Object)null || (Object)(object)RhandTransform == (Object)null)
			{
				player = ((Component)((Component)Players.GetLocalPlayer().Controller).gameObject.transform.GetChild(1)).gameObject;
				RhandTransform = player.transform.GetChild(2);
				LhandTransform = player.transform.GetChild(1);
			}
			MainParent.transform.position = ((currentScene == "Gym") ? new Vector3(3.92f, 1.2909f, -3.1745f) : new Vector3(-26.3655f, -4.4727f, 9.1037f));
		}
		else if (init)
		{
			MainParent.SetActive(false);
		}
		else
		{
			MelonLogger.Error("What the fuck did you do");
		}
	}

	private IEnumerator InitializeWithPause(int sceneNumber)
	{
		DateTime targetTime = DateTime.Now.AddSeconds(1.0);
		while (DateTime.Now < targetTime)
		{
			yield return (object)new WaitForFixedUpdate();
		}
		if (sceneNumber == sceneCount)
		{
			Initialize();
		}
	}

	private void Initialize()
	{
		//IL_005f: 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)
		ModelsList = new List<Vector3[]>();
		int num = 25;
		float num2 = 1f;
		float num3 = num2 / (float)num;
		float num4 = (float)(num - 1) * num3 / 2f;
		noisePositions = (Vector3[])(object)new Vector3[num * num];
		int num5 = 0;
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num; j++)
			{
				noisePositions[num5] = new Vector3((float)i * num3 - num4, 0f, (float)j * num3 - num4);
				num5++;
			}
		}
		InitializeModels();
		InitializePlayer();
		InitializeCubeGrid();
		InitializeHandColliders();
		MainParent.SetActive((bool)Hologram.Settings[2].SavedValue);
		init = true;
	}

	public static string[] ReadFileText(string filePath, string fileName)
	{
		try
		{
			return File.ReadAllLines(filePath + "\\" + fileName);
		}
		catch (Exception ex)
		{
			MelonLogger.Error((object)ex);
		}
		return null;
	}

	public static Vector3 ParseStringToVector3(string vectorString)
	{
		//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_003a: Unknown result type (might be due to invalid IL or missing references)
		string[] array = vectorString.Split(new char[1] { ',' });
		float num = float.Parse(array[0]);
		float num2 = float.Parse(array[1]);
		float num3 = float.Parse(array[2]);
		return new Vector3(num, num2, num3);
	}

	private void InitializeModels()
	{
		//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_0050: Unknown result type (might be due to invalid IL or missing references)
		string[] files = Directory.GetFiles(FILEPATH, "*.obj");
		string[] array = files;
		foreach (string filePath in array)
		{
			string[] array2 = Load3DModel(filePath).ToArray();
			List<Vector3> list = new List<Vector3>();
			string[] array3 = array2;
			foreach (string vectorString in array3)
			{
				Vector3 item = ParseStringToVector3(vectorString);
				list.Add(item);
			}
			ModelsList.Add(list.ToArray());
		}
	}

	private List<string> Load3DModel(string filePath)
	{
		if (!File.Exists(filePath))
		{
			MelonLogger.Error("File Not found: " + filePath);
			return new List<string>();
		}
		List<string> list = new List<string>();
		string[] array = File.ReadAllLines(filePath);
		string[] array2 = array;
		foreach (string text in array2)
		{
			string[] array3 = text.Trim().Split();
			if (array3[0] == "v")
			{
				list.Add(array3[1] + ", " + array3[2] + ", " + array3[3]);
			}
		}
		return list;
	}

	private void InitializePlayer()
	{
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: 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_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Expected O, but got Unknown
		//IL_00a0: 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)
		player = ((Component)((Component)Players.GetLocalPlayer().Controller).gameObject.transform.GetChild(1)).gameObject;
		RhandTransform = player.transform.GetChild(2);
		LhandTransform = player.transform.GetChild(1);
		RprevHandPosition = RhandTransform.position;
		LprevHandPosition = LhandTransform.position;
		MainParent = new GameObject("Hologram Stuff");
		MainParent.transform.position = new Vector3(3.92f, 1.2909f, -3.1745f);
		MainParent.transform.rotation = Quaternion.Euler(0f, 18.7272f, 0f);
		Object.DontDestroyOnLoad((Object)(object)MainParent);
	}

	private void InitializeHandColliders()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		GameObject val = new GameObject("Hand Colliders");
		RhandCube = CreateHandCollider("Right Hand Collider", val.transform);
		LhandCube = CreateHandCollider("Left Hand Collider", val.transform);
		Object.DontDestroyOnLoad((Object)(object)val);
	}

	private GameObject CreateHandCollider(string name, Transform parent)
	{
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = GameObject.CreatePrimitive((PrimitiveType)3);
		val.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
		((Object)val).name = name;
		val.transform.parent = parent;
		Renderer component = val.GetComponent<Renderer>();
		component.material = ((Renderer)materialHolder.GetComponent<MeshRenderer>()).material;
		component.enabled = false;
		Rigidbody val2 = val.AddComponent<Rigidbody>();
		val2.isKinematic = true;
		val.AddComponent<BoxCollider>();
		return val;
	}

	private void InitializeCubeGrid()
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Expected O, but got Unknown
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Expected O, but got Unknown
		//IL_00be: 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_0108: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		cubeParent = new GameObject("CubeGridParent");
		cubeParent.transform.parent = MainParent.transform;
		Material material = ((Component)((Component)Gym.GetGymPoseGhostHandler().poseGhost).transform.GetChild(0).GetChild(1)).GetComponent<Renderer>().material;
		materialHolder = new GameObject("Pose Ghost Material");
		MeshRenderer val = materialHolder.AddComponent<MeshRenderer>();
		((Renderer)val).material = material;
		Object.DontDestroyOnLoad((Object)(object)materialHolder);
		materialHolder.transform.parent = MainParent.transform;
		CreateCubeGrid(ModelsList[0], material);
		cubeParent.transform.position = Vector3.zero;
		cubeParent.transform.rotation = Quaternion.Euler(0f, 26.3635f, 0f);
		cubeParent.transform.localPosition = new Vector3(-0.2072f, -0.0909f, -0.3345f);
		cubeParent.transform.localScale = Vector3.one;
		InitializeButtons(material);
	}

	private void InitializeButtons(Material material)
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_010c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0117: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_016b: Unknown result type (might be due to invalid IL or missing references)
		//IL_018b: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0213: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = Create.NewButton(Vector3.zero, Quaternion.identity, (Action)delegate
		{
			if (!isAdjustingCubeCount)
			{
				CurrentModel = (CurrentModel + 1) % (ModelsList.Count + 1);
				AdjustCubeCountSwitch(material);
			}
		});
		((Object)val).name = "Next Model Button";
		val.transform.parent = MainParent.transform;
		val.transform.localRotation = Quaternion.Euler(270.9994f, 52.2065f, 179.9999f);
		val.transform.localPosition = new Vector3(-3.2719f, 0.0073f, -1.9171f);
		GameObject val2 = Create.NewText("→", 1f, Color.white, val.transform.position, Quaternion.identity);
		((Object)val2).name = "Next Model Text";
		val2.transform.parent = val.transform;
		val2.transform.localRotation = Quaternion.Euler(90f, 0f, 0f);
		val2.transform.localPosition = new Vector3(0.0077f, 0.0898f, 0.0205f);
		GameObject val3 = Create.NewButton(Vector3.zero, Quaternion.identity, (Action)delegate
		{
			if (!isAdjustingCubeCount)
			{
				CurrentModel = (CurrentModel + ModelsList.Count) % (ModelsList.Count + 1);
				AdjustCubeCountSwitch(material);
			}
		});
		((Object)val3).name = "Prev Model Button";
		val3.transform.parent = MainParent.transform;
		val3.transform.localRotation = Quaternion.Euler(270.9994f, 52.2065f, 179.9999f);
		val3.transform.localPosition = new Vector3(-3.1225f, 0.0073f, -2.1199f);
		GameObject val4 = Create.NewText("←", 1f, Color.white, val.transform.position, Quaternion.identity);
		((Object)val4).name = "Prev Model Text";
		val4.transform.parent = val3.transform;
		val4.transform.localRotation = Quaternion.Euler(90f, 0f, 0f);
		val4.transform.localPosition = new Vector3(0.0077f, 0.0898f, 0.0205f);
	}

	private void AdjustCubeCountSwitch(Material material)
	{
		if (CurrentModel >= 0 && CurrentModel < ModelsList.Count)
		{
			AdjustCubeCount(ModelsList[CurrentModel], material);
		}
		else if (CurrentModel >= 0 && CurrentModel == ModelsList.Count)
		{
			AdjustCubeCount(noisePositions, material);
		}
	}

	private void CreateCubeGrid(Vector3[] model, Material material)
	{
		//IL_0016: 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_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_0037: 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_007a: 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)
		PrimitiveType val = (PrimitiveType)(CurrentShape switch
		{
			0 => 3, 
			1 => 0, 
			_ => 3, 
		});
		foreach (Vector3 localPosition in model)
		{
			GameObject val2 = GameObject.CreatePrimitive(val);
			val2.transform.localPosition = localPosition;
			val2.transform.parent = cubeParent.transform;
			float num = 0.03f;
			val2.transform.localScale = new Vector3(num, num, num);
			Renderer component = val2.GetComponent<Renderer>();
			component.material = ((Renderer)materialHolder.GetComponent<MeshRenderer>()).material;
			Rigidbody val3 = val2.AddComponent<Rigidbody>();
			val3.isKinematic = true;
			cubeGrid.Add(val2);
		}
	}

	public void AdjustCubeCount(Vector3[] model, Material material)
	{
		if (!isAdjustingCubeCount)
		{
			isAdjustingCubeCount = true;
			MelonCoroutines.Start(AdjustCubeCountCoroutine(model, material));
		}
	}

	private IEnumerator AdjustCubeCountCoroutine(Vector3[] model, Material material)
	{
		int currentCount = cubeGrid.Count;
		int targetCount = model.Length;
		float waitTime = 1.5f / (float)Mathf.Abs(targetCount - currentCount);
		PrimitiveType shapeType = (PrimitiveType)(CurrentShape switch
		{
			0 => 3, 
			1 => 0, 
			_ => 3, 
		});
		if (currentCount < targetCount)
		{
			for (int j = currentCount; j < targetCount; j++)
			{
				if (!(currentScene == "Gym") && !(currentScene == "Park"))
				{
					break;
				}
				GameObject cube2 = GameObject.CreatePrimitive(shapeType);
				cube2.transform.localPosition = RhandTransform.position;
				cube2.transform.parent = cubeParent.transform;
				cube2.transform.localScale = new Vector3(0.03f, 0.03f, 0.03f);
				Renderer renderer = cube2.GetComponent<Renderer>();
				renderer.material = ((Renderer)materialHolder.GetComponent<MeshRenderer>()).material;
				Rigidbody rb = cube2.AddComponent<Rigidbody>();
				rb.isKinematic = true;
				cubeGrid.Add(cube2);
				yield return (object)new WaitForSeconds(waitTime);
			}
		}
		else if (currentCount > targetCount)
		{
			for (int i = currentCount - 1; i >= targetCount; i--)
			{
				GameObject cube = cubeGrid[i];
				cubeGrid.Remove(cube);
				Object.Destroy((Object)(object)cube);
			}
		}
		isAdjustingCubeCount = false;
	}

	public override void OnSceneWasLoaded(int buildIndex, string sceneName)
	{
		currentScene = sceneName;
		sceneChanged = true;
	}

	public override void OnUpdate()
	{
		if (init && (bool)Hologram.Settings[2].SavedValue && (currentScene == "Gym" || currentScene == "Park"))
		{
			if ((Object)(object)LhandCube != (Object)null && (Object)(object)RhandCube != (Object)null && (Object)(object)RhandTransform != (Object)null && (Object)(object)LhandTransform != (Object)null)
			{
				UpdateHandPositions();
				UpdateCubeGrid();
			}
			if (CurrentModel == ModelsList.Count)
			{
				UpdateNoisePositions();
			}
		}
	}

	private void UpdateHandPositions()
	{
		//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_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: 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_009c: 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_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_01a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_0115: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: 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_0129: Unknown result type (might be due to invalid IL or missing references)
		//IL_0168: Unknown result type (might be due to invalid IL or missing references)
		//IL_016a: 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_0179: Unknown result type (might be due to invalid IL or missing references)
		//IL_017e: Unknown result type (might be due to invalid IL or missing references)
		time += Time.deltaTime;
		Vector3 position = RhandTransform.position;
		Vector3 position2 = LhandTransform.position;
		bool flag = RightController.GetGrip() > 0.9f && RightController.GetTrigger() > 0.9f;
		bool flag2 = LeftController.GetGrip() > 0.9f && LeftController.GetTrigger() > 0.9f;
		RhandCube.transform.position = position;
		RhandCube.transform.rotation = RhandTransform.rotation;
		LhandCube.transform.position = position2;
		LhandCube.transform.rotation = LhandTransform.rotation;
		if (Vector3.Distance(player.transform.position, MainParent.transform.position) <= 4f)
		{
			if (RightController.GetGrip() > 0.9f && !flag)
			{
				RhandVelocity = (position - RprevHandPosition) / Time.deltaTime;
				rotationVelocity += RhandVelocity.x * 50f;
			}
			if (LeftController.GetGrip() > 0.9f && !flag2)
			{
				LhandVelocity = (position2 - LprevHandPosition) / Time.deltaTime;
				rotationVelocity += LhandVelocity.x * 50f;
			}
		}
		RprevHandPosition = position;
		LprevHandPosition = position2;
		rotationVelocity *= 0.95f;
		float num = 100f;
		rotationVelocity = Mathf.Clamp(rotationVelocity, 0f - num, num);
		cubeParent.transform.Rotate(Vector3.up, rotationVelocity * Time.deltaTime);
	}

	private void UpdateCubeGrid()
	{
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		for (int num = cubeGrid.Count - 1; num >= 0; num--)
		{
			GameObject val = cubeGrid[num];
			if ((Object)(object)val != (Object)null)
			{
				float num2 = Mathf.Sin(time + (float)num) * 0.005f;
				Vector3 targetPosition = GetTargetPosition(num);
				targetPosition.y += num2;
				Rigidbody component = val.GetComponent<Rigidbody>();
				HandleCollisionAndLerp(val, component, targetPosition);
			}
		}
	}

	private void UpdateNoisePositions()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: 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_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)
		for (int i = 0; i < noisePositions.Length; i++)
		{
			Vector3 val = noisePositions[i];
			float x = val.x;
			float num = val.z + time * 0.07f;
			float y = Mathf.PerlinNoise(x / 0.2f, num / 0.2f) * 0.2f;
			val.y = y;
			noisePositions[i] = val;
		}
	}

	private Vector3 GetTargetPosition(int index)
	{
		//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_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_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)
		if (CurrentModel >= 0 && CurrentModel < ModelsList.Count)
		{
			return ModelsList[CurrentModel][index];
		}
		if (CurrentModel >= 0 && CurrentModel == ModelsList.Count)
		{
			return noisePositions[index];
		}
		return Vector3.zero;
	}

	private void HandleCollisionAndLerp(GameObject cube, Rigidbody rb, Vector3 targetPosition)
	{
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: Unknown result type (might be due to invalid IL or missing references)
		//IL_0189: 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_0165: Unknown result type (might be due to invalid IL or missing references)
		//IL_016a: 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_0173: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		//IL_012e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0209: Unknown result type (might be due to invalid IL or missing references)
		//IL_022a: Unknown result type (might be due to invalid IL or missing references)
		//IL_023a: Unknown result type (might be due to invalid IL or missing references)
		//IL_024f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0259: Unknown result type (might be due to invalid IL or missing references)
		rb.useGravity = false;
		rb.drag = 1f;
		rb.angularDrag = 1f;
		Collider component = cube.GetComponent<Collider>();
		Collider component2 = RhandCube.GetComponent<Collider>();
		Collider component3 = LhandCube.GetComponent<Collider>();
		bool flag = false;
		Bounds bounds = component.bounds;
		Vector3 val;
		if (((Bounds)(ref bounds)).Intersects(component2.bounds) && RightController.GetGrip() > 0.9f && RightController.GetTrigger() > 0.9f && Vector3.Distance(player.transform.position, MainParent.transform.position) <= 4f)
		{
			val = cube.transform.position - RhandCube.transform.position;
			ApplyForce(cube, rb, ((Vector3)(ref val)).normalized);
			flag = false;
		}
		else
		{
			bounds = component.bounds;
			if (((Bounds)(ref bounds)).Intersects(component3.bounds) && LeftController.GetGrip() > 0.9f && LeftController.GetTrigger() > 0.9f && Vector3.Distance(player.transform.position, MainParent.transform.position) <= 4f)
			{
				val = cube.transform.position - LhandCube.transform.position;
				ApplyForce(cube, rb, ((Vector3)(ref val)).normalized);
				flag = false;
			}
			else
			{
				val = rb.velocity;
				if (((Vector3)(ref val)).magnitude < 0.01f)
				{
					rb.isKinematic = true;
					flag = true;
				}
			}
		}
		if (flag)
		{
			cube.transform.localPosition = Vector3.Lerp(cube.transform.localPosition, targetPosition, Time.deltaTime);
		}
		if ((bool)Hologram.Settings[1].SavedValue)
		{
			cubeParent.transform.position = RhandTransform.position;
			cubeParent.transform.rotation = Quaternion.Euler(cubeParent.transform.rotation.x, RhandTransform.rotation.y, cubeParent.transform.rotation.z);
		}
	}

	private void ApplyForce(GameObject cube, Rigidbody rb, Vector3 direction)
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		rb.isKinematic = false;
		rb.AddForce(direction * 5f, (ForceMode)5);
	}
}