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