Decompiled source of BunkerLights v1.0.0

BunkerLights.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OtherLoader;
using UnityEngine;
using UnityEngine.UI;

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
public class DigitalClock : MonoBehaviour
{
	private Text textClock;

	private void Awake()
	{
		textClock = ((Component)this).GetComponent<Text>();
	}

	private void Update()
	{
		DateTime now = DateTime.Now;
		string text = LeadingZero(now.Hour);
		string text2 = LeadingZero(now.Minute);
		string text3 = LeadingZero(now.Second);
		textClock.text = text + ":" + text2 + ":" + text3;
	}

	private string LeadingZero(int n)
	{
		return n.ToString().PadLeft(2, '0');
	}
}
public class RandomPhoneRing : MonoBehaviour
{
	[Header("Phone Behavior")]
	public AudioSource audioSource;

	public List<AudioClip> ringClips;

	public List<AudioClip> speechClips;

	public AudioClip phoneTone;

	public float minRingInterval = 5f;

	public float maxRingInterval = 15f;

	public float ringDuration = 10f;

	public float speechStartDelay = 2f;

	public float ringCooldown = 20f;

	[Header("Blinking Light")]
	public GameObject lightObject;

	public float lightBlinkInterval = 0.5f;

	private bool isRinging = false;

	private bool isHeld = false;

	private bool isCooldown = false;

	private Coroutine ringCoroutine;

	private Coroutine blinkCoroutine;

	private void Start()
	{
		StartRandomRinging();
	}

	private void Update()
	{
		FVRPhysicalObject component = ((Component)this).GetComponent<FVRPhysicalObject>();
		if (!((Object)(object)component != (Object)null))
		{
			return;
		}
		bool flag = ((FVRInteractiveObject)component).IsHeld;
		if (flag != isHeld)
		{
			isHeld = flag;
			if (isHeld)
			{
				HandlePickup();
			}
			else
			{
				HandlePutDown();
			}
		}
	}

	private void HandlePickup()
	{
		if (isRinging)
		{
			StopRinging();
			((MonoBehaviour)this).StartCoroutine(PlaySpeechAfterDelay(speechStartDelay));
		}
		else if (!isRinging && (Object)(object)phoneTone != (Object)null)
		{
			PlayPhoneTone();
		}
	}

	private void HandlePutDown()
	{
		StopAudio();
		if (!isCooldown)
		{
			((MonoBehaviour)this).StartCoroutine(CooldownBeforeNextRing());
		}
	}

	private void StartRandomRinging()
	{
		if (ringCoroutine == null)
		{
			ringCoroutine = ((MonoBehaviour)this).StartCoroutine(RandomRingRoutine());
		}
	}

	private void StopRinging()
	{
		if (audioSource.isPlaying && isRinging)
		{
			audioSource.Stop();
		}
		if (blinkCoroutine != null)
		{
			((MonoBehaviour)this).StopCoroutine(blinkCoroutine);
			blinkCoroutine = null;
		}
		if ((Object)(object)lightObject != (Object)null)
		{
			lightObject.SetActive(false);
		}
		isRinging = false;
	}

	private IEnumerator RandomRingRoutine()
	{
		while (true)
		{
			float interval = Random.Range(minRingInterval, maxRingInterval);
			yield return (object)new WaitForSeconds(interval);
			if (!isHeld && !isCooldown && ringClips.Count > 0)
			{
				isRinging = true;
				audioSource.clip = ringClips[Random.Range(0, ringClips.Count)];
				audioSource.loop = true;
				audioSource.Play();
				if (blinkCoroutine == null)
				{
					blinkCoroutine = ((MonoBehaviour)this).StartCoroutine(BlinkLightRoutine());
				}
				yield return (object)new WaitForSeconds(ringDuration);
				if (isRinging)
				{
					StopRinging();
				}
				if (!isHeld)
				{
					((MonoBehaviour)this).StartCoroutine(CooldownBeforeNextRing());
				}
			}
		}
	}

	private IEnumerator BlinkLightRoutine()
	{
		while (true)
		{
			if ((Object)(object)lightObject != (Object)null)
			{
				lightObject.SetActive(!lightObject.activeSelf);
			}
			yield return (object)new WaitForSeconds(lightBlinkInterval);
		}
	}

	private IEnumerator PlaySpeechAfterDelay(float delay)
	{
		yield return (object)new WaitForSeconds(delay);
		if (isHeld && speechClips.Count > 0)
		{
			audioSource.loop = false;
			audioSource.clip = speechClips[Random.Range(0, speechClips.Count)];
			audioSource.Play();
		}
		((MonoBehaviour)this).StartCoroutine(CooldownBeforeNextRing());
	}

	private void PlayPhoneTone()
	{
		if ((Object)(object)phoneTone != (Object)null && !audioSource.isPlaying)
		{
			audioSource.loop = true;
			audioSource.clip = phoneTone;
			audioSource.Play();
		}
	}

	private void StopAudio()
	{
		if (audioSource.isPlaying)
		{
			audioSource.Stop();
		}
	}

