Files
beyond/Assets/Scripts/Rendering/MaterialValueChanger.cs
2024-11-20 15:21:28 +01:00

86 lines
2.2 KiB
C#

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<int>(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;
}
}
}
}