Decompiled source of PoolRooms v0.1.24

BepInEx/Plugins/PoolRooms/PoolRoomsBehaviours.dll

Decompiled 11 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using GameNetcodeStuff;
using Microsoft.CodeAnalysis;
using PoolRoomsBehaviours.NetcodePatcher;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("PoolRoomsBehaviours")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Pool Rooms Behaviours")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+4adf9b450b8b4eabcda667061edaee9904920920")]
[assembly: AssemblyProduct("PoolRoomsBehaviours")]
[assembly: AssemblyTitle("PoolRoomsBehaviours")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
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;
		}
	}
}
namespace PoolRooms
{
	public class PoolLightBehaviour : MonoBehaviour
	{
		public Light LightToUpdate;

		public Color RedAlertColor = Color.red;

		public void OnApparatusPulled()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			LightToUpdate.color = RedAlertColor;
		}
	}
	public class PoolRoomsWaterBehaviour : MonoBehaviour
	{
		public static string BehaviorsVer = "6";

		public AudioSource SplashSound;

		public AudioSource WaterMovementSound;

		public ParticleSystem SplashParticles;

		public Vector3 LastPosition = Vector3.zero;

		public float NextSplashTime;

		public List<AudioClip> SplashSounds = new List<AudioClip>();

		private void Awake()
		{
			NextSplashTime = Time.unscaledTime;
			SplashSound.volume = 0f;
		}

		public AudioClip GetRandomSplashSound()
		{
			return SplashSounds[Random.Range(0, SplashSounds.Count)];
		}
	}
	public class PoolRoomsWaterTrigger : MonoBehaviour
	{
		public bool isWater;

		public int audioClipIndex;

		[Space(5f)]
		public bool sinkingLocalPlayer;

		public float movementHinderance = 1.6f;

		public float sinkingSpeedMultiplier = 0.15f;

		public Transform WaterSurface;

		public GameObject WaterBehaviourPrefab;

		private List<Transform> EnteredThingTransforms = new List<Transform>();

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

		private static string PoolRoomsWaterMovementTag = "PoolRoomsWaterMovement";

		private void OnDestroy()
		{
			foreach (GameObject item in WaterMovementsWeCreated)
			{
				if ((Object)(object)item != (Object)null)
				{
					Object.Destroy((Object)(object)item);
				}
			}
			WaterMovementsWeCreated.Clear();
		}

		public static PoolRoomsWaterBehaviour FindGameObjectChildWaterBehaviour(GameObject parent)
		{
			Transform transform = parent.transform;
			for (int i = 0; i < transform.childCount; i++)
			{
				PoolRoomsWaterBehaviour component = ((Component)transform.GetChild(i)).gameObject.GetComponent<PoolRoomsWaterBehaviour>();
				if (Object.op_Implicit((Object)(object)component))
				{
					return component;
				}
			}
			return null;
		}

		private static float FInterpTo(float Current, float Target, float DeltaTime, float InterpSpeed)
		{
			if (InterpSpeed <= 0f)
			{
				return Target;
			}
			float num = Target - Current;
			if (num * num < 1E-08f)
			{
				return Target;
			}
			float num2 = num * Mathf.Clamp(DeltaTime * InterpSpeed, 0f, 1f);
			return Current + num2;
		}

		private void Update()
		{
			//IL_003e: 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_0059: 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_0073: 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_0098: 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_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_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)
			List<Transform> list = new List<Transform>();
			foreach (Transform enteredThingTransform in EnteredThingTransforms)
			{
				PoolRoomsWaterBehaviour poolRoomsWaterBehaviour = FindGameObjectChildWaterBehaviour(((Component)enteredThingTransform).gameObject);
				if (!((Object)(object)poolRoomsWaterBehaviour != (Object)null))
				{
					continue;
				}
				((Component)poolRoomsWaterBehaviour).transform.position = new Vector3(enteredThingTransform.position.x, WaterSurface.position.y, enteredThingTransform.position.z);
				bool flag = Mathf.Abs(WaterSurface.position.y - enteredThingTransform.position.y) > 1.1f;
				Vector3 val = poolRoomsWaterBehaviour.LastPosition - enteredThingTransform.position;
				float magnitude = ((Vector3)(ref val)).magnitude;
				if (magnitude > 5f)
				{
					list.Add(enteredThingTransform);
					continue;
				}
				bool flag2 = magnitude > 0.04f * Time.deltaTime;
				poolRoomsWaterBehaviour.LastPosition = enteredThingTransform.position;
				float volume = poolRoomsWaterBehaviour.WaterMovementSound.volume;
				volume = FInterpTo(volume, (!flag2) ? 0f : (flag ? 0.3f : 1f), Time.deltaTime, 2f);
				poolRoomsWaterBehaviour.WaterMovementSound.volume = volume;
				if (!flag2)
				{
					poolRoomsWaterBehaviour.NextSplashTime = Time.unscaledTime + 0.5f;
				}
				else if (poolRoomsWaterBehaviour.NextSplashTime <= Time.unscaledTime)
				{
					poolRoomsWaterBehaviour.NextSplashTime = Time.unscaledTime + ((magnitude > 0.1f) ? 0.3f : 0.5f);
					poolRoomsWaterBehaviour.SplashParticles.Play();
					poolRoomsWaterBehaviour.SplashSound.clip = poolRoomsWaterBehaviour.GetRandomSplashSound();
					poolRoomsWaterBehaviour.SplashSound.volume = ((magnitude > 0.1f) ? 0.15f : 0.05f);
					poolRoomsWaterBehaviour.SplashSound.Play();
				}
			}
			foreach (Transform item in list)
			{
				EnteredThingTransforms.Remove(item);
				PoolRoomsWaterBehaviour poolRoomsWaterBehaviour2 = FindGameObjectChildWaterBehaviour(((Component)item).gameObject);
				if ((Object)(object)poolRoomsWaterBehaviour2 != (Object)null)
				{
					poolRoomsWaterBehaviour2.WaterMovementSound.Stop();
				}
			}
		}

		private void OnTriggerEnter(Collider other)
		{
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: 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)
			if (!isWater || !((Component)other).gameObject.CompareTag("Player"))
			{
				return;
			}
			PlayerControllerB component = ((Component)other).gameObject.GetComponent<PlayerControllerB>();
			if ((Object)(object)component != (Object)null)
			{
				EnteredThingTransforms.Add(((Component)component).transform);
				PoolRoomsWaterBehaviour poolRoomsWaterBehaviour = FindGameObjectChildWaterBehaviour(((Component)component).gameObject);
				if ((Object)(object)poolRoomsWaterBehaviour == (Object)null)
				{
					MonoBehaviour.print((object)"Creating new WaterBehaviourPrefab");
					GameObject obj = Object.Instantiate<GameObject>(WaterBehaviourPrefab, new Vector3(0f, 0f, 0f), Quaternion.Euler(-90f, 0f, 0f));
					obj.transform.parent = ((Component)component).transform;
					obj.transform.localPosition = Vector3.zero;
					obj.transform.localRotation = Quaternion.Euler(-90f, 0f, 0f);
					poolRoomsWaterBehaviour = obj.GetComponent<PoolRoomsWaterBehaviour>();
				}
				poolRoomsWaterBehaviour.LastPosition = ((Component)component).transform.position;
				poolRoomsWaterBehaviour.WaterMovementSound.Play();
				poolRoomsWaterBehaviour.WaterMovementSound.volume = 0f;
			}
		}

		public void OnLocalPlayerTeleported(PlayerControllerB player)
		{
			if ((Object)(object)player != (Object)null)
			{
				EnteredThingTransforms.Remove(((Component)player).transform);
				PoolRoomsWaterBehaviour poolRoomsWaterBehaviour = FindGameObjectChildWaterBehaviour(((Component)player).gameObject);
				if ((Object)(object)poolRoomsWaterBehaviour != (Object)null)
				{
					poolRoomsWaterBehaviour.WaterMovementSound.Stop();
				}
			}
		}

		private void OnTriggerExit(Collider other)
		{
			if (!isWater || !((Component)other).gameObject.CompareTag("Player"))
			{
				return;
			}
			PlayerControllerB component = ((Component)other).gameObject.GetComponent<PlayerControllerB>();
			if ((Object)(object)component != (Object)null)
			{
				EnteredThingTransforms.Remove(((Component)component).transform);
				PoolRoomsWaterBehaviour poolRoomsWaterBehaviour = FindGameObjectChildWaterBehaviour(((Component)component).gameObject);
				if ((Object)(object)poolRoomsWaterBehaviour != (Object)null)
				{
					poolRoomsWaterBehaviour.WaterMovementSound.Stop();
				}
			}
		}
	}
}
namespace PoolRoomsBehaviours.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}