	private IEnumerator CooldownBeforeNextRing()
	{
		isCooldown = true;
		yield return (object)new WaitForSeconds(ringCooldown);
		isCooldown = false;
		StartRandomRinging();
	}
}
public class PlateRackToggle : SteelPopTarget
{
	public List<HingeJoint> hingeJointsToToggle;

	public override void Start()
	{
		((SteelPopTarget)this).Start();
		bool useSpring = base.SpringSwitchJoint.useSpring;
		UpdateHingeJointsSpring(useSpring);
	}

	private void Update()
	{
		bool useSpring = base.SpringSwitchJoint.useSpring;
		UpdateHingeJointsSpring(useSpring);
	}

	private void UpdateHingeJointsSpring(bool springEnabled)
	{
		foreach (HingeJoint item in hingeJointsToToggle)
		{
			item.useSpring = springEnabled;
		}
	}
}
namespace Volks.BunkerLights;

[BepInPlugin("Volks.BunkerLights", "BunkerLights", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class BunkerLightsPlugin : BaseUnityPlugin
{
	private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

	internal static ManualLogSource Logger;

	private void Awake()
	{
		Logger = ((BaseUnityPlugin)this).Logger;
		LoadAssets();
	}

	private void LoadAssets()
	{
		Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "Volks.BunkerLights");
		OtherLoader.RegisterDirectLoad(BasePath, "Volks.BunkerLights", "", "", "bunkerlights", "");
	}
}
public class Semtex : PinnedGrenade
{
	[Header("Semtex Values")]
	public bool isSticky;

	public LayerMask stickyMask;

	[Header("Semtex Extras (Leave Empty If Not Needed)")]
	[Tooltip("If not null, will play audio clip placed inside of source. Used for a stick sound if you want.")]
	public AudioSource StickSource;

	public override void OnCollisionEnter(Collision collision)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		if (collision.gameObject.layer == LayerMask.op_Implicit(stickyMask) && !((FVRInteractiveObject)this).IsHeld)
		{
			((Component)this).transform.parent = collision.transform;
			((Component)this).GetComponent<Rigidbody>().isKinematic = true;
			if ((Object)(object)StickSource != (Object)null)
			{
				StickSource.Play();
			}
		}
		((PinnedGrenade)this).OnCollisionEnter(collision);
	}
}
public class Semtex_Updated : PinnedGrenade
{
	[Header("Semtex Values")]
	public bool isSticky;

	public LayerMask stickyMask;

	[Header("Semtex Extras (Leave Empty If Not Needed)")]
	[Tooltip("If not null, will play audio clip placed inside of source. Used for a stick sound if you want.")]
	public AudioSource StickSource;

	private float timeBeforeEnableStick = 0.1f;

	private bool canStick = false;

	private Transform fakeParent;

	private Vector3 pos;

	private Vector3 fw;

	private Vector3 up;

	public override void FVRUpdate()
	{
		if (base.m_isLeverReleased && !canStick)
		{
			timeBeforeEnableStick -= Time.deltaTime;
			if (timeBeforeEnableStick <= 0f)
			{
				canStick = true;
			}
		}
		((PinnedGrenade)this).FVRUpdate();
	}

	private void FixedUpdate()
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//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_0040: 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_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_0058: 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_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_0072: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)fakeParent != (Object)null)
		{
			Vector3 position = ((Component)fakeParent).transform.TransformPoint(pos);
			Vector3 val = ((Component)fakeParent).transform.TransformDirection(fw);
			Vector3 val2 = ((Component)fakeParent).transform.TransformDirection(up);
			Quaternion rotation = Quaternion.LookRotation(val, val2);
			((Component)this).transform.position = position;
			((Component)this).transform.rotation = rotation;
		}
	}

	public override void OnCollisionEnter(Collision collision)
	{
		//IL_0053: 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_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: Unknown result type (might be due to invalid IL or missing references)
		//IL_0095: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		((PinnedGrenade)this).OnCollisionEnter(collision);
		if (!((FVRInteractiveObject)this).IsHeld && canStick && (Object)(object)fakeParent == (Object)null)
		{
			fakeParent = collision.gameObject.transform;
			((Component)this).transform.position = ((ContactPoint)(ref collision.contacts[0])).point;
			((Component)this).transform.rotation = Quaternion.LookRotation(((ContactPoint)(ref collision.contacts[0])).normal);
			pos = ((Component)fakeParent).transform.InverseTransformPoint(((Component)this).transform.position);
			fw = ((Component)fakeParent).transform.InverseTransformDirection(((Component)this).transform.forward);
			up = ((Component)fakeParent).transform.InverseTransformDirection(((Component)this).transform.up);
			((Component)this).GetComponent<Rigidbody>().isKinematic = true;
			if ((Object)(object)StickSource != (Object)null)
			{
				StickSource.Play();
			}
		}
	}

	public override void BeginInteraction(FVRViveHand hand)
	{
		((PinnedGrenade)this).BeginInteraction(hand);
		fakeParent = null;
	}
}