Decompiled source of Tolian Interiors v1.0.3
TolianInterior/HadalLab/EndCape.dll
Decompiled 2 weeks agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using DunGen; using Microsoft.CodeAnalysis; using UnityEngine; [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("EndCape")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("A template for Lethal Company")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("EndCape")] [assembly: AssemblyTitle("EndCape")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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 EndCape { public static class PluginInfo { public const string PLUGIN_GUID = "EndCape"; public const string PLUGIN_NAME = "EndCape"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace EndCapeScript { public class EndCapSpawner : MonoBehaviour, IDungeonCompleteReceiver { [Serializable] public class EndCapOption { public Collider[] placementColliders; public GameObject prefab; } private static Collider[] hits = (Collider[])(object)new Collider[50]; public Tile parentTile; public EndCapOption[] options; public GameObject fallback; private Span<Collider> CheckCollider(Collider collider) { //IL_001a: 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) //IL_0035: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_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_0079: 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_00cb: Unknown result type (might be due to invalid IL or missing references) CapsuleCollider val = (CapsuleCollider)(object)((collider is CapsuleCollider) ? collider : null); if (val != null) { Vector3 val2 = ((Component)this).transform.position + new Vector3(0f, val.height / 2f) + val.center; Vector3 val3 = ((Component)this).transform.position - new Vector3(0f, val.height / 2f) + val.center; int num = Physics.OverlapCapsuleNonAlloc(val2, val3, val.radius, hits, 256, (QueryTriggerInteraction)1); return hits[..num]; } SphereCollider val4 = (SphereCollider)(object)((collider is SphereCollider) ? collider : null); if (val4 != null) { int num2 = Physics.OverlapSphereNonAlloc(((Component)this).transform.position, val4.radius, hits, 256, (QueryTriggerInteraction)1); return hits[..num2]; } return Span<Collider>.Empty; } private bool ShouldCollidersBlockPlacement(Span<Collider> colliders) { Span<Collider> span = colliders; for (int i = 0; i < span.Length; i++) { Collider val = span[i]; if (!((Object)(object)((Component)val).GetComponentInParent<Tile>() == (Object)(object)parentTile)) { return true; } } return false; } public void OnDungeonComplete(Dungeon dungeon) { EndCapOption[] array = options; foreach (EndCapOption endCapOption in array) { bool flag = true; Collider[] placementColliders = endCapOption.placementColliders; foreach (Collider collider in placementColliders) { Span<Collider> colliders = CheckCollider(collider); if (ShouldCollidersBlockPlacement(colliders)) { flag = false; break; } } if (flag) { SpawnPrefab(endCapOption.prefab); return; } } SpawnPrefab(fallback); } private void SpawnPrefab(GameObject prefab) { //IL_0014: 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) GameObject val = Object.Instantiate<GameObject>(prefab, ((Component)this).transform); val.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); } } }
TolianInterior/HadalLab/TolianWaterSystem.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.IO.Compression; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading; using System.Threading.Tasks; using BepInEx; using Microsoft.CodeAnalysis; using Unity.Collections; using UnityEditor; using UnityEngine; using UnityEngine.Experimental.Rendering; using UnityEngine.Rendering; using UnityEngine.Rendering.HighDefinition; using UnityEngine.Video; [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("TolianWaterSystem")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("A template for Lethal Company")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+646ca23083ece7cd6b0810d9c33b0fdcd17eeab1")] [assembly: AssemblyProduct("TolianWaterSystem")] [assembly: AssemblyTitle("TolianWaterSystem")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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; } } } public class FFT_CPU : MonoBehaviour { public enum SizeSetting { Size_32 = 0x20, Size_64 = 0x40, Size_128 = 0x80 } public class OutputFFTData { public Color[] OutputPixels; } public bool IsDetailed; public SizeSetting Size = SizeSetting.Size_64; [Range(0f, 1f)] public float WindDirection = 0.3f; [Range(0.2f, 10f)] public float WindSpeed = 5f; [Range(0.25f, 1.5f)] public float Choppines = 0.85f; [Range(1f, 100f)] public float WaterScale = 10f; [Range(0f, 2f)] public float TimeScale = 1f; public Texture2D DisplaceTexture; public RenderTexture NormalTexture; public Material WaterMaterial; private const float DomainSize = 20f; private float prevWindDirection; private float prevWindSpeed; private int prevSize; private FFT_CPU_Spectrum spectrumCpu; private OutputFFTData outputFftData; private FFT_CPU_Simulation fftCpu1; private FFT_CPU_Simulation fftCpu2; private FFT_CPU_Simulation fftCpu3; private Vector2[] butterflyRawData; private Material normalComputeMaterial; private Thread t0; private Thread t1; private Thread t2; private Thread t3; private float currentTime; private bool canUpdate = true; private bool isDoneComputeFFT_1; private bool isDoneComputeFFT_2; private bool isDoneComputeFFT_3; private AutoResetEvent[] startHandle; private void InitializeResources() { //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Expected O, but got Unknown //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Expected O, but got Unknown //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Expected O, but got Unknown isDoneComputeFFT_1 = false; isDoneComputeFFT_2 = false; isDoneComputeFFT_3 = false; canUpdate = true; outputFftData = new OutputFFTData(); fftCpu1 = new FFT_CPU_Simulation((int)Size, outputFftData); fftCpu2 = new FFT_CPU_Simulation((int)Size, outputFftData); fftCpu3 = new FFT_CPU_Simulation((int)Size, outputFftData); prevSize = (int)Size; prevWindDirection = WindDirection; prevWindSpeed = WindSpeed; normalComputeMaterial = new Material(WaterShadersSingleton.Instance.ComputeNormalShader); if ((Object)(object)NormalTexture != (Object)null) { NormalTexture.Release(); } NormalTexture = new RenderTexture((int)Size, (int)Size, 0, (RenderTextureFormat)2, (RenderTextureReadWrite)1); ((Texture)NormalTexture).filterMode = (FilterMode)1; ((Texture)NormalTexture).wrapMode = (TextureWrapMode)0; if ((Object)(object)DisplaceTexture != (Object)null) { Object.DestroyImmediate((Object)(object)DisplaceTexture); } DisplaceTexture = new Texture2D((int)Size, (int)Size, (TextureFormat)17, false, true); InitializeButterfly((int)Size); spectrumCpu = new FFT_CPU_Spectrum((int)Size); spectrumCpu.InitializeSpectrum(20f, WindSpeed, WindDirection, (int)Size); if (startHandle == null) { startHandle = new AutoResetEvent[4]; startHandle[0] = new AutoResetEvent(initialState: true); startHandle[1] = new AutoResetEvent(initialState: false); startHandle[2] = new AutoResetEvent(initialState: false); startHandle[3] = new AutoResetEvent(initialState: false); } } private void InitializeButterfly(int size) { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: 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_00ab: Unknown result type (might be due to invalid IL or missing references) int num = Mathf.RoundToInt(Mathf.Log((float)size, 2f)); butterflyRawData = (Vector2[])(object)new Vector2[size * num]; int num2 = 1; int num3 = size >> 1; for (int i = 0; i < num; i++) { int num4 = i * size; int num5 = 0; int num6 = 2 * num2; for (int j = 0; j < num3; j++) { float num7 = 0f; for (int k = num5; k < num6; k += 2) { float num8 = MathF.PI * 2f * num7 * (float)num3 / (float)size; float num9 = Mathf.Cos(num8); float num10 = Mathf.Sin(num8); butterflyRawData[num4 + k / 2] = new Vector2(num9, 0f - num10); butterflyRawData[num4 + k / 2 + num2] = new Vector2(0f - num9, num10); num7 += 1f; } num5 += 4 * num2; num6 = num5 + 2 * num2; } num3 >>= 1; num2 <<= 1; } } private void StartThreads() { if (startHandle != null) { startHandle[0].Set(); } if (t0 == null) { t0 = new Thread(thread0); t0.Start(); } if (t1 == null) { t1 = new Thread(thread1); t1.Start(); } if (t2 == null) { t2 = new Thread(thread2); t2.Start(); } if (t3 == null) { t3 = new Thread(thread3); t3.Start(); } } private void RestartCompute() { ReleaseAll(); InitializeResources(); StartThreads(); } private void ReleaseAll() { canUpdate = false; if (t0 != null) { t0.Abort(); } t0 = null; if (t1 != null) { t1.Abort(); } t1 = null; if (t2 != null) { t2.Abort(); } t2 = null; if (t3 != null) { t3.Abort(); } t3 = null; if ((Object)(object)DisplaceTexture != (Object)null) { Object.DestroyImmediate((Object)(object)DisplaceTexture); } if ((Object)(object)NormalTexture != (Object)null) { NormalTexture.Release(); } if (IsDetailed) { Shader.DisableKeyword("KW_DETAIL_FFT"); } } private void thread0() { while (canUpdate) { startHandle[0].WaitOne(); isDoneComputeFFT_1 = false; isDoneComputeFFT_2 = false; isDoneComputeFFT_3 = false; spectrumCpu.GetUpdatedSpectrum(currentTime, (int)Size); startHandle[1].Set(); startHandle[2].Set(); startHandle[3].Set(); } } private void thread1() { while (canUpdate) { startHandle[1].WaitOne(); fftCpu1.Compute(spectrumCpu.ResultDisplaceZ, butterflyRawData, 0, (int)Size); isDoneComputeFFT_1 = true; } } private void thread2() { while (canUpdate) { startHandle[2].WaitOne(); fftCpu2.Compute(spectrumCpu.ResultHeight, butterflyRawData, 1, (int)Size); isDoneComputeFFT_2 = true; } } private void thread3() { while (canUpdate) { startHandle[3].WaitOne(); fftCpu3.Compute(spectrumCpu.ResultDisplaceX, butterflyRawData, 2, (int)Size); isDoneComputeFFT_3 = true; } } private void ReadThreadsData() { if (isDoneComputeFFT_1 && isDoneComputeFFT_2 && isDoneComputeFFT_3) { DisplaceTexture.SetPixels(outputFftData.OutputPixels); DisplaceTexture.Apply(); normalComputeMaterial.SetTexture("_DispTex", (Texture)(object)DisplaceTexture); int num = Mathf.RoundToInt(Mathf.Log((float)Size, 2f)) - 4; normalComputeMaterial.SetFloat("_SizeLog", (float)num); normalComputeMaterial.SetFloat("_Choppines", Choppines); normalComputeMaterial.SetFloat("_WindSpeed", WindSpeed); NormalTexture.DiscardContents(); RenderTexture active = RenderTexture.active; if (!Application.isPlaying) { RenderTexture.active = null; } Graphics.Blit((Texture)null, NormalTexture, normalComputeMaterial); if (!Application.isPlaying) { RenderTexture.active = active; } startHandle[0].Set(); } } private void UpdateFFT() { //IL_043e: Unknown result type (might be due to invalid IL or missing references) //IL_043f: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Unknown result type (might be due to invalid IL or missing references) //IL_0426: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_0266: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) if (prevSize != (int)Size) { prevSize = (int)Size; RestartCompute(); } else if (Mathf.Abs(prevWindDirection - WindDirection) > 0.001f || Mathf.Abs(prevWindSpeed - WindSpeed) > 0.01f) { prevWindDirection = WindDirection; prevWindSpeed = WindSpeed; spectrumCpu.InitializeSpectrum(20f, WindSpeed, WindDirection, (int)Size); } currentTime += Time.deltaTime * Mathf.Lerp(TimeScale, TimeScale * 0.5f, WaterScale / 100f); ReadThreadsData(); Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(WaterScale * Choppines / 20f, 1f, WaterScale * Choppines / 20f); if (!IsDetailed) { if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalTexture("KW_DispTex", (Texture)(object)DisplaceTexture); } else { WaterMaterial.SetTexture("KW_DispTex", (Texture)(object)DisplaceTexture); } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalTexture("KW_NormTex", (Texture)(object)NormalTexture); } else { WaterMaterial.SetTexture("KW_NormTex", (Texture)(object)NormalTexture); } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalFloat("KW_WindSpeed", WindSpeed); } else { WaterMaterial.SetFloat("KW_WindSpeed", WindSpeed); } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalFloat("KW_Choppines", Choppines); } else { WaterMaterial.SetFloat("KW_Choppines", Choppines); } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalFloat("KW_FFTScale", WaterScale); } else { WaterMaterial.SetFloat("KW_FFTScale", WaterScale); } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalVector("KW_DisplaceScale", Vector4.op_Implicit(val)); } else { WaterMaterial.SetVector("KW_DisplaceScale", Vector4.op_Implicit(val)); } int num = Mathf.RoundToInt(Mathf.Log((float)Size, 2f)) - 5; if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalFloat("KW_NormalLod", (float)num); } else { WaterMaterial.SetFloat("KW_NormalLod", (float)num); } return; } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalTexture("KW_DispTexDetail", (Texture)(object)DisplaceTexture); } else { WaterMaterial.SetTexture("KW_DispTexDetail", (Texture)(object)DisplaceTexture); } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalTexture("KW_NormTexDetail", (Texture)(object)NormalTexture); } else { WaterMaterial.SetTexture("KW_NormTexDetail", (Texture)(object)NormalTexture); } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalFloat("KW_WindSpeedDetail", WindSpeed); } else { WaterMaterial.SetFloat("KW_WindSpeedDetail", WindSpeed); } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalFloat("KW_ChoppinesDetail", Choppines); } else { WaterMaterial.SetFloat("KW_ChoppinesDetail", Choppines); } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalFloat("KW_FFTScaleDetail", WaterScale); } else { WaterMaterial.SetFloat("KW_FFTScaleDetail", WaterScale); } if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalVector("KW_DisplaceScaleDetail", Vector4.op_Implicit(val)); } else { WaterMaterial.SetVector("KW_DisplaceScaleDetail", Vector4.op_Implicit(val)); } int num2 = Mathf.RoundToInt(Mathf.Log((float)Size, 2f)) - 5; if ((Object)(object)WaterMaterial == (Object)null) { Shader.SetGlobalFloat("KW_NormalLodDetail", (float)num2); } else { WaterMaterial.SetFloat("KW_NormalLodDetail", (float)num2); } Shader.EnableKeyword("KW_DETAIL_FFT"); } private void OnEnable() { RestartCompute(); } private void OnDisable() { ReleaseAll(); } private void OnDestroy() { ReleaseAll(); } private void Update() { UpdateFFT(); } } public class FFT_CPU_Simulation { private struct ButterflyHashProperties { public int x; public int y; public bool pingPong; public int index; public ButterflyHashProperties(int X, int Y, bool Pingpong, int Index) { x = X; y = Y; pingPong = Pingpong; index = Index; } } private Vector2[] input_H; private Vector2[] complex_H; private Vector2[] intermediates_H; private Vector2[] scratch_H; private Vector2[] inpButt; private bool firstThreadDone; private bool secondThreadDone; private int passes; private int size; private ButterflyHashProperties[,] hashFunction; private FFT_CPU.OutputFFTData currentBuffer; public FFT_CPU_Simulation(int Size, FFT_CPU.OutputFFTData outputFftData) { currentBuffer = outputFftData; Initialize(Size); } private void Initialize(int Size) { size = Size; passes = Mathf.RoundToInt(Mathf.Log((float)size, 2f)); intermediates_H = (Vector2[])(object)new Vector2[size]; scratch_H = (Vector2[])(object)new Vector2[size]; complex_H = (Vector2[])(object)new Vector2[size * size]; hashFunction = new ButterflyHashProperties[size, passes]; for (int i = 0; i < size; i++) { for (int j = 0; j < passes; j++) { hashFunction[i, j] = ButteflyHashFunction(i, j); } } if (currentBuffer.OutputPixels == null || currentBuffer.OutputPixels.Length != size * size) { currentBuffer.OutputPixels = (Color[])(object)new Color[size * size]; } } public void Compute(Vector2[] inpHeight, Vector2[] inpButterfly, int colorChannel, int currentSize) { if (currentSize != size) { Initialize(currentSize); } input_H = inpHeight; inpButt = inpButterfly; FFT_H(); FFT_V(colorChannel); } private void FFT_H() { bool flag = passes % 2 == 0; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { int num = i * size + j; intermediates_H[j].x = input_H[num].x; intermediates_H[j].y = 0f - input_H[num].y; } for (int k = 0; k < passes; k++) { for (int l = 0; l < size; l++) { ButterflyHashProperties butterflyHashProperties = hashFunction[l, k]; if (butterflyHashProperties.pingPong) { scratch_H[l].x = inpButt[butterflyHashProperties.index].x * intermediates_H[butterflyHashProperties.y].x - inpButt[butterflyHashProperties.index].y * intermediates_H[butterflyHashProperties.y].y + intermediates_H[butterflyHashProperties.x].x; scratch_H[l].y = inpButt[butterflyHashProperties.index].y * intermediates_H[butterflyHashProperties.y].x + inpButt[butterflyHashProperties.index].x * intermediates_H[butterflyHashProperties.y].y + intermediates_H[butterflyHashProperties.x].y; } else { intermediates_H[l].x = inpButt[butterflyHashProperties.index].x * scratch_H[butterflyHashProperties.y].x - inpButt[butterflyHashProperties.index].y * scratch_H[butterflyHashProperties.y].y + scratch_H[butterflyHashProperties.x].x; intermediates_H[l].y = inpButt[butterflyHashProperties.index].y * scratch_H[butterflyHashProperties.y].x + inpButt[butterflyHashProperties.index].x * scratch_H[butterflyHashProperties.y].y + scratch_H[butterflyHashProperties.x].y; } } } for (int m = 0; m < size; m++) { int num = i * size + m; if (flag) { complex_H[num].x = intermediates_H[m].x; complex_H[num].y = intermediates_H[m].y; } else { complex_H[num].x = scratch_H[m].x; complex_H[num].y = scratch_H[m].y; } } } } private void FFT_V(int colorChannel) { //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_02f0: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: Unknown result type (might be due to invalid IL or missing references) //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Unknown result type (might be due to invalid IL or missing references) bool flag = passes % 2 == 0; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { intermediates_H[j] = complex_H[j * size + i]; } for (int k = 0; k < passes; k++) { for (int l = 0; l < size; l++) { ButterflyHashProperties butterflyHashProperties = hashFunction[l, k]; if (butterflyHashProperties.pingPong) { scratch_H[l].x = inpButt[butterflyHashProperties.index].x * intermediates_H[butterflyHashProperties.y].x - inpButt[butterflyHashProperties.index].y * intermediates_H[butterflyHashProperties.y].y + intermediates_H[butterflyHashProperties.x].x; scratch_H[l].y = inpButt[butterflyHashProperties.index].y * intermediates_H[butterflyHashProperties.y].x + inpButt[butterflyHashProperties.index].x * intermediates_H[butterflyHashProperties.y].y + intermediates_H[butterflyHashProperties.x].y; } else { intermediates_H[l].x = inpButt[butterflyHashProperties.index].x * scratch_H[butterflyHashProperties.y].x - inpButt[butterflyHashProperties.index].y * scratch_H[butterflyHashProperties.y].y + scratch_H[butterflyHashProperties.x].x; intermediates_H[l].y = inpButt[butterflyHashProperties.index].y * scratch_H[butterflyHashProperties.y].x + inpButt[butterflyHashProperties.index].x * scratch_H[butterflyHashProperties.y].y + scratch_H[butterflyHashProperties.x].y; } } } for (int m = 0; m < size; m++) { Vector2 val = (flag ? intermediates_H[m] : scratch_H[m]); float num = (((i + m) % 2 == 1) ? (-1f) : 1f); switch (colorChannel) { case 0: currentBuffer.OutputPixels[m * size + i].r = num * val.x; break; case 1: currentBuffer.OutputPixels[m * size + i].g = num * val.x; break; case 2: currentBuffer.OutputPixels[m * size + i].b = num * val.x; break; } } } } private ButterflyHashProperties ButteflyHashFunction(int coord, int passIndex) { int num = 1 << passIndex; int num2; int num3; if (coord / num % 2 == 1) { num2 = coord - num; num3 = coord; } else { num2 = coord; num3 = coord + num; } if (passIndex == 0) { num2 = (int)(Reverse(num2) >> 32 - passes); num3 = (int)(Reverse(num3) >> 32 - passes); } bool pingpong = passIndex % 2 == 0; int index = coord + passIndex * size; return new ButterflyHashProperties(num2, num3, pingpong, index); } private uint Reverse(int x1) { uint num = (uint)x1; uint num2 = 0u; for (int i = 0; i < 32; i++) { num2 <<= 1; num2 |= num & 1u; num >>= 1; } return num2; } } public class FFT_CPU_Spectrum { private struct UpdateSpectrumHashProperties { public float k_x; public float k_y; public float w; public int index; } private UpdateSpectrumHashProperties[,] hashFunc; private float[] sinHash; private float[] cosHash; private Vector4[] initColors; public Vector2[] ResultHeight; public Vector2[] ResultDisplaceX; public Vector2[] ResultDisplaceZ; private float INVPI2 = 2f / MathF.PI; private float HPI = MathF.PI / 2f; private float PI2 = MathF.PI * 2f; private float PI4 = 0.33661976f; private int rngState; private const float Gravity = 9.81f; private int size; private UpdateSpectrumHashProperties hash; private float scaledTime; private int index; private float hX; private float hY; private float sw; private float cw; public FFT_CPU_Spectrum(int Size) { Initialize(Size); } private void Initialize(int Size) { size = Size; sinHash = new float[6284]; cosHash = new float[6284]; for (int i = 0; i < 6284; i++) { sinHash[i] = Mathf.Sin((float)i / 100f); cosHash[i] = Mathf.Cos((float)i / 100f); } initColors = (Vector4[])(object)new Vector4[size * size]; ResultHeight = (Vector2[])(object)new Vector2[size * size]; ResultDisplaceX = (Vector2[])(object)new Vector2[size * size]; ResultDisplaceZ = (Vector2[])(object)new Vector2[size * size]; } public void InitializeSpectrum(float domainSize, float windSpeed, float direction, int currentSize) { //IL_0076: 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_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) if (size != currentSize) { Initialize(currentSize); } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { int num = size / 2; int num2 = i - num; int num3 = j - num; if (num2 != 0 || num3 != 0) { float num4 = PI2 * (float)num2 / domainSize; float num5 = PI2 * (float)num3 / domainSize; Vector2 val = new Vector2(num4, num5); float magnitude = ((Vector2)(ref val)).magnitude; rngState = WangHash(j * size + i); float num6 = Mathf.Sqrt(Mathf.Abs(9.81f * magnitude)); float num7 = 9.81f / (2f * num6); float num8 = PiersonMoskowitzSpectrum(num6, windSpeed); float num9 = num8; float num10 = num8; float num11 = PI2 / domainSize; float theta = Mathf.Atan2(0f - num5, num4); float theta2 = Mathf.Atan2(num5, 0f - num4); num9 *= PosCosSquaredDirectionalSpreading(theta, direction); num10 *= PosCosSquaredDirectionalSpreading(theta2, direction); num9 *= num11 * num11 * num7 / magnitude; num10 *= num11 * num11 * num7 / magnitude; float num12 = RandGauss() * Mathf.Sqrt(Mathf.Abs(num9) * 2f); float num13 = RandGauss() * Mathf.Sqrt(Mathf.Abs(num10) * 2f); float num14 = RandFloat() * PI2; float num15 = RandFloat() * PI2; float num16 = num12 * Mathf.Cos(num14); float num17 = num12 * (0f - Mathf.Sin(num14)); float num18 = num13 * Mathf.Cos(num15); float num19 = num13 * (0f - Mathf.Sin(num15)); initColors[j * size + i] = new Vector4(num16, num17, num18, num19); } } } hashFunc = new UpdateSpectrumHashProperties[size, size]; for (int k = 0; k < size; k++) { for (int l = 0; l < size; l++) { hashFunc[k, l] = UpdateHashFunc(k, l, domainSize); } } } public void GetUpdatedSpectrum(float time, int currentSize) { scaledTime = time / 10f; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { hash = hashFunc[i, j]; index = (int)(hash.w * scaledTime % PI2 * 1000f); sw = sinHash[index]; cw = cosHash[index]; index = hash.index; hX = initColors[index].x * cw - initColors[index].y * (0f - sw) + initColors[index].z * cw - initColors[index].w * sw; hY = initColors[index].x * (0f - sw) + initColors[index].y * cw + initColors[index].z * sw + initColors[index].w * cw; ResultHeight[index].x = hX; ResultHeight[index].y = hY; ResultDisplaceX[index].x = (0f - hY) * hash.k_x; ResultDisplaceX[index].y = hX * hash.k_x; ResultDisplaceZ[index].x = (0f - hY) * hash.k_y; ResultDisplaceZ[index].y = hX * hash.k_y; } } } private int WangHash(int seed) { seed = seed ^ 0x3D ^ (seed >> 16); seed *= 9; seed ^= seed >> 4; seed *= 668265261; seed ^= seed >> 15; return seed; } private int Rand() { rngState ^= rngState << 13; rngState ^= rngState >> 17; rngState ^= rngState << 5; return Mathf.Abs(rngState); } private float RandFloat() { return (float)Rand() / 4.2949673E+09f; } private float RandGauss() { float num = RandFloat(); float num2 = RandFloat(); if (num < 1E-06f) { num = 1E-06f; } return Mathf.Sqrt(-2f * Mathf.Log(num)) * Mathf.Cos(PI2 * num2); } private float PiersonMoskowitzSpectrum(float w, float windSpeed) { float wm = 8.5347f / windSpeed; return AlphaBetaSpectrum(0.0081f, 1.291f, 9.81f, w, wm); } private float AlphaBetaSpectrum(float A, float B, float g, float w, float wm) { return A * g * g / Mathf.Pow(w, 5f) * Mathf.Exp((0f - B) * Mathf.Pow(wm / w, 4f)); } private float PosCosSquaredDirectionalSpreading(float theta, float direction) { if (theta > 0f - HPI && theta < HPI) { float num = Mathf.Cos(theta); return INVPI2 * (num * num) * (1f - direction) + PI4 * direction; } return PI4 * direction; } private UpdateSpectrumHashProperties UpdateHashFunc(int x, int y, float domainSize) { int num = size / 2; int num2 = x - num; int num3 = y - num; float num4 = PI2 * (float)num2 / domainSize; float num5 = PI2 * (float)num3 / domainSize; float num6 = Mathf.Sqrt(num4 * num4 + num5 * num5); float w = Mathf.Sqrt(Mathf.Abs(9.81f * num6)); num6 += 1E-05f; num4 /= num6; num5 /= num6; int num7 = x * size + y; UpdateSpectrumHashProperties result = default(UpdateSpectrumHashProperties); result.index = num7; result.k_x = num4; result.k_y = num5; result.w = w; return result; } } public class FFT_GPU : MonoBehaviour { public enum SizeSetting { Size_32 = 0x20, Size_64 = 0x40, Size_128 = 0x80, Size_256 = 0x100, Size_512 = 0x200 } public enum LodPrefix { LOD0, LOD1, LOD2 } public RenderTexture DisplaceTexture; public RenderTexture NormalTexture; private RenderTexture spectrumInitRenderTexture; private RenderTexture spectrumHeight; private RenderTexture spectrumDisplaceX; private RenderTexture spectrumDisplaceZ; private RenderTexture fftTemp1; private RenderTexture fftTemp2; private RenderTexture fftTemp3; private Material normalComputeMaterial; private ComputeShader spectrumShader; private ComputeShader shaderFFT; private Texture2D texButterfly; private float prevWindTurbulence; private float prevWindSpeed; private float prevWindRotation; private float currentHeightDataDomainScale; private int kernelSpectrumInit; private int kernelSpectrumUpdate; private Color[] butterflyColors; private bool isInitialized = false; private int ID_DispTex = Shader.PropertyToID("KW_DispTex"); private int ID_DispTex1 = Shader.PropertyToID("KW_DispTex_LOD1"); private int ID_DispTex2 = Shader.PropertyToID("KW_DispTex_LOD2"); private int ID_NormTex = Shader.PropertyToID("KW_NormTex"); private int ID_LeanTex = Shader.PropertyToID("KW_LeanTex"); private int ID_NormTex1 = Shader.PropertyToID("KW_NormTex_LOD1"); private int ID_NormTex2 = Shader.PropertyToID("KW_NormTex_LOD2"); private int ID_MipCount = Shader.PropertyToID("KW_NormMipCount"); private int ID_MipCount1 = Shader.PropertyToID("KW_NormMipCount_LOD1"); private int ID_MipCount2 = Shader.PropertyToID("KW_NormMipCount_LOD2"); private int ID_FFTDomainSize = Shader.PropertyToID("KW_FFTDomainSize"); private int ID_FFTDomainSize1 = Shader.PropertyToID("KW_FFTDomainSize_LOD1"); private int ID_FFTDomainSize2 = Shader.PropertyToID("KW_FFTDomainSize_LOD2"); private int ID_NormalLod = Shader.PropertyToID("KW_NormalLod"); public void Release() { KW_Extensions.SafeDestroy((Object)spectrumShader, (Object)shaderFFT, (Object)texButterfly, (Object)normalComputeMaterial); KW_Extensions.ReleaseRenderTextures(spectrumInitRenderTexture, spectrumHeight, spectrumDisplaceX, spectrumDisplaceZ, fftTemp1, fftTemp2, fftTemp3, DisplaceTexture, NormalTexture); prevWindTurbulence = -1f; prevWindSpeed = -1f; prevWindRotation = -1f; isInitialized = false; } private void InitializeResources(int size, int anisoLevel) { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Expected O, but got Unknown //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Expected O, but got Unknown //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Expected O, but got Unknown //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Expected O, but got Unknown //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Expected O, but got Unknown //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Expected O, but got Unknown //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Expected O, but got Unknown //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Expected O, but got Unknown Release(); spectrumShader = Object.Instantiate<ComputeShader>(WaterShadersSingleton.Instance.SpectrumGPUComputeShader); kernelSpectrumInit = spectrumShader.FindKernel("SpectrumInitalize"); kernelSpectrumUpdate = spectrumShader.FindKernel("SpectrumUpdate"); shaderFFT = Object.Instantiate<ComputeShader>(WaterShadersSingleton.Instance.FFTComputeShader); normalComputeMaterial = new Material(WaterShadersSingleton.Instance.ComputeNormalShader); texButterfly = new Texture2D(size, Mathf.RoundToInt(Mathf.Log((float)size, 2f)), (TextureFormat)20, false, true); spectrumInitRenderTexture = new RenderTexture(size, size, 0, (RenderTextureFormat)11, (RenderTextureReadWrite)1); spectrumInitRenderTexture.enableRandomWrite = true; spectrumInitRenderTexture.Create(); spectrumHeight = new RenderTexture(size, size, 0, (RenderTextureFormat)12, (RenderTextureReadWrite)1); spectrumHeight.enableRandomWrite = true; spectrumHeight.Create(); spectrumDisplaceX = new RenderTexture(size, size, 0, (RenderTextureFormat)12, (RenderTextureReadWrite)1); spectrumDisplaceX.enableRandomWrite = true; spectrumDisplaceX.Create(); spectrumDisplaceZ = new RenderTexture(size, size, 0, (RenderTextureFormat)12, (RenderTextureReadWrite)1); spectrumDisplaceZ.enableRandomWrite = true; spectrumDisplaceZ.Create(); fftTemp1 = new RenderTexture(size, size, 0, (RenderTextureFormat)12); fftTemp1.enableRandomWrite = true; fftTemp1.Create(); fftTemp2 = new RenderTexture(size, size, 0, (RenderTextureFormat)12); fftTemp2.enableRandomWrite = true; fftTemp2.Create(); fftTemp3 = new RenderTexture(size, size, 0, (RenderTextureFormat)12); fftTemp3.enableRandomWrite = true; fftTemp3.Create(); DisplaceTexture = new RenderTexture(size, size, 0, (RenderTextureFormat)11, (RenderTextureReadWrite)1); DisplaceTexture.enableRandomWrite = true; DisplaceTexture.Create(); NormalTexture = new RenderTexture(size, size, 0, (RenderTextureFormat)2, (RenderTextureReadWrite)1); ((Texture)NormalTexture).filterMode = (FilterMode)2; ((Texture)NormalTexture).wrapMode = (TextureWrapMode)0; NormalTexture.useMipMap = true; ((Texture)NormalTexture).anisoLevel = anisoLevel; InitializeButterfly(size); isInitialized = true; } private void OnDisable() { Release(); } public void ComputeFFT(LodPrefix lodPrefix, int size, int anisoLevel, float domainSize, float windTurbulence, float windSpeed, float windRotation, float timeOffset, List<Material> waterSharedMaterials, Dictionary<ComputeShader, List<int>> waterSharedComputeShaders) { if (!isInitialized || ((Texture)DisplaceTexture).width != size || ((Texture)NormalTexture).anisoLevel != anisoLevel) { InitializeResources(size, anisoLevel); } if (Mathf.Abs(prevWindTurbulence - windTurbulence) > 0.001f || Mathf.Abs(prevWindSpeed - windSpeed) > 0.01f || Mathf.Abs(prevWindRotation - windRotation) > 0.01f) { prevWindTurbulence = windTurbulence; prevWindSpeed = windSpeed; prevWindRotation = windRotation; InitializeSpectrum(size, domainSize, windSpeed, windTurbulence, windRotation); } UpdateSpectrum(size, timeOffset, windRotation); DispatchFFT(size, domainSize, windSpeed); int num = Mathf.RoundToInt(Mathf.Log((float)size, 2f)) - 4; int num2 = Mathf.RoundToInt(Mathf.Log((float)size, 2f)); foreach (Material waterSharedMaterial in waterSharedMaterials) { if (!((Object)(object)waterSharedMaterial == (Object)null)) { UpdateMaterialParameters(lodPrefix, num, domainSize, num2, waterSharedMaterial); } } foreach (KeyValuePair<ComputeShader, List<int>> waterSharedComputeShader in waterSharedComputeShaders) { if (!((Object)(object)waterSharedComputeShader.Key == (Object)null)) { UpdateComputeParameters(lodPrefix, num, domainSize, num2, waterSharedComputeShader.Key, waterSharedComputeShader.Value); } } } private void UpdateMaterialParameters(LodPrefix lodPrefix, float normalLodSize, float domainSize, float mipCount, Material material) { switch (lodPrefix) { case LodPrefix.LOD0: material.SetTexture(ID_DispTex, (Texture)(object)DisplaceTexture); material.SetTexture(ID_NormTex, (Texture)(object)NormalTexture); material.SetFloat(ID_FFTDomainSize, domainSize); material.SetFloat(ID_NormalLod, normalLodSize); material.SetFloat(ID_MipCount, mipCount); break; case LodPrefix.LOD1: material.SetTexture(ID_DispTex1, (Texture)(object)DisplaceTexture); material.SetTexture(ID_NormTex1, (Texture)(object)NormalTexture); material.SetFloat(ID_FFTDomainSize1, domainSize); material.SetFloat(ID_MipCount1, mipCount); break; case LodPrefix.LOD2: material.SetTexture(ID_DispTex2, (Texture)(object)DisplaceTexture); material.SetTexture(ID_NormTex2, (Texture)(object)NormalTexture); material.SetFloat(ID_FFTDomainSize2, domainSize); material.SetFloat(ID_MipCount2, mipCount); break; } } private void UpdateComputeParameters(LodPrefix lodPrefix, float normalLodSize, float domainSize, float mipCount, ComputeShader computeShader, List<int> kernels) { foreach (int kernel in kernels) { switch (lodPrefix) { case LodPrefix.LOD0: computeShader.SetTexture(kernel, ID_DispTex, (Texture)(object)DisplaceTexture); computeShader.SetTexture(kernel, ID_NormTex, (Texture)(object)NormalTexture); computeShader.SetFloat(ID_FFTDomainSize, domainSize); computeShader.SetFloat(ID_NormalLod, normalLodSize); computeShader.SetFloat(ID_MipCount, mipCount); break; case LodPrefix.LOD1: computeShader.SetTexture(kernel, ID_DispTex1, (Texture)(object)DisplaceTexture); computeShader.SetTexture(kernel, ID_NormTex1, (Texture)(object)NormalTexture); computeShader.SetFloat(ID_FFTDomainSize1, domainSize); computeShader.SetFloat(ID_MipCount1, mipCount); break; case LodPrefix.LOD2: computeShader.SetTexture(kernel, ID_DispTex2, (Texture)(object)DisplaceTexture); computeShader.SetTexture(kernel, ID_NormTex2, (Texture)(object)NormalTexture); computeShader.SetFloat(ID_FFTDomainSize2, domainSize); computeShader.SetFloat(ID_MipCount2, mipCount); break; } } } private void InitializeButterfly(int size) { //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_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) int num = Mathf.RoundToInt(Mathf.Log((float)size, 2f)); butterflyColors = (Color[])(object)new Color[size * num]; int num2 = 1; int num3 = size >> 1; for (int i = 0; i < num; i++) { int num4 = i * size; int num5 = 0; int num6 = 2 * num2; for (int j = 0; j < num3; j++) { float num7 = 0f; for (int k = num5; k < num6; k += 2) { float num8 = MathF.PI * 2f * num7 * (float)num3 / (float)size; float num9 = Mathf.Cos(num8); float num10 = Mathf.Sin(num8); butterflyColors[num4 + k / 2] = new Color(num9, 0f - num10, 0f, 1f); butterflyColors[num4 + k / 2 + num2] = new Color(0f - num9, num10, 0f, 1f); num7 += 1f; } num5 += 4 * num2; num6 = num5 + 2 * num2; } num3 >>= 1; num2 <<= 1; } texButterfly.SetPixels(butterflyColors); texButterfly.Apply(); } private void InitializeSpectrum(int size, float domainSize, float windSpeed, float windTurbulence, float windRotation) { Graphics.SetRenderTarget(spectrumInitRenderTexture); spectrumShader.SetInt("size", size); spectrumShader.SetFloat("domainSize", domainSize); spectrumShader.SetFloats("turbulence", new float[1] { windTurbulence }); spectrumShader.SetFloat("windSpeed", windSpeed); spectrumShader.SetFloat("windRotation", windRotation); spectrumShader.SetTexture(kernelSpectrumInit, "resultInit", (Texture)(object)spectrumInitRenderTexture); spectrumShader.Dispatch(kernelSpectrumInit, size / 8, size / 8, 1); } private void UpdateSpectrum(int size, float timeOffset, float windRotation) { Graphics.SetRenderTarget(spectrumHeight); spectrumShader.SetFloat("time", timeOffset); spectrumShader.SetTexture(kernelSpectrumUpdate, "init0", (Texture)(object)spectrumInitRenderTexture); spectrumShader.SetTexture(kernelSpectrumUpdate, "resultHeight", (Texture)(object)spectrumHeight); spectrumShader.SetTexture(kernelSpectrumUpdate, "resultDisplaceX", (Texture)(object)spectrumDisplaceX); spectrumShader.SetTexture(kernelSpectrumUpdate, "resultDisplaceZ", (Texture)(object)spectrumDisplaceZ); spectrumShader.Dispatch(kernelSpectrumUpdate, size / 8, size / 8, 1); } private void DispatchFFT(int size, float domainSize, float windSpeed) { RenderTexture active = RenderTexture.active; int num = 0; switch (size) { case 32: num = 0; break; case 64: num = 2; break; case 128: num = 4; break; case 256: num = 6; break; case 512: num = 8; break; } Graphics.SetRenderTarget(fftTemp1); shaderFFT.SetTexture(num, "inputH", (Texture)(object)spectrumHeight); shaderFFT.SetTexture(num, "inputX", (Texture)(object)spectrumDisplaceX); shaderFFT.SetTexture(num, "inputZ", (Texture)(object)spectrumDisplaceZ); shaderFFT.SetTexture(num, "inputButterfly", (Texture)(object)texButterfly); shaderFFT.SetTexture(num, "output1", (Texture)(object)fftTemp1); shaderFFT.SetTexture(num, "output2", (Texture)(object)fftTemp2); shaderFFT.SetTexture(num, "output3", (Texture)(object)fftTemp3); shaderFFT.Dispatch(num, 1, size, 1); Graphics.SetRenderTarget(DisplaceTexture); shaderFFT.SetTexture(num + 1, "inputH", (Texture)(object)fftTemp1); shaderFFT.SetTexture(num + 1, "inputX", (Texture)(object)fftTemp2); shaderFFT.SetTexture(num + 1, "inputZ", (Texture)(object)fftTemp3); shaderFFT.SetTexture(num + 1, "inputButterfly", (Texture)(object)texButterfly); shaderFFT.SetTexture(num + 1, "output", (Texture)(object)DisplaceTexture); shaderFFT.Dispatch(num + 1, size, 1, 1); normalComputeMaterial.SetFloat("KW_FFTDomainSize", domainSize); normalComputeMaterial.SetTexture("_DispTex", (Texture)(object)DisplaceTexture); int num2 = Mathf.RoundToInt(Mathf.Log((float)size, 2f)) - 4; normalComputeMaterial.SetFloat("_SizeLog", (float)num2); normalComputeMaterial.SetFloat("_WindSpeed", windSpeed); Graphics.SetRenderTarget(NormalTexture); Graphics.Blit((Texture)null, NormalTexture, normalComputeMaterial, 0); RenderTexture.active = active; } } [ExecuteInEditMode] public class KW_AddLightToWaterRendering : MonoBehaviour { private Light currentLight; private LightType lastLightType; private LightShadows lastLightShadows; private Color lastLightColor; private float lastLightRange; private float lastLightIntencity; private float lastSpotLightAngle; private Vector3 lastLightPos; private Vector3 lastLightDir; private static readonly int KW_DirLightForward_ID = Shader.PropertyToID("KW_DirLightForward"); private static readonly int KW_DirLightColor_ID = Shader.PropertyToID("KW_DirLightColor"); private KW_WaterVolumetricLighting.VolumeLight currentVolumeLight; private void OnEnable() { if ((Object)(object)currentLight == (Object)null) { currentLight = ((Component)this).GetComponent<Light>(); } if (currentVolumeLight == null) { currentVolumeLight = new KW_WaterVolumetricLighting.VolumeLight(); } currentVolumeLight.Light = currentLight; currentVolumeLight.RequiredUpdate = true; KW_WaterVolumetricLighting.ActiveLights.Add(currentVolumeLight); } private void OnDisable() { KW_WaterVolumetricLighting.ActiveLights.Remove(currentVolumeLight); if (currentVolumeLight.CopyShadowMapBuffer != null) { currentLight.RemoveCommandBuffer((LightEvent)1, currentVolumeLight.CopyShadowMapBuffer); } if (currentVolumeLight.LightCommandBuffer != null) { currentVolumeLight.Light.RemoveCommandBuffer((LightEvent)2, currentVolumeLight.LightCommandBuffer); currentVolumeLight.Light.RemoveCommandBuffer((LightEvent)1, currentVolumeLight.LightCommandBuffer); } } private bool IsRequiredLightUpdate() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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_0031: 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_0047: 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_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: 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_010d: 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_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0142: 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_00b1: 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_00c4: 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) bool result = false; Transform transform = ((Component)currentLight).transform; if (lastLightType != currentLight.type || lastLightShadows != currentLight.shadows || lastLightColor != currentLight.color || Math.Abs(lastLightIntencity - currentLight.intensity) > 0.001f || Math.Abs(lastLightRange - currentLight.range) > 0.001f || Math.Abs(lastSpotLightAngle - currentLight.spotAngle) > 0.001f || lastLightPos != transform.position || lastLightDir != transform.forward) { result = true; } lastLightType = currentLight.type; lastLightShadows = currentLight.shadows; lastLightColor = currentLight.color; lastLightIntencity = currentLight.intensity; lastLightRange = currentLight.range; lastLightPos = transform.position; lastLightDir = transform.forward; return result; } private void Update() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Invalid comparison between Unknown and I4 //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Invalid comparison between Unknown and I4 if ((int)currentLight.type == 0) { ComputeSpotLightShadowMatrix(); } if ((int)currentLight.type == 1) { UpdateDirLight(); } if (IsRequiredLightUpdate()) { currentVolumeLight.RequiredUpdate = true; } } private void UpdateDirLight() { //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_001b: 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_0041: 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) Shader.SetGlobalVector(KW_DirLightForward_ID, Vector4.op_Implicit(-((Component)currentLight).transform.forward)); Shader.SetGlobalVector(KW_DirLightColor_ID, Color.op_Implicit(currentLight.color * currentLight.intensity)); } private void ComputeSpotLightShadowMatrix() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0093: 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_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_0099: 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_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_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: 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_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) Matrix4x4 val = Matrix4x4.TRS(new Vector3(0.5f, 0.5f, 0.5f), Quaternion.identity, new Vector3(0.5f, 0.5f, 0.5f)); Matrix4x4 val2 = ((!SystemInfo.usesReversedZBuffer) ? Matrix4x4.Perspective(currentLight.spotAngle, 1f, currentLight.shadowNearPlane, currentLight.range) : Matrix4x4.Perspective(currentLight.spotAngle, 1f, currentLight.range, currentLight.shadowNearPlane)); Matrix4x4 val3 = val * val2; ref Matrix4x4 reference = ref val3; ((Matrix4x4)(ref reference))[0, 2] = ((Matrix4x4)(ref reference))[0, 2] * -1f; reference = ref val3; ((Matrix4x4)(ref reference))[1, 2] = ((Matrix4x4)(ref reference))[1, 2] * -1f; reference = ref val3; ((Matrix4x4)(ref reference))[2, 2] = ((Matrix4x4)(ref reference))[2, 2] * -1f; reference = ref val3; ((Matrix4x4)(ref reference))[3, 2] = ((Matrix4x4)(ref reference))[3, 2] * -1f; Matrix4x4 val4 = Matrix4x4.TRS(((Component)currentLight).transform.position, ((Component)currentLight).transform.rotation, Vector3.one); Matrix4x4 inverse = ((Matrix4x4)(ref val4)).inverse; currentVolumeLight.SpotMatrix = val3 * inverse; } } [RequireComponent(typeof(Rigidbody))] [RequireComponent(typeof(Collider))] public class KW_Buoyancy : MonoBehaviour { public enum ModelSourceEnum { Collider, Mesh } public ModelSourceEnum VolumeSource = ModelSourceEnum.Mesh; public Transform OvverideCenterOfMass; [Range(100f, 1000f)] public float Density = 450f; [Range(1f, 6f)] public int SlicesPerAxisX = 2; [Range(1f, 6f)] public int SlicesPerAxisY = 2; [Range(1f, 6f)] public int SlicesPerAxisZ = 2; public bool isConcave = false; [Range(2f, 32f)] public int VoxelsLimit = 16; public float AngularDrag = 0.25f; public float Drag = 0.25f; [Range(0f, 1f)] public float NormalForce = 0.2f; public bool DebugForces = false; private const float DAMPFER = 0.1f; private const float WATER_DENSITY = 1000f; private Vector3 localArchimedesForce; private List<Vector3> voxels; private Vector3[] currentForces; private bool isMeshCollider; private List<Vector3[]> debugForces; private Rigidbody rigidBody; private Collider collider; private float bounceMaxSize; private void OnEnable() { //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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0049: 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_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_007c: 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_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: 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_0156: 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_0194: 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_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) KW_WaterDynamicScripts.AddBuoyancyScript(this); debugForces = new List<Vector3[]>(); rigidBody = ((Component)this).GetComponent<Rigidbody>(); collider = ((Component)this).GetComponent<Collider>(); Quaternion rotation = ((Component)this).transform.rotation; Vector3 position = ((Component)this).transform.position; ((Component)this).transform.rotation = Quaternion.identity; ((Component)this).transform.position = Vector3.zero; Bounds bounds = collider.bounds; bounceMaxSize = Mathf.Max(new float[3] { ((Bounds)(ref bounds)).size.x, ((Bounds)(ref bounds)).size.y, ((Bounds)(ref bounds)).size.z }); isMeshCollider = (Object)(object)((Component)this).GetComponent<MeshCollider>() != (Object)null; if (Object.op_Implicit((Object)(object)OvverideCenterOfMass)) { rigidBody.centerOfMass = ((Component)this).transform.InverseTransformPoint(((Component)OvverideCenterOfMass).transform.position); } rigidBody.angularDrag = AngularDrag; rigidBody.drag = Drag; voxels = SliceIntoVoxels(isMeshCollider && isConcave); currentForces = (Vector3[])(object)new Vector3[voxels.Count]; ((Component)this).transform.rotation = rotation; ((Component)this).transform.position = position; float num = rigidBody.mass / Density; WeldPoints(voxels, VoxelsLimit); float num2 = 1000f * Mathf.Abs(Physics.gravity.y) * num; localArchimedesForce = new Vector3(0f, num2, 0f) / (float)voxels.Count; } private void OnDisable() { KW_WaterDynamicScripts.RemoveBuoyancyScript(this); } private Bounds GetCurrentBounds() { //IL_0003: 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_0063: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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) //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) Bounds result = default(Bounds); if (VolumeSource == ModelSourceEnum.Mesh) { return ((Component)this).GetComponent<Renderer>().bounds; } if (VolumeSource == ModelSourceEnum.Collider) { MeshCollider component = ((Component)this).GetComponent<MeshCollider>(); if ((Object)(object)component != (Object)null) { return component.sharedMesh.bounds; } return ((Component)this).GetComponent<Collider>().bounds; } return result; } private List<Vector3> SliceIntoVoxels(bool concave) { //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_0176: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: 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_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_024d: 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_006b: 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_0098: 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_00c5: 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_00f5: 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_00fd: 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) List<Vector3> list = new List<Vector3>(SlicesPerAxisX * SlicesPerAxisY * SlicesPerAxisZ); Bounds currentBounds = GetCurrentBounds(); if (concave) { MeshCollider component = ((Component)this).GetComponent<MeshCollider>(); bool convex = component.convex; component.convex = false; for (int i = 0; i < SlicesPerAxisX; i++) { for (int j = 0; j < SlicesPerAxisY; j++) { for (int k = 0; k < SlicesPerAxisZ; k++) { float num = ((Bounds)(ref currentBounds)).min.x + ((Bounds)(ref currentBounds)).size.x / (float)SlicesPerAxisX * (0.5f + (float)i); float num2 = ((Bounds)(ref currentBounds)).min.y + ((Bounds)(ref currentBounds)).size.y / (float)SlicesPerAxisY * (0.5f + (float)j); float num3 = ((Bounds)(ref currentBounds)).min.z + ((Bounds)(ref currentBounds)).size.z / (float)SlicesPerAxisZ * (0.5f + (float)k); Vector3 val = ((Component)this).transform.InverseTransformPoint(new Vector3(num, num2, num3)); if (PointIsInsideMeshCollider((Collider)(object)component, val)) { list.Add(val); } } } } if (list.Count == 0) { list.Add(((Bounds)(ref currentBounds)).center); } component.convex = convex; } else { for (int l = 0; l < SlicesPerAxisX; l++) { for (int m = 0; m < SlicesPerAxisY; m++) { for (int n = 0; n < SlicesPerAxisZ; n++) { float num4 = ((Bounds)(ref currentBounds)).min.x + ((Bounds)(ref currentBounds)).size.x / (float)SlicesPerAxisX * (0.5f + (float)l); float num5 = ((Bounds)(ref currentBounds)).min.y + ((Bounds)(ref currentBounds)).size.y / (float)SlicesPerAxisY * (0.5f + (float)m); float num6 = ((Bounds)(ref currentBounds)).min.z + ((Bounds)(ref currentBounds)).size.z / (float)SlicesPerAxisZ * (0.5f + (float)n); Vector3 item = ((Component)this).transform.InverseTransformPoint(new Vector3(num4, num5, num6)); list.Add(item); } } } } return list; } private static bool PointIsInsideMeshCollider(Collider c, Vector3 p) { //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_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_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_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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_003e: 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_0059: 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) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_0072: 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) Vector3[] array = (Vector3[])(object)new Vector3[6] { Vector3.up, Vector3.down, Vector3.left, Vector3.right, Vector3.forward, Vector3.back }; Vector3[] array2 = array; RaycastHit val2 = default(RaycastHit); foreach (Vector3 val in array2) { if (!c.Raycast(new Ray(p - val * 1000f, val), ref val2, 1000f)) { return false; } } return true; } private static void FindClosestPoints(IList<Vector3> list, out int firstIndex, out int secondIndex) { //IL_0021: 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.MaxValue; float num2 = float.MinValue; firstIndex = 0; secondIndex = 1; for (int i = 0; i < list.Count - 1; i++) { for (int j = i + 1; j < list.Count; j++) { float num3 = Vector3.Distance(list[i], list[j]); if (num3 < num) { num = num3; firstIndex = i; secondIndex = j; } if (num3 > num2) { num2 = num3; } } } } private static void WeldPoints(IList<Vector3> list, int targetCount) { //IL_0028: 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_003e: 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) //IL_0055: Unknown result type (might be due to invalid IL or missing references) if (list.Count > 2 && targetCount >= 2) { while (list.Count > targetCount) { FindClosestPoints(list, out var firstIndex, out var secondIndex); Vector3 item = (list[firstIndex] + list[secondIndex]) * 0.5f; list.RemoveAt(secondIndex); list.RemoveAt(firstIndex); list.Add(item); } } } private void FixedUpdate() { //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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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_008d: Unknown result type (might be due to invalid IL or missing references) //IL_008f: 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_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_00b0: 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_019b: Unknown result type (might be due to invalid IL or missing references) //IL_019d: 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_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: 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_0101: 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_0110: 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_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: 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_0158: Unknown result type (might be due to invalid IL or missing references) //IL_017b: 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_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) WaterSystem currentWater = KW_WaterDynamicScripts.GetCurrentWater(); if ((Object)(object)currentWater == (Object)null) { return; } if (DebugForces) { debugForces.Clear(); } for (int i = 0; i < voxels.Count; i++) { Vector3 val = ((Component)this).transform.TransformPoint(voxels[i]); KW_WaterSurfaceData? waterSurfacePositionNormal = currentWater.GetWaterSurfacePositionNormal(val); Vector3 zero = Vector3.zero; if (waterSurfacePositionNormal.HasValue) { Vector3 position = waterSurfacePositionNormal.Value.Position; Vector3 pointVelocity = rigidBody.GetPointVelocity(val); Vector3 val2 = -pointVelocity * 0.1f * rigidBody.mass; float num = position.y - val.y; if (num > 1f) { num = 1f; } else if (num < 0f) { num = 0f; val2 *= 0.2f; } zero = val2 + Mathf.Sqrt(num) * localArchimedesForce; Vector3 normal = waterSurfacePositionNormal.Value.Normal; zero.x += normal.x * NormalForce * rigidBody.mass; zero.z += normal.z * NormalForce * rigidBody.mass; currentForces[i] = zero; } else { zero = currentForces[i]; } rigidBody.AddForceAtPosition(zero, val); if (DebugForces) { debugForces.Add((Vector3[])(object)new Vector3[2] { val, zero }); } } } private void OnDrawGizmos() { //IL_003e: 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_0068: 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_0072: 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_00c0: 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_00d6: 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_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: 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) if (!DebugForces || voxels == null || debugForces == null) { return; } float num = 0.02f * bounceMaxSize; Gizmos.color = Color.yellow; foreach (Vector3 voxel in voxels) { Gizmos.DrawCube(((Component)this).transform.TransformPoint(voxel), new Vector3(num, num, num)); } Gizmos.color = Color.cyan; foreach (Vector3[] debugForce in debugForces) { Gizmos.DrawCube(debugForce[0], new Vector3(num, num, num)); Gizmos.DrawRay(debugForce[0], debugForce[1] / rigidBody.mass * bounceMaxSize * 0.25f); } } } public class KW_CameraColorTexture : MonoBehaviour { public RenderTexture CameraColorTexture; public RenderTexture CameraColorTexture_Blured; public RenderTexture CameraColorTextureFinal; private string cb_Name = "CopyColorTexture"; private string cbFinal_Name = "CopyColorTextureFinal"; private CommandBuffer cb; private CommandBuffer cbFinal; private void OnDisable() { if ((Object)(object)CameraColorTexture != (Object)null) { CameraColorTexture.Release(); } if ((Object)(object)CameraColorTexture_Blured != (Object)null) { CameraColorTexture_Blured.Release(); } if ((Object)(object)CameraColorTextureFinal != (Object)null) { CameraColorTextureFinal.Release(); } } public void Release() { OnDisable(); } private void InitializeTextures(int width, int height, bool useHDR) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Expected O, but got Unknown if ((Object)(object)CameraColorTexture != (Object)null) { CameraColorTexture.Release(); } CameraColorTexture = new RenderTexture(width, height, 0, (RenderTextureFormat)(useHDR ? 9 : 7)); if ((Object)(object)CameraColorTexture_Blured != (Object)null) { CameraColorTexture_Blured.Release(); } CameraColorTexture_Blured = new RenderTexture(width, height, 0, (RenderTextureFormat)(useHDR ? 9 : 7)); } private void InitializeFinalTextures(int width, int height, bool useHDR) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)CameraColorTextureFinal != (Object)null) { CameraColorTextureFinal.Release(); } CameraColorTextureFinal = new RenderTexture(width, height, 0, (RenderTextureFormat)(useHDR ? 9 : 7)); Debug.Log((object)CameraColorTextureFinal.format); } public void RenderColorTexture(Camera currentCamera, bool useHDR, bool isScreenSpaceWaterRendering, Dictionary<CommandBuffer, CameraEvent> waterSharedBuffers) { //IL_0030: 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_0047: Expected O, but got Unknown //IL_0074: 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_009b: Unknown result type (might be due to invalid IL or missing references) if (cb == null || !waterSharedBuffers.ContainsKey(cb)) { if (cb == null) { cb = new CommandBuffer { name = cb_Name }; } else { cb.Clear(); } int pixelWidth = currentCamera.pixelWidth; int pixelHeight = currentCamera.pixelHeight; InitializeTextures(pixelWidth, pixelHeight, useHDR); cb.Blit(RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)1), RenderTargetIdentifier.op_Implicit((Texture)(object)CameraColorTexture)); cb.SetGlobalTexture("_CameraColorTexture", RenderTargetIdentifier.op_Implicit((Texture)(object)CameraColorTexture)); waterSharedBuffers.Add(cb, (CameraEvent)(isScreenSpaceWaterRendering ? 17 : 16)); } } public void RenderColorTextureFinal(Camera currentCamera, bool useHDR, Dictionary<CommandBuffer, CameraEvent> waterSharedBuffers) { //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_0046: Expected O, but got Unknown //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_009a: Unknown result type (might be due to invalid IL or missing references) if (cbFinal == null || !waterSharedBuffers.ContainsKey(cbFinal)) { if (cbFinal == null) { cbFinal = new CommandBuffer { name = cbFinal_Name }; } else { cbFinal.Clear(); } int pixelWidth = currentCamera.pixelWidth; int pixelHeight = currentCamera.pixelHeight; InitializeFinalTextures(pixelWidth, pixelHeight, useHDR); cbFinal.Blit(RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)1), RenderTargetIdentifier.op_Implicit((Texture)(object)CameraColorTextureFinal)); cbFinal.SetGlobalTexture("_CameraColorTextureFinal", RenderTargetIdentifier.op_Implicit((Texture)(object)CameraColorTextureFinal)); waterSharedBuffers.Add(cbFinal, (CameraEvent)19); } } } public class KW_CameraReflection_HDRP : MonoBehaviour { private class PlanarReflectionSettingData { private readonly bool _fog; private readonly int _maxLod; private readonly float _lodBias; public PlanarReflectionSettingData() { _fog = RenderSettings.fog; _maxLod = QualitySettings.maximumLODLevel; _lodBias = QualitySettings.lodBias; } public void Set() { RenderSettings.fog = false; QualitySettings.maximumLODLevel += 1; QualitySettings.lodBias = _lodBias * 0.5f; } public void Restore() { RenderSettings.fog = _fog; QualitySettings.maximumLODLevel = _maxLod; QualitySettings.lodBias = _lodBias; } } private GameObject reflCameraGO; private Camera reflectionCamera; public RenderTexture reflectionRT; public RenderTexture reflectionCubemapRT; public float m_ClipPlaneOffset = -0.05f; public float m_planeOffset = -0.05f; private float currentInterval = 0f; private int sideIdx = 0; private int[] cubeMapSides = new int[5] { 0, 1, 2, 4, 5 }; private bool requiredUpdateAllFaces = true; private int waterCullingMask = -17; private HDAdditionalCameraData hdData; private bool lastSkyFix; public void Release() { KW_Extensions.SafeDestroy((Object)reflCameraGO); KW_Extensions.ReleaseRenderTextures(reflectionRT, reflectionCubemapRT); currentInterval = 0f; requiredUpdateAllFaces = true; } private void OnDisable() { Release(); } private void InitializeReflectionTexture(int width, int height, bool useMip) { reflectionRT = KW_Extensions.ReinitializeRenderTexture(reflectionRT, width, height, 24, (RenderTextureFormat)9, null, useRandomWrite: false, useMip, (TextureWrapMode)0, (FilterMode)1); } private void InitializeCubemapTexture(int width, int height) { reflectionCubemapRT = KW_Extensions.ReinitializeRenderTexture(reflectionCubemapRT, width, height, 0, (RenderTextureFormat)2, null, useRandomWrite: false, useMipMap: false, (TextureWrapMode)0, (FilterMode)1); ((Texture)reflectionCubemapRT).dimension = (TextureDimension)4; } private void CreateCamera() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown reflCameraGO = new GameObject("WaterReflectionCamera"); reflCameraGO.transform.parent = ((Component)this).transform; reflectionCamera = reflCameraGO.AddComponent<Camera>(); reflectionCamera.cameraType = (CameraType)16; ((Behaviour)reflectionCamera).enabled = false; reflectionCamera.allowMSAA = false; reflectionCamera.useOcclusionCulling = false; hdData = reflCameraGO.AddComponent<HDAdditionalCameraData>(); } private void CopyCameraParams(Camera currentCamera, int cullingMask) { //IL_0012: 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_0076: 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_00dd: 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_0162: Unknown result type (might be due to invalid IL or missing references) //IL_012b: 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_014f: Unknown result type (might be due to invalid IL or missing references) ((Component)reflectionCamera).transform.position = ((Component)currentCamera).transform.position; ((Component)reflectionCamera).transform.rotation = ((Component)currentCamera).transform.rotation; reflectionCamera.fieldOfView = currentCamera.fieldOfView; reflectionCamera.nearClipPlane = currentCamera.nearClipPlane; reflectionCamera.farClipPlane = currentCamera.farClipPlane; reflectionCamera.rect = currentCamera.rect; reflectionCamera.aspect = currentCamera.aspect; reflectionCamera.orthographicSize = currentCamera.orthographicSize; reflectionCamera.renderingPath = currentCamera.renderingPath; reflectionCamera.allowDynamicResolution = currentCamera.allowDynamicResolution; reflectionCamera.cullingMask = cullingMask; reflectionCamera.clearFlags = currentCamera.clearFlags; reflectionCamera.backgroundColor = currentCamera.backgroundColor; if (currentCamera.usePhysicalProperties) { reflectionCamera.usePhysicalProperties = true; reflectionCamera.focalLength = currentCamera.focalLength; reflectionCamera.sensorSize = currentCamera.sensorSize; reflectionCamera.lensShift = currentCamera.lensShift; reflectionCamera.gateFit = currentCamera.gateFit; } hdData.defaultFrameSettings = (FrameSettingsRenderType)2; hdData.customRenderingSettings = true; hdData.hasPersistentHistory = true; hdData.invertFaceCulling = true; } private void RenderCamera(Camera currentCamera, Vector3 waterPosition, Matrix4x4 cameraMatrix) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //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_0017: 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_0030: 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_003c: 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_004f: 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_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_006f: 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_008b: 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_00a4: 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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: 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_00dd: 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_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: 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_0111: 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_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) Vector3 val = waterPosition + Vector3.up * m_planeOffset; Vector3 up = Vector3.up; float num = 0f - Vector3.Dot(up, val) - m_ClipPlaneOffset; Vector4 plane = default(Vector4); ((Vector4)(ref plane))..ctor(up.x, up.y, up.z, num); Matrix4x4 reflectionMat = Matrix4x4.identity; reflectionMat *= Matrix4x4.Scale(new Vector3(1f, -1f, 1f)); CalculateReflectionMatrix(ref reflectionMat, plane); ((Component)reflectionCamera).transform.forward = Vector3.Scale(((Component)currentCamera).transform.forward, new Vector3(1f, -1f, 1f)); Vector3 position = ((Component)currentCamera).transform.position; ((Component)reflectionCamera).transform.position = ((Matrix4x4)(ref reflectionMat)).MultiplyPoint(position); reflectionCamera.worldToCameraMatrix = cameraMatrix * reflectionMat; Vector4 val2 = CameraSpacePlane(reflectionCamera, val - Vector3.up * 0.1f, up, 1f); Matrix4x4 projectionMatrix = reflectionCamera.CalculateObliqueMatrix(val2); reflectionCamera.projectionMatrix = projectionMatrix; PlanarReflectionSettingData planarReflectionSettingData = new PlanarReflectionSettingData(); planarReflectionSettingData.Set(); try { reflectionCamera.targetTexture = reflectionRT; KW_Extensions.CameraRender(reflectionCamera); } finally { planarReflectionSettingData.Restore(); } } public void RenderPlanar(Camera currentCamera, Vector3 waterPosition, float resolutionScale, bool useSkyFix, List<Material> waterShaderMaterials) { //IL_0064: 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) if ((Object)(object)currentCamera == (Object)null) { return; } if ((Object)(object)reflCameraGO == (Object)null) { CreateCamera(); } CopyCameraParams(currentCamera, waterCullingMask); UseSkyFix(currentCamera, useSkyFix); int width = (int)((float)currentCamera.pixelWidth * resolutionScale); int height = (int)((float)currentCamera.pixelHeight * resolutionScale); InitializeReflectionTexture(width, height, useMip: true); RenderCamera(currentCamera, waterPosition, currentCamera.worldToCameraMatrix); foreach (Material waterShaderMaterial in waterShaderMaterials) { if (!((Object)(object)waterShaderMaterial == (Object)null)) { waterShaderMaterial.SetTexture("KW_PlanarReflection", (Texture)(object)reflectionRT); } } } public void RenderCubemap(Camera currentCamera, Vector3 waterPosition, float interval, int cullingMask, int texSize, bool useSkyFix, List<Material> waterShaderMaterials) { //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_011d: 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_0131: 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_017d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)currentCamera == (Object)null) { return; } currentInterval += KW_Extensions.DeltaTime(); if (lastSkyFix != useSkyFix) { requiredUpdateAllFaces = true; } if (!requiredUpdateAllFaces && currentInterval < interval / 6f) { return; } currentInterval = 0f; if ((Object)(object)reflCameraGO == (Object)null) { CreateCamera(); } CopyCameraParams(currentCamera, cullingMask); UseSkyFix(currentCamera, useSkyFix); InitializeReflectionTexture(texSize, texSize, useMip: false); InitializeCubemapTexture(texSize, texSize); float fieldOfView = currentCamera.fieldOfView; float aspect = currentCamera.aspect; reflectionCamera.fieldOfView = 90f; reflectionCamera.aspect = 1f; m_planeOffset = 0f; m_ClipPlaneOffset = 0f; if (requiredUpdateAllFaces || interval < 0.0001f) { RenderToCubemapFace(currentCamera, waterPosition, (CubemapFace)1); RenderToCubemapFace(currentCamera, waterPosition, (CubemapFace)5); RenderToCubemapFace(currentCamera, waterPosition, (CubemapFace)0); RenderToCubemapFace(currentCamera, waterPosition, (CubemapFace)2); RenderToCubemapFace(currentCamera, waterPosition, (CubemapFace)4); } else { int num = cubeMapSides[sideIdx]; sideIdx = ((sideIdx < 4) ? (++sideIdx) : 0); RenderToCubemapFace(currentCamera, waterPosition, (CubemapFace)num); } requiredUpdateAllFaces = false; foreach (Material waterShaderMaterial in waterShaderMaterials) { if (!((Object)(object)waterShaderMaterial == (Object)null)) { waterShaderMaterial.SetTexture("KW_ReflectionCube", (Texture)(object)reflectionCubemapRT); } } } private void UseSkyFix(Camera currentCamera, bool useSkyFix) { //IL_000e: 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_0075: 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_0061: 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) if (useSkyFix) { hdData.clearColorMode = (ClearColorMode)1; hdData.backgroundColorHDR = Color.black; hdData.SetCameraFrameSetting((FrameSettingsField)27, enabled: false); } else { HDAdditionalCameraData component = ((Component)currentCamera).GetComponent<HDAdditionalCameraData>(); if ((Object)(object)component != (Object)null) { hdData.clearColorMode = component.clearColorMode; hdData.backgroundColorHDR = component.backgroundColorHDR; } else { hdData.clearColorMode = (ClearColorMode)0; } hdData.SetCameraFrameSetting((FrameSettingsField)27, enabled: true); } lastSkyFix = useSkyFix; } private void RenderToCubemapFace(Camera currentCamera, Vector3 waterPosition, CubemapFace face) { //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_000d: 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_0010: 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_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_0036: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected I4, but got Unknown Vector3 position = ((Component)currentCamera).transform.position; Matrix4x4 cameraMatrix = Matrix4x4.Inverse(Matrix4x4.TRS(position, GetRotationByCubeFace(face), new Vector3(1f, 1f, -1f))); RenderCamera(currentCamera, waterPosition, cameraMatrix); Graphics.CopyTexture((Texture)(object)reflectionRT, 0, (Texture)(object)reflectionCubemapRT, (int)face); } private Quaternion GetRotationByCubeFace(CubemapFace face) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //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_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected I4, but got Unknown //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_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_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_007c: 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_0093: 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_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: 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_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) return (Quaternion)((int)face switch { 1 => Quaternion.Euler(0f, -90f, 0f), 0 => Quaternion.Euler(0f, 90f, 0f), 2 => Quaternion.Euler(90f, 0f, 0f), 3 => Quaternion.Euler(-90f, 0f, 0f), 4 => Quaternion.Euler(0f, 0f, 0f), 5 => Quaternion.Euler(0f, -180f, 0f), _ => Quaternion.identity, }); } private static float sgn(float a) { if (a > 0f) { return 1f; } if (a < 0f) { return -1f; } return 0f; } private static Vector3 ReflectPosition(Vector3 pos) { //IL_0003: 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_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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_001f: Unknown result type (might be due to invalid IL or missing references) Vector3 result = default(Vector3); ((Vector3)(ref result))..ctor(pos.x, 0f - pos.y, pos.z); return result; } private Vector4 CameraSpacePlane(Camera cam, Vector3 pos, Vector3 normal, float sideSign) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: 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_0013: Unknown result type (might be due to invalid IL or missing references) //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_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_0023: 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_0027: 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_0030: 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_003d: 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) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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) Vector3 val = pos + normal * m_ClipPlaneOffset; Matrix4x4 worldToCameraMatrix = cam.worldToCameraMatrix; Vector3 val2 = ((Matrix4x4)(ref worldToCameraMatrix)).MultiplyPoint(val); Vector3 val3 = ((Matrix4x4)(ref worldToCameraMatrix)).MultiplyVector(normal); Vector3 val4 = ((Vector3)(ref val3)).normalized * sideSign; return new Vector4(val4.x, val4.y, val4.z, 0f - Vector3.Dot(val2, val4)); } private static void CalculateReflectionMatrix(ref Matrix4x4 reflectionMat, Vector4 plane) { reflectionMat.m00 = 1f - 2f * ((Vector4)(ref plane))[0] * ((Vector4)(ref plane))[0]; reflectionMat.m01 = -2f * ((Vector4)(ref plane))[0] * ((Vector4)(ref plane))[1]; reflectionMat.m02 = -2f * ((Vector4)(ref plane))[0] * ((Vector4)(ref plane))[2]; reflectionMat.m03 = -2f * ((Vector4)(ref plane))[3] * ((Vector4)(ref plane))[0]; reflectionMat.m10 = -2f * ((Vector4)(ref plane))[1] * ((Vector4)(ref plane))[0]; reflectionMat.m11 = 1f - 2f * ((Vector4)(ref plane))[1] * ((Vector4)(ref plane))[1]; reflectionMat.m12 = -2f * ((Vector4)(ref plane))[1] * ((Vector4)(ref plane))[2]; reflectionMat.m13 = -2f * ((Vector4)(ref plane))[3] * ((Vector4)(ref plane))[1]; reflectionMat.m20 = -2f * ((Vector4)(ref plane))[2] * ((Vector4)(ref plane))[0]; reflectionMat.m21 = -2f * ((Vector4)(ref plane))[2] * ((Vector4)(ref plane))[1]; reflectionMat.m22 = 1f - 2f * ((Vector4)(ref plane))[2] * ((Vector4)(ref plane))[2]; reflectionMat.m23 = -2f * ((Vector4)(ref plane))[3] * ((Vector4)(ref plane))[2]; reflectionMat.m30 = 0f; reflectionMat.m31 = 0f; reflectionMat.m32 = 0f; reflectionMat.m33 = 1f; } } public class KW_CausticDecal_CustomPass : CustomPass { private string profilerTag; private Mesh decalMesh; private Material causticDecalMaterial; protected override void Setup(ScriptableRenderContext renderContext, CommandBuffer cmd) { ((CustomPass)this).name = "Water.CausticDecalCustomPass"; } public void UpdateParams() { WaterSystem currentWater = KW_WaterDynamicScripts.GetCurrentWater(); if ((Object)(object)causticDecalMaterial == (Object)null) { causticDecalMaterial = KW_Extensions.CreateMaterial(WaterShadersSingleton.Instance.CausticDecalShader); } if (!currentWater.waterSharedMaterials.Contains(causticDecalMaterial)) { currentWater.waterSharedMaterials.Add(causticDecalMaterial); } } protected override void Execute(CustomPassContext ctx) { //IL_0001: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_0079: 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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: 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) //IL_00f9: 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_00d2: Unknown result type (might be due to invalid IL or missing references) Camera camera = ctx.hdCamera.camera; WaterSystem currentWater = KW_WaterDynamicScripts.GetCurrentWater(); if (KW_Extensions.IsCanExecuteCameraBuffers(camera, currentWater)) { CommandBuffer cmd = ctx.cmd; UpdateParams(); Vector3 position = ((Component)camera).transform.position; position.y = ((Component)currentWater).transform.position.y - 20f; float num = ((Vector4)(ref KW_CausticRendering.LodSettings))[currentWater.CausticActiveLods - 1] * 2f; Matrix4x4 val = Matrix4x4.TRS(position, Quaternion.identity, new Vector3(num, 40f, num)); UpdateMaterialParams(currentWater); if ((Object)(object)decalMesh == (Object)null) { decalMesh = CoreUtils.CreateCubeMesh(new Vector3(-0.5f, -0.5f, -0.5f), new Vector3(0.5f, 0.5f, 0.5f)); } CoreUtils.SetRenderTarget(cmd, ctx.cameraColorBuffer, (ClearFlag)0, 0, (CubemapFace)(-1), -1); cmd.DrawMesh(decalMesh, val, causticDecalMaterial); } } private void UpdateMaterialParams(WaterSystem water) { causticDecalMaterial.SetFloat("KW_CaustisStrength", water.CausticStrength); float num = 1f - (float)(Mathf.RoundToInt(Mathf.Log((float)water.FFT_SimulationSize, 2f)) - 5) / 4f; if (water.UseCausticDispersion && num > 0.1f) { causticDecalMaterial.EnableKeyword("USE_DISPERSION"); num = Mathf.Lerp(num * 0.25f, num, (float)water.CausticTextureSize / 1024f); causticDecalMaterial.SetFloat("KW_CausticDispersionStrength", num); } else { causticDecalMaterial.DisableKeyword("USE_DISPERSION"); } } protected override void Cleanup() { KW_Extensions.SafeDestroy((Object)causticDecalMaterial); } public void Release() { ((CustomPass)this).Cleanup(); } } public class KW_CausticRendering : MonoBehaviour { public Texture2D depth_tex; public RenderTexture causticLod0; public RenderTexture causticLod1; public RenderTexture causticLod2; public RenderTexture causticLod3; public RenderTexture causticRT; private Material causticComputeMaterial; private Material causticDecalMaterial; private Mesh causticMesh; private Mesh decalMesh; private CommandBuffer cb; private const string path_causticFolder = "CausticMaps"; private const string path_causticDepthTexture = "KW_CausticDepthTexture"; private const string path_causticDepthData = "KW_CausticDepthData"; private int ID_KW_CausticDepth = Shader.PropertyToID("KW_CausticDepthTex"); private int ID_KW_CausticDepthOrthoSize = Shader.PropertyToID("KW_CausticDepthOrthoSize"); private int ID_KW_CausticDepthNearFarDistance = Shader.PropertyToID("KW_CausticDepth_Near_Far_Dist"); private int ID_KW_CausticDepthPos = Shader.PropertyToID("KW_CausticDepthPos"); private const int nearPlaneDepth = -2; private const int farPlaneDepth = 100; private int currentMeshResolution; private bool isDepthTextureInitialized; public static Vector4 LodSettings = new Vector4(10f, 20f, 40f, 80f); public void Release() { OnDisable(); } private void OnDisable() { KW_Extensions.SafeDestroy((Object)depth_tex, (Object)causticComputeMaterial, (Object)causticDecalMaterial, (Object)causticMesh, (Object)decalMesh); KW_Extensions.ReleaseRenderTextures(causticLod0, causticLod1, causticLod2, causticLod3, causticRT); currentMeshResolution = 0; isDepthTextureInitialized = false; Sh
TolianInterior/HyperionStation/HyperionStation.dll
Decompiled 2 weeks agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using LethalLevelLoader; using Microsoft.CodeAnalysis; using UnityEngine; [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("HyperionStation")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("HyperionStation")] [assembly: AssemblyTitle("HyperionStation")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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 HyperionStation { public static class Common { public static bool CollideWithPlayer(Collider collider_obj) { if (((Component)collider_obj).tag == "Player") { return true; } GameObject gameObject = ((Component)collider_obj).gameObject; while ((Object)(object)gameObject != (Object)null) { if (gameObject.tag == "Player") { return true; } if ((Object)(object)gameObject.transform.parent == (Object)null) { return false; } gameObject = ((Component)gameObject.transform.parent).gameObject; } return false; } public static bool CollideWithEnemy(Collider collider_obj) { if (((Component)collider_obj).tag == "Enemy") { return true; } GameObject gameObject = ((Component)collider_obj).gameObject; while ((Object)(object)gameObject != (Object)null) { if (gameObject.tag == "Enemy") { return true; } if ((Object)(object)gameObject.transform.parent == (Object)null) { return false; } gameObject = ((Component)gameObject.transform.parent).gameObject; } return false; } } [Serializable] public class dotATSequence { public int totalFrames = 0; public int firstFrame = 0; public int startingFrame = 0; public bool randomly = false; } [ExecuteInEditMode] public class DotAnimatedTexture : MonoBehaviour { public int materialTotalFrames; public int activeSequence = 0; public List<dotATSequence> sequences; public float FPS = 10f; public bool showWarnings = false; private Renderer _renderer = null; private int materialTileRows = 0; private int materialTileCols = 0; private int prevIndex = -1; private void Start() { Init(); } private void Init() { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_renderer == (Object)null) { _renderer = ((Component)this).GetComponent<Renderer>(); } Material val = (((Object)(object)_renderer == (Object)null) ? null : _renderer.sharedMaterial); if ((Object)(object)val == (Object)null) { materialTileRows = (materialTileCols = 0); return; } Vector2 mainTextureScale = val.mainTextureScale; materialTileRows = ((!(mainTextureScale.y > 0f)) ? 1 : Mathf.RoundToInt(1f / mainTextureScale.y)); materialTileCols = ((!(mainTextureScale.x > 0f)) ? 1 : Mathf.RoundToInt(1f / mainTextureScale.x)); } private void Update() { ForceUpdate(force: false); } public void ForceUpdate(bool force = true) { //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: 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_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: 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_021b: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) bool isPlaying = Application.isPlaying; if (!isPlaying) { Init(); } materialTotalFrames = materialTileRows * materialTileCols; if (materialTotalFrames == 0 || sequences == null || activeSequence + 1 > sequences.Count) { return; } int totalFrames = sequences[activeSequence].totalFrames; int startingFrame = sequences[activeSequence].startingFrame; int firstFrame = sequences[activeSequence].firstFrame; bool randomly = sequences[activeSequence].randomly; if (totalFrames == 0 || totalFrames + firstFrame > materialTileCols * materialTileRows || (Object)(object)_renderer == (Object)null) { return; } Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(1f / (float)materialTileCols, 1f / (float)materialTileRows); int num; if (isPlaying) { num = ((int)(Time.time * FPS) + startingFrame) % totalFrames; } else { num = startingFrame % totalFrames; Vector2 mainTextureScale = _renderer.sharedMaterial.mainTextureScale; int num2 = 0; if (mainTextureScale.x * mainTextureScale.y != 0f) { num2 = Mathf.RoundToInt(1f / (mainTextureScale.x * mainTextureScale.y)); } materialTotalFrames = num2; } if (firstFrame + num != prevIndex) { prevIndex = firstFrame + num; if (randomly && isPlaying) { num = Mathf.RoundToInt(Random.value * (float)(totalFrames - 1)); } num += firstFrame; Vector2 mainTextureOffset = default(Vector2); ((Vector2)(ref mainTextureOffset))..ctor((float)(num % materialTileCols) * val.x, 1f - val.y - (float)(num / materialTileCols) * val.y); if (isPlaying) { _renderer.material.mainTextureOffset = mainTextureOffset; } } } } public enum dotHskDoorStats { none = 0, closed = 1, broken = 2, off = 4, blocked = 8 } public enum dotHskDoorMode { active = 1, activeOpen = 0, blocked = 9, brokenOpen = 6, brokenClosed = 7, inactiveOpen = 4, inactiveClosed = 5 } [ExecuteInEditMode] public class DotHskDoor : MonoBehaviour { public dotHskDoorMode mode = dotHskDoorMode.active; public DotHskDoorSlider doorScript; private dotHskDoorMode prevMode = dotHskDoorMode.active; private bool first = true; private void Update() { if ((Object)(object)doorScript != (Object)null && (prevMode != mode || first)) { if (doorScript.setMode(mode, first)) { prevMode = mode; } else { mode = prevMode; } first = false; } } } public class DotHskDoorBase : DotHskDoorsEventsClass { [Header("Sounds")] public AudioSource audioSource; public AudioClip openSound; public AudioClip closeSound; public AudioClip blockedSound; [Header("Lights")] public Color blockedColor = new Color(1f, 0f, 0f); public Color activeColor = new Color(0f, 1f, 4f / 85f); public Light[] lights; [Header("Glass")] public Renderer doorGlass = null; public Material glassOn = null; public Material glassBlocked = null; public Material glassOff = null; private float[] soundLen = new float[3]; public void Start() { if ((Object)(object)closeSound != (Object)null) { soundLen[0] = closeSound.length; } if ((Object)(object)openSound != (Object)null) { soundLen[2] = openSound.length; } } public override void OnStartMotion(float fromPos, int dir) { if ((Object)(object)audioSource != (Object)null && soundLen[dir + 1] > 0f) { audioSource.clip = ((dir == 1) ? openSound : closeSound); audioSource.time = ((fromPos == 0f) ? 0f : ((dir == 1) ? fromPos : (1f - fromPos))); audioSource.Play(); } } public override void OnBlock() { if ((Object)(object)audioSource != (Object)null && (Object)(object)blockedSound != (Object)null) { audioSource.clip = blockedSound; audioSource.time = 0f; audioSource.Play(); } } public override void OnChangeMode(bool isOff, bool isBlocked) { //IL_00a2: 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_0084: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)doorGlass != (Object)null) { if (isOff) { doorGlass.sharedMaterial = glassOff; } else if (isBlocked) { doorGlass.sharedMaterial = glassBlocked; } else { doorGlass.sharedMaterial = glassOn; } } if (lights.Length != 0) { for (int i = 0; i < lights.Length; i++) { lights[i].color = (Color)(isOff ? new Color(0f, 0f, 0f) : (isBlocked ? blockedColor : activeColor)); ((Behaviour)lights[i]).enabled = !isOff; } } } public override void OnInit() { } public override void OnStop() { } } public class DotHskDoorBeep : MonoBehaviour { public AudioSource audioSource; public AudioClip beepSound; private void OnTriggerEnter(Collider other) { if (Common.CollideWithPlayer(other) && (Object)(object)audioSource != (Object)null && (Object)(object)beepSound != (Object)null) { audioSource.clip = beepSound; audioSource.time = 0f; audioSource.Play(); } if (Common.CollideWithEnemy(other) && (Object)(object)audioSource != (Object)null && (Object)(object)beepSound != (Object)null) { audioSource.clip = beepSound; audioSource.time = 0f; audioSource.Play(); } } } [Serializable] public class dotHskDoorFlap { public Vector3 openPos = default(Vector3); public Vector3 closedPos = default(Vector3); public Vector3 almostOpenPos = default(Vector3); public Vector3 almostClosedPos = default(Vector3); public Transform flap; } public abstract class DotHskDoorsEventsClass : MonoBehaviour { [HideInInspector] public DotHskDoorSlider door; public abstract void OnInit(); public abstract void OnStartMotion(float fromPos, int dir); public abstract void OnChangeMode(bool isOff, bool isBlocked); public abstract void OnBlock(); public abstract void OnStop(); } [ExecuteInEditMode] public class DotHskDoorSlider : MonoBehaviour { public List<dotHskDoorFlap> doorFlaps; public float motionTime = 1f; [HideInInspector] public DotHskDoorsEventsClass doorEvents; private int dir = 0; public float curPos = 0f; private float targetPos = 0f; private bool isOff = false; private bool isBlocked = false; public bool getIsFullyOpen() { return curPos == 1f; } public bool getIsFullyClosed() { return curPos == 0f; } public bool getIsStopped() { return dir == 0; } private void Start() { Init(); } private void Update() { if (Application.isPlaying) { if (dir != 0) { float num = curPos + (float)dir * ((motionTime == 0f) ? 1f : (1f / motionTime)) * Time.deltaTime; if ((float)dir * (targetPos - num) < 0.01f) { num = targetPos; dir = 0; } moveTo(num); if ((Object)(object)doorEvents != (Object)null && dir == 0) { doorEvents.OnStop(); } } } else { Init(); } } private void Init() { if ((Object)(object)doorEvents == (Object)null) { doorEvents = ((Component)this).GetComponent<DotHskDoorsEventsClass>(); if ((Object)(object)doorEvents != (Object)null) { doorEvents.door = this; doorEvents.OnInit(); } } } private void moveTo(float newPos) { //IL_0034: 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_004b: Unknown result type (might be due to invalid IL or missing references) if (newPos != curPos) { for (int i = 0; i < doorFlaps.Count; i++) { doorFlaps[i].flap.localPosition = Vector3.Lerp(doorFlaps[i].closedPos, doorFlaps[i].openPos, newPos); } curPos = newPos; } } public bool setMode(dotHskDoorMode mode, bool isInit) { //IL_0099: 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_009e: 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_00a7: 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) bool flag = (mode & dotHskDoorMode.active) != 0; isOff = (mode & dotHskDoorMode.inactiveOpen) != 0; isBlocked = (mode & (dotHskDoorMode)8) != 0; if ((Object)(object)doorEvents != (Object)null) { doorEvents.OnChangeMode(isOff, isBlocked); } if ((mode & (dotHskDoorMode)2) != 0) { for (int i = 0; i < doorFlaps.Count; i++) { Vector3 val2 = (doorFlaps[i].flap.localPosition = (flag ? doorFlaps[i].almostClosedPos : doorFlaps[i].almostOpenPos)); Vector3 val3 = val2; float magnitude = ((Vector3)(ref doorFlaps[i].openPos)).magnitude; curPos = ((magnitude == 0f) ? 0f : (((Vector3)(ref val3)).magnitude / magnitude)); } dir = 0; } else { float num = (targetPos = (flag ? 0f : 1f)); if (Application.isPlaying && num != curPos && !isInit) { dir = ((num > curPos) ? 1 : (-1)); if ((Object)(object)doorEvents != (Object)null) { doorEvents.OnStartMotion(curPos, dir); } } else { dir = 0; moveTo(num); } } return true; } public void operate(bool open) { if (isOff) { return; } if (isBlocked) { if ((Object)(object)doorEvents != (Object)null && open) { doorEvents.OnBlock(); } return; } float num = (open ? 1f : 0f); if (targetPos != num) { dir = ((curPos < (targetPos = num)) ? 1 : (-1)); if ((Object)(object)doorEvents != (Object)null) { doorEvents.OnStartMotion(curPos, dir); } } } private void OnTriggerEnter(Collider other) { if (Common.CollideWithPlayer(other)) { operate(open: true); } if (Common.CollideWithEnemy(other)) { operate(open: true); } } private void OnTriggerExit(Collider other) { if (Common.CollideWithPlayer(other)) { operate(open: false); } if (Common.CollideWithEnemy(other)) { operate(open: false); } } } [BepInPlugin("Tolian.HyperionStation", "Hyperion Station", "0.3.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public const string GUID = "Tolian.HyperionStation"; public const string NAME = "Hyperion Station"; public const string VERSION = "0.3.0"; private void Awake() { string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); AssetBundle val = AssetBundle.LoadFromFile(Path.Combine(directoryName, "hyperionstation")); if ((Object)(object)val == (Object)null) { ((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load Interior Dungeon assets."); return; } ((BaseUnityPlugin)this).Logger.LogInfo((object)"Interior Assets loaded successfully"); ExtendedMod val2 = val.LoadAsset<ExtendedMod>("Assets/LethalCompany/Mods/HyperStation/LLL/HyperStation.asset"); PatchedContent.RegisterExtendedMod(val2); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded Extended DungeonFlow"); } } public static class PluginInfo { public const string PLUGIN_GUID = "HyperionStation"; public const string PLUGIN_NAME = "HyperionStation"; public const string PLUGIN_VERSION = "1.0.0"; } }
TolianInterior/TeraSpace/TeraScript.dll
Decompiled 2 weeks agousing System; using System.Collections; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using LethalLevelLoader; using Microsoft.CodeAnalysis; using UnityEngine; [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("TeraScript")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("A template for Lethal Company")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("TeraScript")] [assembly: AssemblyTitle("TeraScript")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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 TeraScript { public class DSBlinking : MonoBehaviour { [Serializable] public class DSBlinkingValues { public enum SwitchMode { simple, multi, broken } public bool IsActive; [Header("Max HDR bright")] [ColorUsage(true, true)] public Color MaxBright; [Header("blinking")] public float SwitchTime = 0.1f; [Header("Simple blinking, Increasing Blinking, Broken lamp")] public SwitchMode SwitchModes = SwitchMode.simple; [HideInInspector] public int mode; [HideInInspector] public int count; [Header("Shared Material")] public Material SharedMaterial; [Header("Shader String")] public string WorkingString = "_EmissiveColor"; public IEnumerator ColorSwitch(float random) { while (true) { yield return (object)new WaitForSeconds(SwitchTime + random); if (SwitchModes == SwitchMode.simple) { mode = 1 - mode; if (mode == 0) { SharedMaterial.SetColor(WorkingString, Color.black); } else { SharedMaterial.SetColor(WorkingString, MaxBright); } } else if (SwitchModes == SwitchMode.multi) { mode++; if (mode > 2) { mode = 0; } if (mode == 0) { SharedMaterial.SetColor(WorkingString, Color.black); } else if (mode == 1) { SharedMaterial.SetColor(WorkingString, MaxBright * 0.5f); } else { SharedMaterial.SetColor(WorkingString, MaxBright); } } else { if (count < 10) { mode++; if (mode > 2) { mode = 0; } if (mode == 0) { SharedMaterial.SetColor(WorkingString, Color.black); } else if (mode == 1) { SharedMaterial.SetColor(WorkingString, MaxBright * 0.5f); } else { SharedMaterial.SetColor(WorkingString, MaxBright); } } else if (count < 20) { SharedMaterial.SetColor(WorkingString, MaxBright * 0.5f); } else { SharedMaterial.SetColor(WorkingString, MaxBright); } count++; if (count > 50) { count = 0; } } random = 0f; } } } public DSBlinkingValues[] _DSBlinkingValues; [Header("Shader String")] public string WorkingString = "_EmissiveColor"; private void Awake() { Random.InitState((int)DateTime.Now.Ticks * 1000); } private void Start() { for (int i = 0; i < _DSBlinkingValues.Length; i++) { if (_DSBlinkingValues[i].IsActive) { float random = Random.Range(0.07f, 0.95f); ((MonoBehaviour)this).StartCoroutine(_DSBlinkingValues[i].ColorSwitch(random)); } } } private void Update() { } private void OnDestroy() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < _DSBlinkingValues.Length; i++) { if (_DSBlinkingValues[i].IsActive) { _DSBlinkingValues[i].SharedMaterial.SetColor(WorkingString, _DSBlinkingValues[i].MaxBright); } } } } public class DSCaster : MonoBehaviour { [Header("'Water' - one of built in Unity layers:")] public string InteractLayer; [Space(10f)] public GameObject Canvas; public float RayLength = 1f; private int buttonsMask; private Material PrevMat = null; private Color PrevColor; [Header("Shader String")] public string WorkingString = "_EmissiveColor"; private void Awake() { buttonsMask = LayerMask.GetMask(new string[1] { InteractLayer }); if (Object.op_Implicit((Object)(object)Canvas)) { Canvas.SetActive(false); } } private void Start() { } private void Update() { //IL_0007: 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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: 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_00f0: 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_010c: 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) RaycastHit val = default(RaycastHit); if (Physics.Linecast(((Component)this).transform.position, ((Component)this).transform.TransformPoint(new Vector3(0f, 0f, RayLength)), ref val, buttonsMask)) { if (Object.op_Implicit((Object)(object)Canvas)) { Canvas.SetActive(true); } if (Input.GetMouseButtonUp(0)) { ((Component)((RaycastHit)(ref val)).collider).gameObject.GetComponent<DSTrigger>().DSTriggerExecute(); } Material val2 = ((Component)((RaycastHit)(ref val)).collider).gameObject.GetComponent<Renderer>().materials[0]; Color color = val2.GetColor(WorkingString); if ((Object)(object)PrevMat != (Object)(object)val2) { if (Object.op_Implicit((Object)(object)PrevMat)) { PrevMat.SetColor(WorkingString, PrevColor); } PrevMat = val2; PrevColor = color; val2.SetColor(WorkingString, new Color(0f, 1.27f, 5f)); } } else { if (Object.op_Implicit((Object)(object)Canvas)) { Canvas.SetActive(false); } if (Object.op_Implicit((Object)(object)PrevMat)) { PrevMat.SetColor(WorkingString, PrevColor); PrevMat = null; } } } private void FixedUpdate() { } } public class DSElevator : MonoBehaviour { [Header("Current mesh position, e.g. 1,2,3,4.. floor (from 1)")] public int StartFloor; [Space(10f)] public int TotalFloors; [Header("smaller = faster")] public float Speed = 5f; [HideInInspector] public bool IsMoving; [HideInInspector] public bool CallerBusy; [HideInInspector] public int CurrentFloor; private float TimeStart; private Vector3 StartPos; private Vector3 EndPos; private void Start() { CurrentFloor = StartFloor; } private void Update() { //IL_0029: 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_0035: Unknown result type (might be due to invalid IL or missing references) if (IsMoving) { float num = Time.time - TimeStart; float num2 = num / Speed; ((Component)this).transform.position = Vector3.Lerp(StartPos, EndPos, num2); if (num2 >= 1f) { IsMoving = false; } } } public void StartMoving(bool direction) { //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_00cf: 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_00de: 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_00e8: 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_00b7: 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_00c1: Unknown result type (might be due to invalid IL or missing references) if (!(!IsMoving & !CallerBusy)) { return; } if (direction) { if (CurrentFloor + 1 > TotalFloors) { return; } CurrentFloor++; } else { if (CurrentFloor - 1 < 1) { return; } CurrentFloor--; } IsMoving = true; TimeStart = Time.time; StartPos = ((Component)this).transform.position; if (direction) { EndPos = ((Component)this).transform.position + Vector3.up * 4f; } else { EndPos = ((Component)this).transform.position - Vector3.up * 4f; } } } public class DSElevatorCaller : MonoBehaviour { [Header("!caller doesn't work with Y pos < 0 (negative numbers)!")] public DSElevator _DSElevator; [Header("smaller = faster")] public float Speed = 5f; private bool IsMoving; private float TimeStart; private Vector3 StartPos; private Vector3 EndPos; private void Start() { //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_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) StartPos = Vector3.zero; EndPos = Vector3.zero; } private void Update() { //IL_003b: 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_0076: Unknown result type (might be due to invalid IL or missing references) if (IsMoving) { float num = Time.time - TimeStart; float num2 = num / Speed; ((Component)_DSElevator).transform.position = new Vector3(((Component)_DSElevator).transform.position.x, Mathf.Lerp(StartPos.y, EndPos.y, num2), ((Component)_DSElevator).transform.position.z); if (num2 >= 1f) { IsMoving = false; _DSElevator.CallerBusy = false; } } } public void StartMoving() { //IL_0032: 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) if (!(!IsMoving & !_DSElevator.IsMoving)) { return; } StartPos.y = ((Component)_DSElevator).transform.position.y; EndPos.y = (int)((Component)this).transform.position.y; EndPos.y = (int)EndPos.y / 4; EndPos.y *= 4f; if (EndPos.y == StartPos.y) { return; } IsMoving = true; _DSElevator.CallerBusy = true; TimeStart = Time.time; int num = 0; num = ((!((StartPos.y < 0f) | (EndPos.y < 0f))) ? ((int)Mathf.Abs(StartPos.y - EndPos.y)) : ((int)(Mathf.Abs(StartPos.y) + Mathf.Abs(EndPos.y)))); num /= 4; if (StartPos.y != EndPos.y) { if (StartPos.y > EndPos.y) { _DSElevator.CurrentFloor -= num; } else { _DSElevator.CurrentFloor += num; } } } } internal class DSGates : MonoBehaviour { public enum StartStates { opened, closed } public string AnimationOpen; public string AnimationClose; public StartStates StartState = StartStates.closed; private bool CurrentState; private void Start() { if (StartState == StartStates.closed) { ((Component)this).GetComponent<Animation>().Play(AnimationClose); CurrentState = true; } else { ((Component)this).GetComponent<Animation>().Play(AnimationOpen); CurrentState = false; } } private void Update() { } public void StartOpenClose() { if (((Component)this).GetComponent<Animation>().isPlaying) { return; } CurrentState = !CurrentState; if (CurrentState) { if (!((Component)this).GetComponent<Animation>().isPlaying) { ((Component)this).GetComponent<Animation>().Play(AnimationClose); } } else if (!((Component)this).GetComponent<Animation>().isPlaying) { ((Component)this).GetComponent<Animation>().Play(AnimationOpen); } } } public class DSReparent : MonoBehaviour { private void Start() { } private void Update() { } private void OnTriggerEnter(Collider other) { if (Object.op_Implicit((Object)(object)((Component)other).gameObject.GetComponent<CharacterController>())) { ((Component)other).gameObject.transform.parent = ((Component)this).transform; } } private void OnTriggerExit(Collider other) { if (Object.op_Implicit((Object)(object)((Component)other).gameObject.GetComponent<CharacterController>())) { ((Component)other).gameObject.transform.parent = null; } } } public class DSScrollTexture : MonoBehaviour { [Header("Texture Offsets")] public Vector2[] MoveRate; [Header("Shared Materials")] public Material[] SharedMaterials; [Header("Shader String")] public string WorkingString = "_EmissiveColorMap"; private void Start() { } private void Update() { //IL_0014: 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_001a: 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_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_0039: 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_006b: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < SharedMaterials.Length; i++) { Vector2 textureOffset = SharedMaterials[i].GetTextureOffset(WorkingString); textureOffset += MoveRate[i] * Time.deltaTime; textureOffset.x %= 50f; textureOffset.y %= 50f; SharedMaterials[i].SetTextureOffset(WorkingString, textureOffset); } } private void OnDestroy() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < SharedMaterials.Length; i++) { SharedMaterials[i].SetTextureOffset(WorkingString, Vector2.zero); } } } public class DSTrigger : MonoBehaviour { public enum ExecMode { elevator_up, elevator_dwn, gate, elevator_call } public bool IsActive = true; public GameObject Executor; public ExecMode ExecModes = ExecMode.gate; private void Start() { } private void Update() { } public void DSTriggerExecute() { if (IsActive) { if (ExecModes == ExecMode.elevator_up) { Executor.GetComponent<DSElevator>().StartMoving(direction: true); } else if (ExecModes == ExecMode.elevator_dwn) { Executor.GetComponent<DSElevator>().StartMoving(direction: false); } else if (ExecModes == ExecMode.gate) { Executor.GetComponent<DSGates>().StartOpenClose(); } else if (ExecModes == ExecMode.elevator_call) { Executor.GetComponent<DSElevatorCaller>().StartMoving(); } } } } public class DSTvMovie : MonoBehaviour { [Serializable] public class DSTvMovieValues { public bool IsActive; [Header("max emission bright")] public float MaxBright = 3f; [Header("frames speed")] public float Speed; [Header("shared material")] public Material SharedMaterial; [Header("frames")] public Texture[] Frames; [HideInInspector] public int i; } public DSTvMovieValues[] _DSTvMovieValues; [Header("Shader String")] public string WorkingString = "_EmissiveColor"; [Header("Shader String 2")] public string WorkingString2 = "_EmissiveColorMap"; private void Awake() { Random.InitState((int)DateTime.Now.Ticks * 1000); } private void Start() { //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < _DSTvMovieValues.Length; i++) { if (_DSTvMovieValues[i].IsActive) { float num = Random.Range(1.5f, _DSTvMovieValues[i].MaxBright); float num2 = Random.Range(0.2f, 0.8f); float num3 = Random.Range(0.2f, 0.8f); float num4 = Random.Range(0.2f, 0.8f); _DSTvMovieValues[i].SharedMaterial.SetColor(WorkingString, new Color(num + num2, num + num3, num + num4)); } else { _DSTvMovieValues[i].SharedMaterial.SetColor(WorkingString, Color.black); } } } private void Update() { for (int i = 0; i < _DSTvMovieValues.Length; i++) { if (_DSTvMovieValues[i].IsActive) { _DSTvMovieValues[i].i = (int)(Time.time * _DSTvMovieValues[i].Speed); _DSTvMovieValues[i].i = _DSTvMovieValues[i].i % _DSTvMovieValues[i].Frames.Length; _DSTvMovieValues[i].SharedMaterial.SetTexture(WorkingString2, _DSTvMovieValues[i].Frames[_DSTvMovieValues[i].i]); } } } private void OnDestroy() { for (int i = 0; i < _DSTvMovieValues.Length; i++) { if (_DSTvMovieValues[i].IsActive) { } } } } [BepInPlugin("Tolian.TeraSpace", "TeraSpace", "0.8.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public const string GUID = "Tolian.TeraSpace"; public const string NAME = "TeraSpace"; public const string VERSION = "0.8.0"; private void Awake() { string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); AssetBundle val = AssetBundle.LoadFromFile(Path.Combine(directoryName, "teraspace")); if ((Object)(object)val == (Object)null) { ((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load Interior Dungeon assets."); return; } ((BaseUnityPlugin)this).Logger.LogInfo((object)"Interior Assets loaded successfully"); ExtendedDungeonFlow val2 = val.LoadAsset<ExtendedDungeonFlow>("Assets/LethalCompany/Mods/TeraSpace/TeraDungFlow.asset"); PatchedContent.RegisterExtendedDungeonFlow(val2); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded Extended DungeonFlow"); } } public static class PluginInfo { public const string PLUGIN_GUID = "TeraScript"; public const string PLUGIN_NAME = "TeraScript"; public const string PLUGIN_VERSION = "1.0.0"; } }