Decompiled source of Rechargable Handcopters v1.0.1
Rechargable_Handcopters.dll
Decompiled 4 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; using System.Text; using System.Xml; using System.Xml.Serialization; using BepInEx; using BepInEx.Logging; using FistVR; using HarmonyLib; using OtherLoader; using UnityEditor; using UnityEngine; using UnityEngine.Profiling; using UnityEngine.Rendering; using UnityEngine.UI; [assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] namespace DrDog { public class PowerHandcopter : MonoBehaviour { [GradientHDR] public Gradient colorGrad; public Renderer Rend; public FVRPhysicalObject Copter; public AudioEvent AudEvent_Overheat; public AudioEvent AudEvent_AllSet; [NonSerialized] [HideInInspector] public float m_heat; [NonSerialized] [HideInInspector] public float m_timeSinceLastShot = 1f; [NonSerialized] [HideInInspector] public bool m_isOverheating; [NonSerialized] [HideInInspector] public float m_coolTime = 3.5f; public void OnShotFired(FVRPhysicalObject obj) { if (!((Object)(object)obj != (Object)(object)Copter)) { AddHeat(); } } public void AddHeat() { m_heat += 0.01f; m_timeSinceLastShot = 0f; if ((double)m_heat >= 1.0 && !m_isOverheating) { Overheat(); } m_heat = Mathf.Clamp(m_heat, 0f, 1f); } public void Overheat() { m_isOverheating = true; m_coolTime = 3.5f; } public void Reset() { m_isOverheating = false; m_heat = 0f; } public void Update() { //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) if (!m_isOverheating) { if ((double)m_timeSinceLastShot < 0.30000001192092896) { m_timeSinceLastShot += Time.deltaTime; } else if ((double)m_heat > 0.0) { m_heat -= Time.deltaTime; } } else if ((double)m_coolTime > 0.0) { m_coolTime -= Time.deltaTime; } else { Reset(); } float num = Mathf.Lerp(0.5f, -0.5f, m_heat); Rend.material.SetColor("_EmissionColor", colorGrad.Evaluate(m_heat)); Rend.material.SetTextureOffset("_IncandescenceMap", new Vector2(0f, num)); } public void Start() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown GM.CurrentSceneSettings.ShotFiredEvent += new ShotFired(OnShotFired); } public void OnDisable() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown GM.CurrentSceneSettings.ShotFiredEvent -= new ShotFired(OnShotFired); } } public class RechargeableHandcopter : FVRPhysicalObject { [Header("Trigger")] public Transform Trigger; public Axis TriggerAxis; public InterpStyle TriggerInterpStyle; public Vector2 TriggerVars; [NonSerialized] [HideInInspector] public float m_triggerVal; public Transform RockerButton; public HingeJoint RotorHinge; public float MaxSpeed = 1440f; public float MaxForce = 200f; [NonSerialized] [HideInInspector] public bool m_isTriggerheld; [NonSerialized] [HideInInspector] public float m_rockerRot; public AudioSource AudSource_Rotor; public List<Rigidbody> SpinRBs; [NonSerialized] [HideInInspector] public float motorPower; [NonSerialized] [HideInInspector] public int targetPower = 2; [NonSerialized] [HideInInspector] public TransformVelocity myDel; [NonSerialized] [HideInInspector] public bool m_isRegistered; [Header("Power System")] [GradientHDR] public Gradient colorGrad; public Renderer Rend; public FVRPhysicalObject Copter; public AudioSource AudSource_Overheat; public AudioSource AudSource_AllSet; [NonSerialized] [HideInInspector] public bool isOverheating = false; [NonSerialized] [HideInInspector] public float timeSinceRelease = 0f; [NonSerialized] [HideInInspector] public float currentTime = 0f; [NonSerialized] [HideInInspector] public float currentCool = 0f; public float travelTime = 5f; public float coolTime = 4f; public float highMult = 3f; public float lowMult = 0.7f; public float curMult = 1f; public float highSpeedVelMult = 0.8f; public float rateOfDissipation = 2f; public float timeUntilDissipation = 1f; private void Start() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown ((FVRInteractiveObject)this).Start(); myDel = new TransformVelocity(TransformVel); for (int i = 0; i < SpinRBs.Count; i++) { SpinRBs[i].maxAngularVelocity = 50f; } } public override void OnDestroy() { ((FVRPhysicalObject)this).OnDestroy(); if (myDel != null) { GM.CurrentMovementManager.DeregisterSmoothLocoRestrictor(myDel); } myDel = null; } public override void FVRFixedUpdate() { //IL_002a: 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_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0195: 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_0130: Unknown result type (might be due to invalid IL or missing references) ((FVRPhysicalObject)this).FVRFixedUpdate(); Rend.material.SetColor("_EmissionColor", colorGrad.Evaluate(currentTime / travelTime)); float num = 0f - Mathf.Lerp(0f, 0.13f, currentTime / travelTime); Rend.material.SetTextureOffset("_IncandescenceMap", new Vector2(0f, num)); if (m_isTriggerheld && !isOverheating) { if (targetPower == 1) { curMult = lowMult; } else if (targetPower == 2) { curMult = 1f; } else { curMult = highMult; } currentTime += Time.deltaTime * curMult; if (currentTime > travelTime) { isOverheating = true; JointMotor motor = RotorHinge.motor; ((JointMotor)(ref motor)).targetVelocity = 0f; ((JointMotor)(ref motor)).force = 0f; RotorHinge.motor = motor; motorPower = 0f; AudSource_Overheat.Play(); currentCool = 0f; } else { timeSinceRelease = 0f; JointMotor motor2 = RotorHinge.motor; ((JointMotor)(ref motor2)).targetVelocity = MaxSpeed; ((JointMotor)(ref motor2)).force = MaxForce; RotorHinge.motor = motor2; motorPower = Mathf.Clamp(RotorHinge.velocity / 1500f, 0f, 1f); } } else if (!isOverheating) { timeSinceRelease += Time.deltaTime; if (timeSinceRelease > timeUntilDissipation) { currentTime -= rateOfDissipation * Time.deltaTime; currentTime = Mathf.Clamp(currentTime, 0f, travelTime); } JointMotor motor3 = RotorHinge.motor; ((JointMotor)(ref motor3)).targetVelocity = 0f; ((JointMotor)(ref motor3)).force = 0f; RotorHinge.motor = motor3; motorPower = 0f; } else { currentCool += Time.deltaTime; currentTime = Mathf.Lerp(0f, travelTime, (coolTime - currentCool) / coolTime); if (currentCool > coolTime) { isOverheating = false; currentTime = 0f; currentCool = 0f; AudSource_AllSet.Play(); } } if ((double)motorPower > 0.0) { if (!AudSource_Rotor.isPlaying) { AudSource_Rotor.Play(); } float num2 = 0.8f; if (targetPower == 3) { num2 = 1.1f; } else if (targetPower == 1) { num2 = 0.6f; } AudSource_Rotor.pitch = Mathf.Lerp(AudSource_Rotor.pitch, num2, Time.deltaTime * 6f); if (!m_isRegistered) { m_isRegistered = true; GM.CurrentMovementManager.RegisterSmoothLocoAdder(myDel); } } else { if (m_isRegistered) { m_isRegistered = false; GM.CurrentMovementManager.DeregisterSmoothLocoAdder(myDel); } if (AudSource_Rotor.isPlaying) { AudSource_Rotor.Stop(); } AudSource_Rotor.pitch = 0.8f; } } public void TransformVel(ref Vector3 vel, ref bool isGrounded, ref bool didChange) { //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_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected I4, but got Unknown //IL_007a: 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_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: 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) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0248: 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_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) if ((double)motorPower > 0.0) { float num = 5f; GravityMode playerGravityMode = GM.Options.SimulationOptions.PlayerGravityMode; switch ((int)playerGravityMode) { case 0: num = 9.81f; break; case 1: num = 5f; break; case 2: num = 1.62f; break; case 3: num = 0.001f; break; } float num2 = Vector3.Angle(((Component)this).transform.up, Vector3.up); float num3 = Mathf.InverseLerp(45f, 20f, num2); float num4 = Mathf.Max(1f, num * 1.02f); if (targetPower == 3) { num4 += num * highSpeedVelMult; } else if (targetPower == 1) { num4 = Mathf.Max(0.5f, num * 0.9f); } float num5 = num4 * num3; float num6 = Mathf.InverseLerp(120f, 160f, num2); float num7 = Mathf.Max(1f, num); if (targetPower == 3) { num7 += 2f; } else if (targetPower == 1) { num7 = Mathf.Max(0.5f, num * 0.5f); } float num8 = num7 * num6; Vector3 val = Vector3.ProjectOnPlane(((Component)this).transform.up, Vector3.up); if ((double)((Vector3)(ref val)).magnitude < 0.10000000149011612) { val = Vector3.zero; } else { float num9 = Mathf.Max(1f, num); if (targetPower == 3) { num9 += 2f; } else if (targetPower == 1) { num9 = Mathf.Max(0.5f, num * 0.5f); } val *= num9; } Vector3 val2 = Vector3.zero; if ((double)num5 > 0.0) { val2 += Vector3.up * num5; } if ((double)num8 > 0.0) { val2 += Vector3.down * num8; } Vector3 val3 = (isGrounded ? (val2 + val * 0.1f) : (val2 + val)); vel = val3; didChange = true; } else { didChange = false; } } public void UpdateTriggerAnim() { //IL_002a: 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) ((FVRPhysicalObject)this).SetAnimatedComponent(Trigger, Mathf.Lerp(TriggerVars.x, TriggerVars.y, m_triggerVal), TriggerInterpStyle, TriggerAxis); } public override void UpdateInteraction(FVRViveHand hand) { //IL_00da: 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_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) ((FVRPhysicalObject)this).UpdateInteraction(hand); if (((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin) { float triggerFloat = hand.Input.TriggerFloat; if ((double)m_triggerVal != (double)triggerFloat) { m_triggerVal = triggerFloat; UpdateTriggerAnim(); } } if (((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin) { m_isTriggerheld = hand.Input.TriggerPressed; } float num; if (hand.IsInStreamlinedMode) { if (hand.Input.BYButtonPressed) { num = 12f; targetPower = 3; } else if (hand.Input.AXButtonPressed) { num = -12f; targetPower = 1; } else { num = 0f; targetPower = 2; } } else if (hand.Input.TouchpadPressed) { if ((double)Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) < 45.0) { num = 12f; targetPower = 3; } else if ((double)Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) < 45.0) { num = -12f; targetPower = 1; } else { num = 0f; targetPower = 2; } } else { targetPower = 2; num = 0f; } if ((double)num != (double)m_rockerRot) { m_rockerRot = num; RockerButton.localEulerAngles = new Vector3(m_rockerRot, 0f, 0f); } } public override void EndInteraction(FVRViveHand hand) { ((FVRPhysicalObject)this).EndInteraction(hand); m_triggerVal = 0f; m_isTriggerheld = false; UpdateTriggerAnim(); } } } namespace Dr_Dog_PhD.Rechargable_Handcopters { [BepInPlugin("Dr_Dog_PhD.Rechargable_Handcopters", "Rechargable_Handcopters", "1.0.1")] [BepInProcess("h3vr.exe")] [Description("Built with MeatKit")] [BepInDependency("h3vr.otherloader", "1.3.0")] public class Rechargable_HandcoptersPlugin : BaseUnityPlugin { private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); internal static ManualLogSource Logger; private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; LoadAssets(); } private void LoadAssets() { Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "Dr_Dog_PhD.Rechargable_Handcopters"); OtherLoader.RegisterDirectLoad(BasePath, "Dr_Dog_PhD.Rechargable_Handcopters", "", "", "rechargable_handcopter_low,rechargable_handcopter_med,rechargable_handcopter_high", ""); } } } public class OBJExporter : ScriptableWizard { public bool onlySelectedObjects = false; public bool applyPosition = true; public bool applyRotation = true; public bool applyScale = true; public bool generateMaterials = true; public bool exportTextures = true; public bool splitObjects = true; public bool autoMarkTexReadable = false; public bool objNameAddIdNum = false; private string versionString = "v2.0"; private string lastExportFolder; private bool StaticBatchingEnabled() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown PlayerSettings[] array = Resources.FindObjectsOfTypeAll<PlayerSettings>(); if (array == null) { return false; } SerializedObject val = new SerializedObject((Object[])(object)array); SerializedProperty val2 = val.FindProperty("m_BuildTargetBatching"); for (int i = 0; i < val2.arraySize; i++) { SerializedProperty arrayElementAtIndex = val2.GetArrayElementAtIndex(i); if (arrayElementAtIndex == null) { continue; } IEnumerator enumerator = arrayElementAtIndex.GetEnumerator(); if (enumerator == null) { continue; } while (enumerator.MoveNext()) { SerializedProperty val3 = (SerializedProperty)enumerator.Current; if (val3 != null && val3.name == "m_StaticBatching") { return val3.boolValue; } } } return false; } private void OnWizardUpdate() { ((ScriptableWizard)this).helpString = "Aaro4130's OBJ Exporter " + versionString; } private Vector3 RotateAroundPoint(Vector3 point, Vector3 pivot, Quaternion angle) { //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_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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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) return angle * (point - pivot) + pivot; } private Vector3 MultiplyVec3s(Vector3 v1, Vector3 v2) { //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_0039: Unknown result type (might be due to invalid IL or missing references) return new Vector3(v1.x * v2.x, v1.y * v2.y, v1.z * v2.z); } private void OnWizardCreate() { if (StaticBatchingEnabled() && Application.isPlaying) { EditorUtility.DisplayDialog("Error", "Static batching is enabled. This will cause the export file to look like a mess, as well as be a large filesize. Disable this option, and restart the player, before continuing.", "OK"); return; } if (autoMarkTexReadable) { int num = EditorUtility.DisplayDialogComplex("Warning", "This will convert all textures to Advanced type with the read/write option set. This is not reversible and will permanently affect your project. Continue?", "Yes", "No", "Cancel"); if (num > 0) { return; } } string @string = EditorPrefs.GetString("a4_OBJExport_lastPath", ""); string string2 = EditorPrefs.GetString("a4_OBJExport_lastFile", "unityexport.obj"); string text = EditorUtility.SaveFilePanel("Export OBJ", @string, string2, "obj"); if (text.Length > 0) { FileInfo fileInfo = new FileInfo(text); EditorPrefs.SetString("a4_OBJExport_lastFile", fileInfo.Name); EditorPrefs.SetString("a4_OBJExport_lastPath", fileInfo.Directory.FullName); Export(text); } } private void Export(string exportPath) { //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_0307: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0343: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_034b: Unknown result type (might be due to invalid IL or missing references) //IL_034d: Unknown result type (might be due to invalid IL or missing references) //IL_035c: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0386: Unknown result type (might be due to invalid IL or missing references) //IL_0397: Unknown result type (might be due to invalid IL or missing references) //IL_039c: Unknown result type (might be due to invalid IL or missing references) //IL_03a1: Unknown result type (might be due to invalid IL or missing references) //IL_0463: Unknown result type (might be due to invalid IL or missing references) //IL_0468: Unknown result type (might be due to invalid IL or missing references) //IL_046b: Unknown result type (might be due to invalid IL or missing references) //IL_046d: Unknown result type (might be due to invalid IL or missing references) //IL_03b0: Unknown result type (might be due to invalid IL or missing references) //IL_03be: Unknown result type (might be due to invalid IL or missing references) //IL_03c3: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_047c: Unknown result type (might be due to invalid IL or missing references) //IL_048a: Unknown result type (might be due to invalid IL or missing references) //IL_048f: Unknown result type (might be due to invalid IL or missing references) //IL_0493: Unknown result type (might be due to invalid IL or missing references) //IL_0498: Unknown result type (might be due to invalid IL or missing references) //IL_049d: Unknown result type (might be due to invalid IL or missing references) //IL_04ad: Unknown result type (might be due to invalid IL or missing references) //IL_04af: Unknown result type (might be due to invalid IL or missing references) //IL_04c0: Unknown result type (might be due to invalid IL or missing references) //IL_04c5: Unknown result type (might be due to invalid IL or missing references) //IL_04ca: Unknown result type (might be due to invalid IL or missing references) //IL_0565: Unknown result type (might be due to invalid IL or missing references) //IL_056a: Unknown result type (might be due to invalid IL or missing references) Dictionary<string, bool> dictionary = new Dictionary<string, bool>(); FileInfo fileInfo = new FileInfo(exportPath); lastExportFolder = fileInfo.Directory.FullName; string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(exportPath); EditorUtility.DisplayProgressBar("Exporting OBJ", "Please wait.. Starting export.", 0f); MeshFilter[] array; if (onlySelectedObjects) { List<MeshFilter> list = new List<MeshFilter>(); GameObject[] gameObjects = Selection.gameObjects; foreach (GameObject val in gameObjects) { MeshFilter component = val.GetComponent<MeshFilter>(); if ((Object)(object)component != (Object)null) { list.Add(component); } } array = list.ToArray(); } else { array = Object.FindObjectsOfType(typeof(MeshFilter)) as MeshFilter[]; } if (Application.isPlaying) { MeshFilter[] array2 = array; foreach (MeshFilter val2 in array2) { MeshRenderer component2 = ((Component)val2).gameObject.GetComponent<MeshRenderer>(); if ((Object)(object)component2 != (Object)null && ((Renderer)component2).isPartOfStaticBatch) { EditorUtility.ClearProgressBar(); EditorUtility.DisplayDialog("Error", "Static batched object detected. Static batching is not compatible with this exporter. Please disable it before starting the player.", "OK"); return; } } } StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder2 = new StringBuilder(); stringBuilder.AppendLine("# Export of " + Application.loadedLevelName); stringBuilder.AppendLine("# from Aaro4130 OBJ Exporter " + versionString); if (generateMaterials) { stringBuilder.AppendLine("mtllib " + fileNameWithoutExtension + ".mtl"); } float num = array.Length + 1; int num2 = 0; for (int k = 0; k < array.Length; k++) { string name = ((Object)((Component)array[k]).gameObject).name; float num3 = (float)(k + 1) / num; EditorUtility.DisplayProgressBar("Exporting objects... (" + Mathf.Round(num3 * 100f) + "%)", "Exporting object " + name, num3); MeshFilter val3 = array[k]; MeshRenderer component3 = ((Component)array[k]).gameObject.GetComponent<MeshRenderer>(); if (splitObjects) { string text = name; if (objNameAddIdNum) { text = text + "_" + k; } stringBuilder.AppendLine("g " + text); } if ((Object)(object)component3 != (Object)null && generateMaterials) { Material[] sharedMaterials = ((Renderer)component3).sharedMaterials; foreach (Material val4 in sharedMaterials) { if (!dictionary.ContainsKey(((Object)val4).name)) { dictionary[((Object)val4).name] = true; stringBuilder2.Append(MaterialToString(val4)); stringBuilder2.AppendLine(); } } } Mesh sharedMesh = val3.sharedMesh; int num4 = (int)Mathf.Clamp(((Component)val3).gameObject.transform.lossyScale.x * ((Component)val3).gameObject.transform.lossyScale.z, -1f, 1f); Vector3[] vertices = sharedMesh.vertices; foreach (Vector3 val5 in vertices) { Vector3 val6 = val5; if (applyScale) { val6 = MultiplyVec3s(val6, ((Component)val3).gameObject.transform.lossyScale); } if (applyRotation) { val6 = RotateAroundPoint(val6, Vector3.zero, ((Component)val3).gameObject.transform.rotation); } if (applyPosition) { val6 += ((Component)val3).gameObject.transform.position; } val6.x *= -1f; stringBuilder.AppendLine("v " + val6.x + " " + val6.y + " " + val6.z); } Vector3[] normals = sharedMesh.normals; foreach (Vector3 val7 in normals) { Vector3 val8 = val7; if (applyScale) { Vector3 v = val8; Vector3 lossyScale = ((Component)val3).gameObject.transform.lossyScale; val8 = MultiplyVec3s(v, ((Vector3)(ref lossyScale)).normalized); } if (applyRotation) { val8 = RotateAroundPoint(val8, Vector3.zero, ((Component)val3).gameObject.transform.rotation); } val8.x *= -1f; stringBuilder.AppendLine("vn " + val8.x + " " + val8.y + " " + val8.z); } Vector2[] uv = sharedMesh.uv; for (int num5 = 0; num5 < uv.Length; num5++) { Vector2 val9 = uv[num5]; stringBuilder.AppendLine("vt " + val9.x + " " + val9.y); } for (int num6 = 0; num6 < sharedMesh.subMeshCount; num6++) { if ((Object)(object)component3 != (Object)null && num6 < ((Renderer)component3).sharedMaterials.Length) { string name2 = ((Object)((Renderer)component3).sharedMaterials[num6]).name; stringBuilder.AppendLine("usemtl " + name2); } else { stringBuilder.AppendLine("usemtl " + name + "_sm" + num6); } int[] triangles = sharedMesh.GetTriangles(num6); for (int num7 = 0; num7 < triangles.Length; num7 += 3) { int index = triangles[num7] + 1 + num2; int index2 = triangles[num7 + 1] + 1 + num2; int index3 = triangles[num7 + 2] + 1 + num2; if (num4 < 0) { stringBuilder.AppendLine("f " + ConstructOBJString(index) + " " + ConstructOBJString(index2) + " " + ConstructOBJString(index3)); } else { stringBuilder.AppendLine("f " + ConstructOBJString(index3) + " " + ConstructOBJString(index2) + " " + ConstructOBJString(index)); } } } num2 += sharedMesh.vertices.Length; } File.WriteAllText(exportPath, stringBuilder.ToString()); if (generateMaterials) { File.WriteAllText(fileInfo.Directory.FullName + "\\" + fileNameWithoutExtension + ".mtl", stringBuilder2.ToString()); } EditorUtility.ClearProgressBar(); } private string TryExportTexture(string propertyName, Material m) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown if (m.HasProperty(propertyName)) { Texture texture = m.GetTexture(propertyName); if ((Object)(object)texture != (Object)null) { return ExportTexture((Texture2D)texture); } } return "false"; } private string ExportTexture(Texture2D t) { //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown try { if (autoMarkTexReadable) { string assetPath = AssetDatabase.GetAssetPath((Object)(object)t); AssetImporter atPath = AssetImporter.GetAtPath(assetPath); TextureImporter val = (TextureImporter)(object)((atPath is TextureImporter) ? atPath : null); if ((Object)(object)val != (Object)null) { val.textureType = (TextureImporterType)0; if (!val.isReadable) { val.isReadable = true; AssetDatabase.ImportAsset(assetPath); AssetDatabase.Refresh(); } } } string text = lastExportFolder + "\\" + ((Object)t).name + ".png"; Texture2D val2 = new Texture2D(((Texture)t).width, ((Texture)t).height, (TextureFormat)5, false); val2.SetPixels(t.GetPixels()); File.WriteAllBytes(text, val2.EncodeToPNG()); return text; } catch (Exception) { Debug.Log((object)("Could not export texture : " + ((Object)t).name + ". is it readable?")); return "null"; } } private string ConstructOBJString(int index) { string text = index.ToString(); return text + "/" + text + "/" + text; } private string MaterialToString(Material m) { //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) //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_0089: 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_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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) //IL_0108: Unknown result type (might be due to invalid IL or missing references) StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("newmtl " + ((Object)m).name); if (m.HasProperty("_Color")) { stringBuilder.AppendLine("Kd " + m.color.r + " " + m.color.g + " " + m.color.b); if (m.color.a < 1f) { stringBuilder.AppendLine("Tr " + (1f - m.color.a)); stringBuilder.AppendLine("d " + m.color.a); } } if (m.HasProperty("_SpecColor")) { Color color = m.GetColor("_SpecColor"); stringBuilder.AppendLine("Ks " + color.r + " " + color.g + " " + color.b); } if (exportTextures) { string text = TryExportTexture("_MainTex", m); if (text != "false") { stringBuilder.AppendLine("map_Kd " + text); } text = TryExportTexture("_SpecMap", m); if (text != "false") { stringBuilder.AppendLine("map_Ks " + text); } text = TryExportTexture("_BumpMap", m); if (text != "false") { stringBuilder.AppendLine("map_Bump " + text); } } stringBuilder.AppendLine("illum 2"); return stringBuilder.ToString(); } [MenuItem("File/Export/Wavefront OBJ")] private static void CreateWizard() { ScriptableWizard.DisplayWizard("Export OBJ", typeof(OBJExporter), "Export"); } } public class CuttableMesh { private MeshRenderer inputMeshRenderer; private bool hasUvs; private bool hasUv1s; private bool hasColours; private List<CuttableSubMesh> subMeshes; public CuttableMesh(Mesh inputMesh) { Init(inputMesh, ((Object)inputMesh).name); } public CuttableMesh(MeshRenderer input) { inputMeshRenderer = input; MeshFilter component = ((Component)input).GetComponent<MeshFilter>(); Mesh sharedMesh = component.sharedMesh; Init(sharedMesh, ((Object)input).name); } public CuttableMesh(CuttableMesh inputMesh, List<CuttableSubMesh> newSubMeshes) { inputMeshRenderer = inputMesh.inputMeshRenderer; hasUvs = inputMesh.hasUvs; hasUv1s = inputMesh.hasUv1s; hasColours = inputMesh.hasColours; subMeshes = new List<CuttableSubMesh>(); subMeshes.AddRange(newSubMeshes); } private void Init(Mesh inputMesh, string debugName) { subMeshes = new List<CuttableSubMesh>(); if (inputMesh.isReadable) { Vector3[] vertices = inputMesh.vertices; Vector3[] normals = inputMesh.normals; Vector2[] uv = inputMesh.uv; Vector2[] uv2 = inputMesh.uv2; Color32[] colors = inputMesh.colors32; hasUvs = uv != null && uv.Length > 0; hasUv1s = uv2 != null && uv2.Length > 0; hasColours = colors != null && colors.Length > 0; for (int i = 0; i < inputMesh.subMeshCount; i++) { int[] indices = inputMesh.GetIndices(i); CuttableSubMesh item = new CuttableSubMesh(indices, vertices, normals, colors, uv, uv2); subMeshes.Add(item); } } else { Debug.LogError((object)("CuttableMesh's input mesh is not readable: " + debugName), (Object)(object)inputMesh); } } public void Add(CuttableMesh other) { if (subMeshes.Count != other.subMeshes.Count) { throw new Exception("Mismatched submesh count"); } for (int i = 0; i < subMeshes.Count; i++) { subMeshes[i].Add(other.subMeshes[i]); } } public int NumSubMeshes() { return subMeshes.Count; } public bool HasUvs() { return hasUvs; } public bool HasColours() { return hasColours; } public List<CuttableSubMesh> GetSubMeshes() { return subMeshes; } public CuttableSubMesh GetSubMesh(int index) { return subMeshes[index]; } public Transform GetTransform() { if ((Object)(object)inputMeshRenderer != (Object)null) { return ((Component)inputMeshRenderer).transform; } return null; } public MeshRenderer ConvertToRenderer(string newObjectName) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_003d: 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_005d: 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_0097: 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) Mesh val = CreateMesh(); if (val.vertexCount == 0) { return null; } GameObject val2 = new GameObject(newObjectName); val2.transform.SetParent(((Component)inputMeshRenderer).transform); val2.transform.localPosition = Vector3.zero; val2.transform.localRotation = Quaternion.identity; val2.transform.localScale = Vector3.one; MeshFilter val3 = val2.AddComponent<MeshFilter>(); val3.mesh = val; MeshRenderer val4 = val2.AddComponent<MeshRenderer>(); ((Renderer)val4).shadowCastingMode = ((Renderer)inputMeshRenderer).shadowCastingMode; ((Renderer)val4).reflectionProbeUsage = ((Renderer)inputMeshRenderer).reflectionProbeUsage; ((Renderer)val4).lightProbeUsage = ((Renderer)inputMeshRenderer).lightProbeUsage; ((Renderer)val4).sharedMaterials = ((Renderer)inputMeshRenderer).sharedMaterials; return val4; } public Mesh CreateMesh() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown Mesh val = new Mesh(); int num = 0; for (int i = 0; i < subMeshes.Count; i++) { num += subMeshes[i].NumIndices(); } List<Vector3> list = new List<Vector3>(); List<Vector3> list2 = new List<Vector3>(); List<Color32> list3 = ((!hasColours) ? null : new List<Color32>()); List<Vector2> list4 = ((!hasUvs) ? null : new List<Vector2>()); List<Vector2> list5 = ((!hasUv1s) ? null : new List<Vector2>()); List<int> list6 = new List<int>(); foreach (CuttableSubMesh subMesh in subMeshes) { list6.Add(list.Count); subMesh.AddTo(list, list2, list3, list4, list5); } val.vertices = list.ToArray(); val.normals = list2.ToArray(); val.colors32 = ((!hasColours) ? null : list3.ToArray()); val.uv = ((!hasUvs) ? null : list4.ToArray()); val.uv2 = ((!hasUv1s) ? null : list5.ToArray()); val.subMeshCount = subMeshes.Count; for (int j = 0; j < subMeshes.Count; j++) { CuttableSubMesh cuttableSubMesh = subMeshes[j]; int num2 = list6[j]; int[] array = cuttableSubMesh.GenIndices(); for (int k = 0; k < array.Length; k++) { array[k] += num2; } val.SetTriangles(array, j, true); } return val; } } public class CuttableSubMesh { private List<Vector3> vertices; private List<Vector3> normals; private List<Color32> colours; private List<Vector2> uvs; private List<Vector2> uv1s; public CuttableSubMesh(bool hasNormals, bool hasColours, bool hasUvs, bool hasUv1) { vertices = new List<Vector3>(); if (hasNormals) { normals = new List<Vector3>(); } if (hasColours) { colours = new List<Color32>(); } if (hasUvs) { uvs = new List<Vector2>(); } if (hasUv1) { uv1s = new List<Vector2>(); } } public CuttableSubMesh(int[] indices, Vector3[] inputVertices, Vector3[] inputNormals, Color32[] inputColours, Vector2[] inputUvs, Vector2[] inputUv1) { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00de: 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_0124: Unknown result type (might be due to invalid IL or missing references) vertices = new List<Vector3>(); if (inputNormals != null && inputNormals.Length > 0) { normals = new List<Vector3>(); } if (inputColours != null && inputColours.Length > 0) { colours = new List<Color32>(); } if (inputUvs != null && inputUvs.Length > 0) { uvs = new List<Vector2>(); } if (inputUv1 != null && inputUv1.Length > 0) { uv1s = new List<Vector2>(); } foreach (int num in indices) { vertices.Add(inputVertices[num]); if (normals != null) { normals.Add(inputNormals[num]); } if (colours != null) { colours.Add(inputColours[num]); } if (uvs != null) { uvs.Add(inputUvs[num]); } if (uv1s != null) { uv1s.Add(inputUv1[num]); } } } public void Add(CuttableSubMesh other) { for (int i = 0; i < other.vertices.Count; i++) { CopyVertex(i, other); } } public int NumVertices() { return vertices.Count; } public Vector3 GetVertex(int index) { //IL_0008: 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_0013: Unknown result type (might be due to invalid IL or missing references) return vertices[index]; } public bool HasNormals() { return normals != null; } public bool HasColours() { return colours != null; } public bool HasUvs() { return uvs != null; } public bool HasUv1() { return uv1s != null; } public void CopyVertex(int srcIndex, CuttableSubMesh srcMesh) { //IL_000e: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) vertices.Add(srcMesh.vertices[srcIndex]); if (normals != null) { normals.Add(srcMesh.normals[srcIndex]); } if (colours != null) { colours.Add(srcMesh.colours[srcIndex]); } if (uvs != null) { uvs.Add(srcMesh.uvs[srcIndex]); } if (uv1s != null) { uv1s.Add(srcMesh.uv1s[srcIndex]); } } public void AddInterpolatedVertex(int i0, int i1, float weight, CuttableSubMesh srcMesh) { //IL_0004: 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_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_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_001c: Unknown result type (might be due to invalid IL or missing references) //IL_003f: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: 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_00c6: 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_00f6: 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) Vector3 vertex = srcMesh.GetVertex(i0); Vector3 vertex2 = srcMesh.GetVertex(i1); vertices.Add(Vector3.Lerp(vertex, vertex2, weight)); if (normals != null) { List<Vector3> list = normals; Vector3 val = Vector3.Lerp(srcMesh.normals[i0], srcMesh.normals[i1], weight); list.Add(((Vector3)(ref val)).normalized); } if (colours != null) { colours.Add(Color32.Lerp(srcMesh.colours[i0], srcMesh.colours[i1], weight)); } if (uvs != null) { uvs.Add(Vector2.Lerp(srcMesh.uvs[i0], srcMesh.uvs[i1], weight)); } if (uv1s != null) { uv1s.Add(Vector2.Lerp(srcMesh.uv1s[i0], srcMesh.uv1s[i1], weight)); } } public void AddTo(List<Vector3> destVertices, List<Vector3> destNormals, List<Color32> destColours, List<Vector2> destUvs, List<Vector2> destUv1s) { destVertices.AddRange(vertices); if (normals != null) { destNormals.AddRange(normals); } if (colours != null) { destColours.AddRange(colours); } if (uvs != null) { destUvs.AddRange(uvs); } if (uv1s != null) { destUv1s.AddRange(uv1s); } } public int NumIndices() { return vertices.Count; } public int[] GenIndices() { int[] array = new int[vertices.Count]; for (int i = 0; i < array.Length; i++) { array[i] = i; } return array; } } public enum VertexClassification { Front = 1, Back = 2, OnPlane = 4 } public class MeshCutter { private CuttableMesh inputMesh; private List<CuttableSubMesh> outputFrontSubMeshes; private List<CuttableSubMesh> outputBackSubMeshes; public void Cut(CuttableMesh input, Plane worldCutPlane) { //IL_0067: 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_0038: 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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) inputMesh = input; outputFrontSubMeshes = new List<CuttableSubMesh>(); outputBackSubMeshes = new List<CuttableSubMesh>(); Transform transform = inputMesh.GetTransform(); Plane cutPlane = default(Plane); if ((Object)(object)transform != (Object)null) { Vector3 val = transform.InverseTransformPoint(ClosestPointOnPlane(worldCutPlane, Vector3.zero)); Vector3 val2 = transform.InverseTransformDirection(((Plane)(ref worldCutPlane)).normal); ((Plane)(ref cutPlane))..ctor(val2, val); } else { cutPlane = worldCutPlane; } foreach (CuttableSubMesh subMesh in input.GetSubMeshes()) { Cut(subMesh, cutPlane); } } private static Vector3 ClosestPointOnPlane(Plane plane, Vector3 point) { //IL_0003: 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_0032: 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_0018: 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_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_002b: 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) float distanceToPoint = ((Plane)(ref plane)).GetDistanceToPoint(point); if (((Plane)(ref plane)).GetSide(point)) { return point - ((Plane)(ref plane)).normal * distanceToPoint; } return point + ((Plane)(ref plane)).normal * distanceToPoint; } public CuttableMesh GetFrontOutput() { return new CuttableMesh(inputMesh, outputFrontSubMeshes); } public CuttableMesh GetBackOutput() { return new CuttableMesh(inputMesh, outputBackSubMeshes); } private void Cut(CuttableSubMesh inputSubMesh, Plane cutPlane) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: 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_0068: 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_006d: 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_0078: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_015b: 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_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Unknown result type (might be due to invalid IL or missing references) //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: 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_01af: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) bool hasNormals = inputSubMesh.HasNormals(); bool hasColours = inputSubMesh.HasColours(); bool hasUvs = inputSubMesh.HasUvs(); bool hasUv = inputSubMesh.HasUv1(); CuttableSubMesh cuttableSubMesh = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv); CuttableSubMesh cuttableSubMesh2 = new CuttableSubMesh(hasNormals, hasColours, hasUvs, hasUv); for (int i = 0; i < inputSubMesh.NumVertices(); i += 3) { int num = i; int num2 = i + 1; int num3 = i + 2; Vector3 vertex = inputSubMesh.GetVertex(num); Vector3 vertex2 = inputSubMesh.GetVertex(num2); Vector3 vertex3 = inputSubMesh.GetVertex(num3); VertexClassification vertexClassification = Classify(vertex, cutPlane); VertexClassification vertexClassification2 = Classify(vertex2, cutPlane); VertexClassification vertexClassification3 = Classify(vertex3, cutPlane); int numFront = 0; int numBehind = 0; CountSides(vertexClassification, ref numFront, ref numBehind); CountSides(vertexClassification2, ref numFront, ref numBehind); CountSides(vertexClassification3, ref numFront, ref numBehind); if (numFront > 0 && numBehind == 0) { KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh); } else if (numFront == 0 && numBehind > 0) { KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2); } else if (numFront == 2 && numBehind == 1) { if (vertexClassification == VertexClassification.Back) { SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh); } else if (vertexClassification2 == VertexClassification.Back) { SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh); } else { SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh2, cuttableSubMesh); } } else if (numFront == 1 && numBehind == 2) { if (vertexClassification == VertexClassification.Front) { SplitA(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2); } else if (vertexClassification2 == VertexClassification.Front) { SplitA(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2); } else { SplitA(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2); } } else if (numFront == 1 && numBehind == 1) { if (vertexClassification == VertexClassification.OnPlane) { if (vertexClassification3 == VertexClassification.Front) { SplitB(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2); } else { SplitBFlipped(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2); } continue; } switch (vertexClassification2) { case VertexClassification.OnPlane: if (vertexClassification == VertexClassification.Front) { SplitB(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2); } else { SplitBFlipped(num3, num, num2, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2); } break; case VertexClassification.Front: SplitB(num2, num3, num, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2); break; default: SplitBFlipped(num, num2, num3, inputSubMesh, cutPlane, cuttableSubMesh, cuttableSubMesh2); break; } } else if (numFront == 0 && numBehind == 0) { Vector3 val = vertex2 - vertex; Vector3 val2 = vertex3 - vertex; Vector3 val3 = Vector3.Cross(val, val2); if (Vector3.Dot(val3, ((Plane)(ref cutPlane)).normal) > 0f) { KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh2); } else { KeepTriangle(num, num2, num3, inputSubMesh, cuttableSubMesh); } } } outputFrontSubMeshes.Add(cuttableSubMesh); outputBackSubMeshes.Add(cuttableSubMesh2); } private VertexClassification Classify(Vector3 vertex, Plane cutPlane) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(vertex.x, vertex.y, vertex.z); float distanceToPoint = ((Plane)(ref cutPlane)).GetDistanceToPoint(val); double num = 9.999999747378752E-06; if ((double)distanceToPoint > 0.0 - num && (double)distanceToPoint < num) { return VertexClassification.OnPlane; } if (distanceToPoint > 0f) { return VertexClassification.Front; } return VertexClassification.Back; } private void CountSides(VertexClassification c, ref int numFront, ref int numBehind) { switch (c) { case VertexClassification.Front: numFront++; break; case VertexClassification.Back: numBehind++; break; } } private void KeepTriangle(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, CuttableSubMesh destSubMesh) { destSubMesh.CopyVertex(i0, inputSubMesh); destSubMesh.CopyVertex(i1, inputSubMesh); destSubMesh.CopyVertex(i2, inputSubMesh); } private void SplitA(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh) { //IL_0004: 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_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_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_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_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: 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) Vector3 vertex = inputSubMesh.GetVertex(i0); Vector3 vertex2 = inputSubMesh.GetVertex(i1); Vector3 vertex3 = inputSubMesh.GetVertex(i2); CalcIntersection(vertex, vertex2, cutPlane, out var weight); CalcIntersection(vertex3, vertex, cutPlane, out var weight2); frontSubMesh.CopyVertex(i0, inputSubMesh); frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh); frontSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh); backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh); backSubMesh.CopyVertex(i1, inputSubMesh); backSubMesh.CopyVertex(i2, inputSubMesh); backSubMesh.CopyVertex(i2, inputSubMesh); backSubMesh.AddInterpolatedVertex(i2, i0, weight2, inputSubMesh); backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh); } private void SplitB(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh) { //IL_0004: 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_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_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) Vector3 vertex = inputSubMesh.GetVertex(i0); Vector3 vertex2 = inputSubMesh.GetVertex(i2); CalcIntersection(vertex2, vertex, cutPlane, out var weight); frontSubMesh.CopyVertex(i0, inputSubMesh); frontSubMesh.CopyVertex(i1, inputSubMesh); frontSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh); backSubMesh.CopyVertex(i1, inputSubMesh); backSubMesh.CopyVertex(i2, inputSubMesh); backSubMesh.AddInterpolatedVertex(i2, i0, weight, inputSubMesh); } private void SplitBFlipped(int i0, int i1, int i2, CuttableSubMesh inputSubMesh, Plane cutPlane, CuttableSubMesh frontSubMesh, CuttableSubMesh backSubMesh) { //IL_0004: 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_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_0014: 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_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) Vector3 vertex = inputSubMesh.GetVertex(i0); Vector3 vertex2 = inputSubMesh.GetVertex(i1); CalcIntersection(vertex, vertex2, cutPlane, out var weight); frontSubMesh.CopyVertex(i0, inputSubMesh); frontSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh); frontSubMesh.CopyVertex(i2, inputSubMesh); backSubMesh.CopyVertex(i1, inputSubMesh); backSubMesh.CopyVertex(i2, inputSubMesh); backSubMesh.AddInterpolatedVertex(i0, i1, weight, inputSubMesh); } private Vector3 CalcIntersection(Vector3 v0, Vector3 v1, Plane plane, out float weight) { //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_0008: 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_0014: 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_0022: 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_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: 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_004e: 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) Vector3 val = v1 - v0; float magnitude = ((Vector3)(ref val)).magnitude; Ray val2 = default(Ray); ((Ray)(ref val2))..ctor(v0, val / magnitude); float num = default(float); ((Plane)(ref plane)).Raycast(val2, ref num); Vector3 result = ((Ray)(ref val2)).origin + ((Ray)(ref val2)).direction * num; weight = num / magnitude; return result; } } public class TOD_Animation : MonoBehaviour { [Tooltip("How much to move the clouds when the camera moves.")] [TOD_Min(0f)] public float CameraMovement = 1f; [Tooltip("Wind direction in degrees.")] [TOD_Range(0f, 360f)] public float WindDegrees = 0f; [Tooltip("Speed of the wind that is acting on the clouds.")] [TOD_Min(0f)] public float WindSpeed = 1f; private TOD_Sky sky; public Vector3 CloudUV { get; set; } public Vector3 OffsetUV { get { //IL_0007: 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_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_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_0044: 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_004a: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: 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) Vector3 val = ((Component)this).transform.position * (CameraMovement * 0.0001f); Quaternion rotation = ((Component)this).transform.rotation; Quaternion val2 = Quaternion.Euler(0f, 0f - ((Quaternion)(ref rotation)).eulerAngles.y, 0f); return val2 * val; } } protected void Start() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) sky = ((Component)this).GetComponent<TOD_Sky>(); CloudUV = new Vector3(Random.value, Random.value, Random.value); } protected void Update() { //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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: 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_0062: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Sin((float)Math.PI / 180f * WindDegrees); float num2 = Mathf.Cos((float)Math.PI / 180f * WindDegrees); float num3 = 0.001f * Time.deltaTime; float num4 = WindSpeed * num3; float x = CloudUV.x; float y = CloudUV.y; float z = CloudUV.z; y += num3 * 0.1f; x -= num4 * num; z -= num4 * num2; x -= Mathf.Floor(x); y -= Mathf.Floor(y); z -= Mathf.Floor(z); CloudUV = new Vector3(x, y, z); sky.Components.BillboardTransform.localRotation = Quaternion.Euler(0f, y * 360f, 0f); } } [AttributeUsage(AttributeTargets.Field, Inherited = true, AllowMultiple = false)] public class TOD_MinAttribute : PropertyAttribute { public float min; public TOD_MinAttribute(float min) { this.min = min; } } [AttributeUsage(AttributeTargets.Field, Inherited = true, AllowMultiple = false)] public class TOD_MaxAttribute : PropertyAttribute { public float max; public TOD_MaxAttribute(float max) { this.max = max; } } [AttributeUsage(AttributeTargets.Field, Inherited = true, AllowMultiple = false)] public class TOD_RangeAttribute : PropertyAttribute { public float min; public float max; public TOD_RangeAttribute(float min, float max) { this.min = min; this.max = max; } } public class TOD_Billboard : MonoBehaviour { public float Altitude = 0f; public float Azimuth = 0f; public float Distance = 1f; public float Size = 1f; private T GetComponentInParents<T>() where T : Component { Transform val = ((Component)this).transform; T component = ((Component)val).GetComponent<T>(); while ((Object)(object)component == (Object)null && (Object)(object)val.parent != (Object)null) { val = val.parent; component = ((Component)val).GetComponent<T>(); } return component; } protected void OnValidate() { //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_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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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_00c4: 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_00b0: Unknown result type (might be due to invalid IL or missing references) TOD_Sky componentInParents = GetComponentInParents<TOD_Sky>(); if (!((Object)(object)componentInParents == (Object)null)) { float theta = (90f - Altitude) * ((float)Math.PI / 180f); float phi = Azimuth * ((float)Math.PI / 180f); Vector3 val = componentInParents.OrbitalToUnity(Distance, theta, phi); if (((Component)this).transform.localPosition != val) { ((Component)this).transform.localPosition = val; } float num = 2f * Mathf.Tan((float)Math.PI / 90f * Size); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(num, num, num); if (((Component)this).transform.localScale != val2) { ((Component)this).transform.localScale = val2; } ((Component)this).transform.LookAt(((Component)componentInParents).transform.position, Vector3.up); } } } [ExecuteInEditMode] [RequireComponent(typeof(Camera))] [AddComponentMenu("Time of Day/Camera Main Script")] public class TOD_Camera : MonoBehaviour { public TOD_Sky sky; public bool DomePosToCamera = true; public Vector3 DomePosOffset = Vector3.zero; public bool DomeScaleToFarClip = true; public float DomeScaleFactor = 0.95f; private Camera cameraComponent = null; private Transform cameraTransform = null; public bool HDR => Object.op_Implicit((Object)(object)cameraComponent) && cameraComponent.allowHDR; public float NearClipPlane => (!Object.op_Implicit((Object)(object)cameraComponent)) ? 0.1f : cameraComponent.nearClipPlane; public float FarClipPlane => (!Object.op_Implicit((Object)(object)cameraComponent)) ? 1000f : cameraComponent.farClipPlane; public Color BackgroundColor => (!Object.op_Implicit((Object)(object)cameraComponent)) ? Color.black : cameraComponent.backgroundColor; protected void OnValidate() { DomeScaleFactor = Mathf.Clamp(DomeScaleFactor, 0.01f, 1f); } protected void OnEnable() { cameraComponent = ((Component)this).GetComponent<Camera>(); cameraTransform = ((Component)this).GetComponent<Transform>(); if (!Object.op_Implicit((Object)(object)sky)) { sky = FindSky(fallback: true); } } protected void Update() { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Invalid comparison between Unknown and I4 //IL_0079: 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_0094: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)sky)) { sky = FindSky(); } if (Object.op_Implicit((Object)(object)sky) && sky.Initialized) { sky.Components.Camera = this; if ((int)cameraComponent.clearFlags != 2) { cameraComponent.clearFlags = (CameraClearFlags)2; } if (cameraComponent.backgroundColor != Color.clear) { cameraComponent.backgroundColor = Color.clear; } if ((Object)(object)RenderSettings.skybox != (Object)(object)sky.Resources.Skybox) { RenderSettings.skybox = sky.Resources.Skybox; DynamicGI.UpdateEnvironment(); } } } protected void OnPreCull() { if (!Object.op_Implicit((Object)(object)sky)) { sky = FindSky(); } if (Object.op_Implicit((Object)(object)sky) && sky.Initialized) { if (DomeScaleToFarClip) { DoDomeScaleToFarClip(); } if (DomePosToCamera) { DoDomePosToCamera(); } } } private TOD_Sky FindSky(bool fallback = false) { if (Object.op_Implicit((Object)(object)TOD_Sky.Instance)) { return TOD_Sky.Instance; } if (fallback) { return Object.FindObjectOfType(typeof(TOD_Sky)) as TOD_Sky; } return null; } public void DoDomeScaleToFarClip() { //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_004f: Unknown result type (might be due to invalid IL or missing references) float num = DomeScaleFactor * cameraComponent.farClipPlane; Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(num, num, num); if (sky.Components.DomeTransform.localScale != val) { sky.Components.DomeTransform.localScale = val; } } public void DoDomePosToCamera() { //IL_0007: 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_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_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_0038: 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_0059: Unknown result type (might be due to invalid IL or missing references) Vector3 val = cameraTransform.position + cameraTransform.rotation * DomePosOffset; if (sky.Components.DomeTransform.position != val) { sky.Components.DomeTransform.position = val; } } } [ExecuteInEditMode] public class TOD_Components : MonoBehaviour { public GameObject Space = null; public GameObject Stars = null; public GameObject Sun = null; public GameObject Moon = null; public GameObject Atmosphere = null; public GameObject Clear = null; public GameObject Clouds = null; public GameObject Billboards = null; public GameObject Light = null; public Transform DomeTransform { get; set; } public Transform SpaceTransform { get; set; } public Transform StarTransform { get; set; } public Transform SunTransform { get; set; } public Transform MoonTransform { get; set; } public Transform AtmosphereTransform { get; set; } public Transform ClearTransform { get; set; } public Transform CloudTransform { get; set; } public Transform BillboardTransform { get; set; } public Transform LightTransform { get; set; } public Renderer SpaceRenderer { get; set; } public Renderer StarRenderer { get; set; } public Renderer SunRenderer { get; set; } public Renderer MoonRenderer { get; set; } public Renderer AtmosphereRenderer { get; set; } public Renderer ClearRenderer { get; set; } public Renderer CloudRenderer { get; set; } public Renderer[] BillboardRenderers { get; set; } public MeshFilter SpaceMeshFilter { get; set; } public MeshFilter StarMeshFilter { get; set; } public MeshFilter SunMeshFilter { get; set; } public MeshFilter MoonMeshFilter { get; set; } public MeshFilter AtmosphereMeshFilter { get; set; } public MeshFilter ClearMeshFilter { get; set; } public MeshFilter CloudMeshFilter { get; set; } public MeshFilter[] BillboardMeshFilters { get; set; } public Material SpaceMaterial { get; set; } public Material StarMaterial { get; set; } public Material SunMaterial { get; set; } public Material MoonMaterial { get; set; } public Material AtmosphereMaterial { get; set; } public Material ClearMaterial { get; set; } public Material CloudMaterial { get; set; } public Material[] BillboardMaterials { get; set; } public Light LightSource { get; set; } public TOD_Sky Sky { get; set; } public TOD_Animation Animation { get; set; } public TOD_Time Time { get; set; } public TOD_Camera Camera { get; set; } public TOD_Rays Rays { get; set; } public TOD_Scattering Scattering { get; set; } public TOD_Shadows Shadows { get; set; } public void Initialize() { DomeTransform = ((Component)this).GetComponent<Transform>(); Sky = ((Component)this).GetComponent<TOD_Sky>(); Animation = ((Component)this).GetComponent<TOD_Animation>(); Time = ((Component)this).GetComponent<TOD_Time>(); if (Object.op_Implicit((Object)(object)Space)) { SpaceTransform = Space.GetComponent<Transform>(); SpaceRenderer = Space.GetComponent<Renderer>(); SpaceMeshFilter = Space.GetComponent<MeshFilter>(); SpaceMaterial = SpaceRenderer.sharedMaterial; } if (Object.op_Implicit((Object)(object)Stars)) { StarTransform = Stars.GetComponent<Transform>(); StarRenderer = Stars.GetComponent<Renderer>(); StarMeshFilter = Stars.GetComponent<MeshFilter>(); StarMaterial = StarRenderer.sharedMaterial; } if (Object.op_Implicit((Object)(object)Sun)) { SunTransform = Sun.GetComponent<Transform>(); SunRenderer = Sun.GetComponent<Renderer>(); SunMeshFilter = Sun.GetComponent<MeshFilter>(); SunMaterial = SunRenderer.sharedMaterial; } if (Object.op_Implicit((Object)(object)Moon)) { MoonTransform = Moon.GetComponent<Transform>(); MoonRenderer = Moon.GetComponent<Renderer>(); MoonMeshFilter = Moon.GetComponent<MeshFilter>(); MoonMaterial = MoonRenderer.sharedMaterial; } if (Object.op_Implicit((Object)(object)Atmosphere)) { AtmosphereTransform = Atmosphere.GetComponent<Transform>(); AtmosphereRenderer = Atmosphere.GetComponent<Renderer>(); AtmosphereMeshFilter = Atmosphere.GetComponent<MeshFilter>(); AtmosphereMaterial = AtmosphereRenderer.sharedMaterial; } if (Object.op_Implicit((Object)(object)Clear)) { ClearTransform = Clear.GetComponent<Transform>(); ClearRenderer = Clear.GetComponent<Renderer>(); ClearMeshFilter = Clear.GetComponent<MeshFilter>(); ClearMaterial = ClearRenderer.sharedMaterial; } if (Object.op_Implicit((Object)(object)Clouds)) { CloudTransform = Clouds.GetComponent<Transform>(); CloudRenderer = Clouds.GetComponent<Renderer>(); CloudMeshFilter = Clouds.GetComponent<MeshFilter>(); CloudMaterial = CloudRenderer.sharedMaterial; } if (Object.op_Implicit((Object)(object)Billboards)) { BillboardTransform = Billboards.GetComponent<Transform>(); BillboardRenderers = Billboards.GetComponentsInChildren<Renderer>(); BillboardMeshFilters = Billboards.GetComponentsInChildren<MeshFilter>(); BillboardMaterials = (Material[])(object)new Material[BillboardRenderers.Length]; for (int i = 0; i < BillboardRenderers.Length; i++) { BillboardMaterials[i] = BillboardRenderers[i].sharedMaterial; } } if (Object.op_Implicit((Object)(object)Light)) { LightTransform = Light.GetComponent<Transform>(); LightSource = Light.GetComponent<Light>(); } } } public enum TOD_MoonPositionType { OppositeToSun, Realistic } public enum TOD_StarsPositionType { Static, Rotating } public enum TOD_FogType { None, Atmosphere, Directional, Gradient } public enum TOD_AmbientType { None, Color, Gradient, Spherical } public enum TOD_ReflectionType { None, Cubemap } public enum TOD_ColorSpaceType { Auto, Linear, Gamma } public enum TOD_ColorRangeType { Auto, HDR, LDR } public enum TOD_ColorOutputType { Raw, Dithered } public enum TOD_CloudQualityType { Low, Medium, High } public enum TOD_MeshQualityType { Low, Medium, High } public enum TOD_StarQualityType { Low, Medium, High } public enum TOD_SkyQualityType { PerVertex, PerPixel } [ExecuteInEditMode] [RequireComponent(typeof(Camera))] public abstract class TOD_ImageEffect : MonoBehaviour { public enum ResolutionType { Low, Normal, High } public TOD_Sky sky = null; protected Camera cam = null; private static Vector3[] frustumCornersArray = (Vector3[])(object)new Vector3[4]; protected Material CreateMaterial(Shader shader) { //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)shader)) { Debug.Log((object)("Missing shader in " + ((object)this).ToString())); ((Behaviour)this).enabled = false; return null; } if (!shader.isSupported) { Debug.LogError((object)("The shader " + ((object)shader).ToString() + " on effect " + ((object)this).ToString() + " is not supported on this platform!")); ((Behaviour)this).enabled = false; return null; } Material val = new Material(shader); ((Object)val).hideFlags = (HideFlags)52; return val; } private TOD_Sky FindSky(bool fallback = false) { if (Object.op_Implicit((Object)(object)TOD_Sky.Instance)) { return TOD_Sky.Instance; } if (fallback) { return Object.FindObjectOfType(typeof(TOD_Sky)) as TOD_Sky; } return null; } protected void Awake() { if (!Object.op_Implicit((Object)(object)cam)) { cam = ((Component)this).GetComponent<Camera>(); } if (!Object.op_Implicit((Object)(object)sky)) { sky = FindSky(fallback: true); } } protected bool CheckSupport(bool needDepth = false, bool needHdr = false) { //IL_012d: 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) if (!Object.op_Implicit((Object)(object)cam)) { cam = ((Component)this).GetComponent<Camera>(); } if (!Object.op_Implicit((Object)(object)cam)) { return false; } if (!Object.op_Implicit((Object)(object)sky)) { sky = FindSky(); } if (!Object.op_Implicit((Object)(object)sky) || !sky.Initialized) { return false; } if (!SystemInfo.supportsImageEffects) { Debug.LogWarning((object)("The image effect " + ((object)this).ToString() + " has been disabled as it's not supported on the current platform.")); ((Behaviour)this).enabled = false; return false; } if (needDepth && !SystemInfo.SupportsRenderTextureFormat((RenderTextureFormat)1)) { Debug.LogWarning((object)("The image effect " + ((object)this).ToString() + " has been disabled as it requires a depth texture.")); ((Behaviour)this).enabled = false; return false; } if (needHdr && !SystemInfo.SupportsRenderTextureFormat((RenderTextureFormat)2)) { Debug.LogWarning((object)("The image effect " + ((object)this).ToString() + " has been disabled as it requires HDR.")); ((Behaviour)this).enabled = false; return false; } if (needDepth) { Camera obj = cam; obj.depthTextureMode = (DepthTextureMode)(obj.depthTextureMode | 1); } if (needHdr) { cam.allowHDR = true; } return true; } protected void DrawBorder(RenderTexture dest, Material material) { RenderTexture.active = dest; bool flag = true; GL.PushMatrix(); GL.LoadOrtho(); for (int i = 0; i < material.passCount; i++) { material.SetPass(i); float num; float num2; if (flag) { num = 1f; num2 = 0f; } else { num = 0f; num2 = 1f; } float num3 = 0f; float num4 = 1f / ((float)((Texture)dest).width * 1f); float num5 = 0f; float num6 = 1f; GL.Begin(7); GL.TexCoord2(0f, num); GL.Vertex3(num3, num5, 0.1f); GL.TexCoord2(1f, num); GL.Vertex3(num4, num5, 0.1f); GL.TexCoord2(1f, num2); GL.Vertex3(num4, num6, 0.1f); GL.TexCoord2(0f, num2); GL.Vertex3(num3, num6, 0.1f); num3 = 1f - 1f / ((float)((Texture)dest).width * 1f); num4 = 1f; num5 = 0f; num6 = 1f; GL.TexCoord2(0f, num); GL.Vertex3(num3, num5, 0.1f); GL.TexCoord2(1f, num); GL.Vertex3(num4, num5, 0.1f); GL.TexCoord2(1f, num2); GL.Vertex3(num4, num6, 0.1f); GL.TexCoord2(0f, num2); GL.Vertex3(num3, num6, 0.1f); num3 = 0f; num4 = 1f; num5 = 0f; num6 = 1f / ((float)((Texture)dest).height * 1f); GL.TexCoord2(0f, num); GL.Vertex3(num3, num5, 0.1f); GL.TexCoord2(1f, num); GL.Vertex3(num4, num5, 0.1f); GL.TexCoord2(1f, num2); GL.Vertex3(num4, num6, 0.1f); GL.TexCoord2(0f, num2); GL.Vertex3(num3, num6, 0.1f); num3 = 0f; num4 = 1f; num5 = 1f - 1f / ((float)((Texture)dest).height * 1f); num6 = 1f; GL.TexCoord2(0f, num); GL.Vertex3(num3, num5, 0.1f); GL.TexCoord2(1f, num); GL.Vertex3(num4, num5, 0.1f); GL.TexCoord2(1f, num2); GL.Vertex3(num4, num6, 0.1f); GL.TexCoord2(0f, num2); GL.Vertex3(num3, num6, 0.1f); GL.End(); } GL.PopMatrix(); } protected Matrix4x4 FrustumCorners() { //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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_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_0081: 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_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: 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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: 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_00ce: 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_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_00ea: 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_00f8: 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) //IL_0105: 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) cam.CalculateFrustumCorners(new Rect(0f, 0f, 1f, 1f), cam.farClipPlane, cam.stereoActiveEye, frustumCornersArray); Vector3 val = ((Component)cam).transform.TransformVector(frustumCornersArray[0]); Vector3 val2 = ((Component)cam).transform.TransformVector(frustumCornersArray[1]); Vector3 val3 = ((Component)cam).transform.TransformVector(frustumCornersArray[2]); Vector3 val4 = ((Component)cam).transform.TransformVector(frustumCornersArray[3]); Matrix4x4 identity = Matrix4x4.identity; ((Matrix4x4)(ref identity)).SetRow(0, Vector4.op_Implicit(val)); ((Matrix4x4)(ref identity)).SetRow(1, Vector4.op_Implicit(val4)); ((Matrix4x4)(ref identity)).SetRow(2, Vector4.op_Implicit(val2)); ((Matrix4x4)(ref identity)).SetRow(3, Vector4.op_Implicit(val3)); return identity; } protected RenderTexture GetSkyMask(RenderTexture source, Material skyMaskMaterial, Material screenClearMaterial, ResolutionType resolution, Vector3 lightPos, int blurIterations, float blurRadius, float maxRadius) { //IL_007f: 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_00ad: 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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Invalid comparison between Unknown and I4 //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) int num; int num2; int num3; switch (resolution) { case ResolutionType.High: num = ((Texture)source).width; num2 = ((Texture)source).height; num3 = 0; break; case ResolutionType.Normal: num = ((Texture)source).width / 2; num2 = ((Texture)source).height / 2; num3 = 0; break; default: num = ((Texture)source).width / 4; num2 = ((Texture)source).height / 4; num3 = 0; break; } RenderTexture temporary = RenderTexture.GetTemporary(num, num2, num3); RenderTexture val = null; skyMaskMaterial.SetVector("_BlurRadius4", new Vector4(1f, 1f, 0f, 0f) * blurRadius); skyMaskMaterial.SetVector("_LightPosition", new Vector4(lightPos.x, lightPos.y, lightPos.z, maxRadius)); if ((cam.depthTextureMode & 1) != 0) { Graphics.Blit((Texture)(object)source, temporary, skyMaskMaterial, 1); } else { Graphics.Blit((Texture)(object)source, temporary, skyMaskMaterial, 2); } if ((int)cam.stereoActiveEye == 2) { DrawBorder(temporary, screenClearMaterial); } float num4 = blurRadius * 0.0013020834f; skyMaskMaterial.SetVector("_BlurRadius4", new Vector4(num4, num4, 0f, 0f)); skyMaskMaterial.SetVector("_LightPosition", new Vector4(lightPos.x, lightPos.y, lightPos.z, maxRadius)); for (int i = 0; i < blurIterations; i++) { val = RenderTexture.GetTemporary(num, num2, num3); Graphics.Blit((Texture)(object)temporary, val, skyMaskMaterial, 0); RenderTexture.ReleaseTemporary(temporary); num4 = blurRadius * (((float)i * 2f + 1f) * 6f) / 768f; skyMaskMaterial.SetVector("_BlurRadius4", new Vector4(num4, num4, 0f, 0f)); temporary = RenderTexture.GetTemporary(num, num2, num3); Graphics.Blit((Texture)(object)val, temporary, skyMaskMaterial, 0); RenderTexture.ReleaseTemporary(val); num4 = blurRadius * (((float)i * 2f + 2f) * 6f) / 768f; skyMaskMaterial.SetVector("_BlurRadius4", new Vector4(num4, num4, 0f, 0f)); } return temporary; } } [Serializable] public class TOD_Parameters { public TOD_CycleParameters Cycle; public TOD_WorldParameters World; public TOD_AtmosphereParameters Atmosphere; public TOD_DayParameters Day; public TOD_NightParameters Night; public TOD_SunParameters Sun; public TOD_MoonParameters Moon; public TOD_LightParameters Light; public TOD_StarParameters Stars; public TOD_CloudParameters Clouds; public TOD_FogParameters Fog; public TOD_AmbientParameters Ambient; public TOD_ReflectionParameters Reflection; public TOD_Parameters() { } public TOD_Parameters(TOD_Sky sky) { Cycle = sky.Cycle; World = sky.World; Atmosphere = sky.Atmosphere; Day = sky.Day; Night = sky.Night; Sun = sky.Sun; Moon = sky.Moon; Light = sky.Light; Stars = sky.Stars; Clouds = sky.Clouds; Fog = sky.Fog; Ambient = sky.Ambient; Reflection = sky.Reflection; } public void ToSky(TOD_Sky sky) { sky.Cycle = Cycle; sky.World = World; sky.Atmosphere = Atmosphere; sky.Day = Day; sky.Night = Night; sky.Sun = Sun; sky.Moon = Moon; sky.Light = Light; sky.Stars = Stars; sky.Clouds = Clouds; sky.Fog = Fog; sky.Ambient = Ambient; sky.Reflection = Reflection; } } [Serializable] public class TOD_CycleParameters { [Tooltip("Current hour of the day.")] public float Hour = 12f; [Tooltip("Current day of the month.")] public int Day = 15; [Tooltip("Current month of the year.")] public int Month = 6; [Tooltip("Current year.")] [TOD_Range(1f, 9999f)] public int Year = 2000; public DateTime DateTime { get { DateTime result = new DateTime(0L, DateTimeKind.Utc); if (Year > 0) { result = result.AddYears(Year - 1); } if (Month > 0) { result = result.AddMonths(Month - 1); } if (Day > 0) { result = result.AddDays(Day - 1); } if (Hour > 0f) { result = result.AddHours(Hour); } return result; } set { Year = value.Year; Month = value.Month; Day = value.Day; Hour = (float)value.Hour + (float)value.Minute / 60f + (float)value.Second / 3600f + (float)value.Millisecond / 3600000f; } } public long Ticks { get { return DateTime.Ticks; } set { DateTime = new DateTime(value, DateTimeKind.Utc); } } } [Serializable] public class TOD_WorldParameters { [Tooltip("Latitude of the current location in degrees.")] [Range(-90f, 90f)] public float Latitude = 0f; [Tooltip("Longitude of the current location in degrees.")] [Range(-180f, 180f)] public float Longitude = 0f; [Tooltip("UTC/GMT time zone of the current location in hours.")] [Range(-14f, 14f)] public float UTC = 0f; } [Serializable] public class TOD_AtmosphereParameters { [Tooltip("Intensity of the atmospheric Rayleigh scattering.")] [TOD_Min(0f)] public float RayleighMultiplier = 1f; [Tooltip("Intensity of the atmospheric Mie scattering.")] [TOD_Min(0f)] public float MieMultiplier = 1f; [Tooltip("Overall brightness of the atmosphere.")] [TOD_Min(0f)] public float Brightness = 1.5f; [Tooltip("Overall contrast of the atmosphere.")] [TOD_Min(0f)] public float Contrast = 1.5f; [Tooltip("Directionality factor that determines the size of the glow around the sun.")] [TOD_Range(0f, 1f)] public float Directionality = 0.7f; [Tooltip("Density of the fog covering the sky.")] [TOD_Range(0f, 1f)] public float Fogginess = 0f; } [Serializable] public class TOD_DayParameters { [Tooltip("Color of the sun spot.\nLeft value: Sun at zenith.\nRight value: Sun at horizon.")] public Gradient SunColor = null; [Tooltip("Color of the light that hits the ground.\nLeft value: Sun at zenith.\nRight value: Sun at horizon.")] public Gradient LightColor = null; [Tooltip("Color of the god rays.\nLeft value: Sun at zenith.\nRight value: Sun at horizon.")] public Gradient RayColor = null; [Tooltip("Color of the light that hits the atmosphere.\nLeft value: Sun at zenith.\nRight value: Sun at horizon.")] public Gradient SkyColor = null; [Tooltip("Color of the clouds.\nLeft value: Sun at zenith.\nRight value: Sun at horizon.")] public Gradient CloudColor = null; [Tooltip("Color of the atmosphere fog.\nLeft value: Sun at zenith.\nRight value: Sun at horizon.")] public Gradient FogColor = null; [Tooltip("Color of the ambient light.\nLeft value: Sun at zenith.\nRight value: Sun at horizon.")] public Gradient AmbientColor = null; [Tooltip("Intensity of the light source.")] [Range(0f, 8f)] public float LightIntensity = 1f; [Tooltip("Opacity of the shadows dropped by the light source.")] [Range(0f, 1f)] public float ShadowStrength = 1f; [Tooltip("Brightness multiplier of the ambient light.")] [Range(0f, 8f)] public float AmbientMultiplier = 1f; [Tooltip("Brightness multiplier of the reflection probe.")] [Range(0f, 1f)] public float ReflectionMultiplier = 1f; } [Serializable] public class TOD_NightParameters { [Tooltip("Color of the moon mesh.\nLeft value: Sun at horizon.\nRight value: Sun opposite to zenith.")] public Gradient MoonColor = null; [Tooltip("Color of the light that hits the ground.\nLeft value: Sun at horizon.\nRight value: Sun opposite to zenith.")] public Gradient LightColor = null; [Tooltip("Color of the god rays.\nLeft value: Sun at horizon.\nRight value: Sun opposite to zenith.")] public Gradient RayColor = null; [Tooltip("Color of the light that hits the atmosphere.\nLeft value: Sun at horizon.\nRight value: Sun opposite to zenith.")] public Gradient SkyColor = null; [Tooltip("Color of the clouds.\nLeft value: Sun at horizon.\nRight value: Sun opposite to zenith.")] public Gradient CloudColor = null; [Tooltip("Color of the atmosphere fog.\nLeft value: Sun at horizon.\nRight value: Sun opposite to zenith.")] public Gradient FogColor = null; [Tooltip("Color of the ambient light.\nLeft value: Sun at horizon.\nRight value: Sun opposite to zenith.")] public Gradient AmbientColor = null; [Tooltip("Intensity of the light source.")] [Range(0f, 8f)] public float LightIntensity = 0.1f; [Tooltip("Opacity of the shadows dropped by the light source.")] [Range(0f, 1f)] public float ShadowStrength = 1f; [Tooltip("Brightness multiplier of the ambient light.")] [Range(0f, 8f)] public float AmbientMultiplier = 1f; [Tooltip("Brightness multiplier of the reflection probe.")] [Range(0f, 1f)] public float ReflectionMultiplier = 1f; } [Serializable] public class TOD_SunParameters { [Tooltip("Diameter of the sun in degrees.\nThe diameter as seen from earth is 0.5 degrees.")] [TOD_Min(0f)] public float MeshSize = 1f; [Tooltip("Brightness of the sun.")] [TOD_Min(0f)] public float MeshBrightness = 2f; [Tooltip("Contrast of the sun.")] [TOD_Min(0f)] public float MeshContrast = 1f; } [Serializable] public class TOD_MoonParameters { [Tooltip("Diameter of the moon in degrees.\nThe diameter as seen from earth is 0.5 degrees.")] [TOD_Min(0f)] public float MeshSize = 1f; [Tooltip("Brightness of the moon.")] [TOD_Min(0f)] public float MeshBrightness = 2f; [Tooltip("Contrast of the moon.")] [TOD_Min(0f)] public float MeshContrast = 1f; [Tooltip("Size of the moon halo.")] [TOD_Min(0f)] public float HaloSize = 0.1f; [Tooltip("Brightness of the moon halo.")] [TOD_Min(0f)] public float HaloBrightness = 1f; [Tooltip("Type of the moon position calculation.")] public TOD_MoonPositionType Position = TOD_MoonPositionType.Realistic; } [Serializable] public class TOD_StarParameters { [Tooltip("Size of the stars.")] [TOD_Min(0f)] public float Size = 1f; [Tooltip("Brightness of the stars.")] [TOD_Min(0f)] public float Brightness = 1f; [Tooltip("Type of the stars position calculation.")] public TOD_StarsPositionType Position = TOD_StarsPositionType.Rotating; } [Serializable] public class TOD_CloudParameters { [Tooltip("Size of the clouds.")] [TOD_Min(1f)] public float Size = 2f; [Tooltip("Opacity of the clouds.")] [TOD_Range(0f, 1f)] public float Opacity = 1f; [Tooltip("How much sky is covered by clouds.")] [TOD_Range(0f, 1f)] public float Coverage = 0.5f; [Tooltip("Sharpness of the cloud to sky transition.")] [TOD_Range(0f, 1f)] public float Sharpness = 0.5f; [Tooltip("Coloring of the clouds.")] [TOD_Range(0f, 1f)] public float Coloring = 0.5f; [Tooltip("Amount of skylight that is blocked.")] [TOD_Range(0f, 1f)] public float Attenuation = 0.5f; [Tooltip("Amount of sunlight that is blocked.\nOnly affects the highest cloud quality setting.")] [TOD_Range(0f, 1f)] public float Saturation = 0.5f; [Tooltip("Intensity of the cloud translucency glow.\nOnly affects the highest cloud quality setting.")] [TOD_Min(0f)] public float Scattering = 1f; [Tooltip("Brightness of the clouds.")] [TOD_Min(0f)] public float Brightness = 1.5f; } [Serializable] public class TOD_LightParameters { [Tooltip("Refresh interval of the light source position in seconds.")] [TOD_Min(0f)] public float UpdateInterval = 0f; [Tooltip("Controls how low the light source is allowed to go.\n = -1 light source can go as low as it wants.\n = 0 light source will never go below the horizon.\n = +1 light source will never leave zenith.")] [TOD_Range(-1f, 1f)] public float MinimumHeight = 0f; } [Serializable] public class TOD_FogParameters { [Tooltip("Fog color mode.")] public TOD_FogType Mode = TOD_FogType.Atmosphere; [Tooltip("Fog color sampling height.\n = 0 fog is atmosphere color at horizon.\n = 1 fog is atmosphere color at zenith.")] [TOD_Range(0f, 1f)] public float HeightBias = 0f; } [Serializable] public class TOD_AmbientParameters { [Tooltip("Ambient light mode.")] public TOD_AmbientType Mode = TOD_AmbientType.Color; [Tooltip("Saturation of the ambient light.")] [TOD_Min(0f)] public float Saturation = 1f; [Tooltip("Refresh interval of the ambient light probe in seconds.")] [TOD_Min(0f)] public float UpdateInterval = 1f; } [Serializable] public class TOD_ReflectionParameters { [Tooltip("Reflection probe mode.")] public TOD_ReflectionType Mode = TOD_ReflectionType.None; [Tooltip("Clear flags to use for the reflection.")] public ReflectionProbeClearFlags ClearFlags = (ReflectionProbeClearFlags)1; [Tooltip("Layers to include in the reflection.")] public LayerMask CullingMask = LayerMask.op_Implicit(0); [Tooltip("Time slicing behaviour to spread out rendering cost over multiple frames.")] public ReflectionProbeTimeSlicingMode TimeSlicing = (ReflectionProbeTimeSlicingMode)0; [Tooltip("Resolution of the reflection bake.")] [TOD_Range(16f, 2048f)] public int Resolution = 128; [Tooltip("Refresh interval of the re