using System; using System.Collections.Generic; using UnityEngine; namespace DeepSky.Haze; [Serializable] [AddComponentMenu("")] public class DS_HazeContext { [SerializeField] public List m_ContextItems; [SerializeField] private int m_SoloItem = -1; public int Solo => m_SoloItem; public DS_HazeContext() { m_ContextItems = new List(); 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.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; } }