diff options
author | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
commit | 6ce8b9e22fc13be34b442c7b6af48b42cd44275a (patch) | |
tree | b38119d2acf0a982cb67e381f146924b9bfc3b3f /DeepSky.Haze/DS_HazeContext.cs |
+init
Diffstat (limited to 'DeepSky.Haze/DS_HazeContext.cs')
-rw-r--r-- | DeepSky.Haze/DS_HazeContext.cs | 154 |
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; + } +} |