summaryrefslogtreecommitdiff
path: root/DeepSky.Haze/DS_HazeContext.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-03-13 11:00:58 +0800
committerchai <215380520@qq.com>2024-03-13 11:00:58 +0800
commit6ce8b9e22fc13be34b442c7b6af48b42cd44275a (patch)
treeb38119d2acf0a982cb67e381f146924b9bfc3b3f /DeepSky.Haze/DS_HazeContext.cs
+init
Diffstat (limited to 'DeepSky.Haze/DS_HazeContext.cs')
-rw-r--r--DeepSky.Haze/DS_HazeContext.cs154
1 files changed, 154 insertions, 0 deletions
diff --git a/DeepSky.Haze/DS_HazeContext.cs b/DeepSky.Haze/DS_HazeContext.cs
new file mode 100644
index 0000000..2294526
--- /dev/null
+++ b/DeepSky.Haze/DS_HazeContext.cs
@@ -0,0 +1,154 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace DeepSky.Haze;
+
+[Serializable]
+[AddComponentMenu("")]
+public class DS_HazeContext
+{
+ [SerializeField]
+ public List<DS_HazeContextItem> m_ContextItems;
+
+ [SerializeField]
+ private int m_SoloItem = -1;
+
+ public int Solo => m_SoloItem;
+
+ public DS_HazeContext()
+ {
+ m_ContextItems = new List<DS_HazeContextItem>();
+ DS_HazeContextItem item = new DS_HazeContextItem
+ {
+ m_Name = "Default"
+ };
+ m_ContextItems.Add(item);
+ }
+
+ public void DuplicateContextItem(int index)
+ {
+ if (index >= 0 && index < m_ContextItems.Count)
+ {
+ DS_HazeContextItem dS_HazeContextItem = new DS_HazeContextItem();
+ dS_HazeContextItem.CopyFrom(m_ContextItems[index]);
+ dS_HazeContextItem.m_Name += "_Copy";
+ m_ContextItems.Add(dS_HazeContextItem);
+ }
+ }
+
+ public void RemoveContextItem(int index)
+ {
+ if (index >= 0 && index < m_ContextItems.Count && m_ContextItems.Count != 1)
+ {
+ m_ContextItems.RemoveAt(index);
+ if (m_SoloItem != -1 && m_SoloItem == index)
+ {
+ m_SoloItem = -1;
+ }
+ }
+ }
+
+ public void MoveContextItemUp(int index)
+ {
+ if (index < 1 || index >= m_ContextItems.Count)
+ {
+ return;
+ }
+ DS_HazeContextItem item = m_ContextItems[index];
+ m_ContextItems.RemoveAt(index);
+ m_ContextItems.Insert(index - 1, item);
+ if (m_SoloItem != -1)
+ {
+ if (m_SoloItem == index)
+ {
+ m_SoloItem--;
+ }
+ else if (m_SoloItem == index - 1)
+ {
+ m_SoloItem++;
+ }
+ }
+ }
+
+ public void MoveContextItemDown(int index)
+ {
+ if (index < 0 || index >= m_ContextItems.Count - 1)
+ {
+ return;
+ }
+ DS_HazeContextItem item = m_ContextItems[index];
+ m_ContextItems.RemoveAt(index);
+ m_ContextItems.Insert(index + 1, item);
+ if (m_SoloItem != -1)
+ {
+ if (m_SoloItem == index)
+ {
+ m_SoloItem++;
+ }
+ else if (m_SoloItem == index + 1)
+ {
+ m_SoloItem--;
+ }
+ }
+ }
+
+ public DS_HazeContextItem GetContextItemBlended(float time = -1f)
+ {
+ DS_HazeContextItem dS_HazeContextItem = new DS_HazeContextItem();
+ dS_HazeContextItem.CopyFrom(m_ContextItems[0]);
+ if (m_ContextItems.Count == 1)
+ {
+ return dS_HazeContextItem;
+ }
+ time = Mathf.Clamp01(time);
+ float num = 0f;
+ for (int i = 1; i < m_ContextItems.Count; i++)
+ {
+ num = m_ContextItems[i].m_Weight.Evaluate(time);
+ dS_HazeContextItem.Lerp(m_ContextItems[i], num);
+ }
+ return dS_HazeContextItem;
+ }
+
+ public DS_HazeContextItem GetItemAtIndex(int index)
+ {
+ if (index < 0 || index >= m_ContextItems.Count)
+ {
+ return null;
+ }
+ return m_ContextItems[index];
+ }
+
+ public void CopyFrom(DS_HazeContext other)
+ {
+ if (m_ContextItems.Count > 0)
+ {
+ m_ContextItems.Clear();
+ }
+ for (int i = 0; i < other.m_ContextItems.Count; i++)
+ {
+ DS_HazeContextItem dS_HazeContextItem = new DS_HazeContextItem();
+ dS_HazeContextItem.CopyFrom(other.m_ContextItems[i]);
+ m_ContextItems.Add(dS_HazeContextItem);
+ }
+ }
+
+ public DS_HazeContextAsset GetContextAsset()
+ {
+ DS_HazeContextAsset dS_HazeContextAsset = ScriptableObject.CreateInstance<DS_HazeContextAsset>();
+ dS_HazeContextAsset.Context.CopyFrom(this);
+ dS_HazeContextAsset.Context.m_SoloItem = -1;
+ return dS_HazeContextAsset;
+ }
+
+ public string[] GetItemNames()
+ {
+ string[] array = new string[m_ContextItems.Count];
+ for (int i = 0; i < m_ContextItems.Count; i++)
+ {
+ array[i] = m_ContextItems[i].m_Name;
+ }
+ return array;
+ }
+}