using System; using System.Collections; using System.Collections.Generic; using PixelCrushers; using Sirenix.OdinInspector; using UnityEngine; namespace Beyond { public class MaterialValueChanger : Saver { public Renderer m_renderer; public enum ValueType { COLOR, FLOAT, FLOAT3, } [Serializable] public struct VariableDesc { public string variableName; public ValueType type; public float floatValue; public Vector3 float3Value; [ColorUsageAttribute(true, true, 0f, 8f, 0.125f, 3f)] public Color color; } public VariableDesc[] m_valuesToChange; public int m_setOnStart = -1; private int m_setId = -1; private void OnEnable() { if (m_setOnStart >= 0) ChangeValue(m_setOnStart); } public override string RecordData() { return SaveSystem.Serialize(m_setId); } public override void ApplyData(string s) { if (String.IsNullOrEmpty(s)) return; m_setId = SaveSystem.Deserialize(s); ChangeValue(m_setId); } [Button] public void ChangeValue(int changeNum) { if (m_renderer == null) { Debug.LogError("renderer is not set!", this); return; } if (changeNum < 0 || changeNum >= m_valuesToChange.Length) { Debug.LogError("Index out of range!", this); return; } var vd = m_valuesToChange[changeNum]; m_setId = changeNum; switch (vd.type) { case ValueType.COLOR: m_renderer.material.SetColor(vd.variableName, vd.color); break; case ValueType.FLOAT: m_renderer.material.SetFloat(vd.variableName, vd.floatValue); break; case ValueType.FLOAT3: m_renderer.material.SetVector(vd.variableName, vd.float3Value); break; } } } }