You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
3.2 KiB
C#
64 lines
3.2 KiB
C#
/******************************************************************************/
|
|
/*
|
|
Project - MudBun
|
|
Publisher - Long Bunny Labs
|
|
http://LongBunnyLabs.com
|
|
Author - Ming-Lun "Allen" Chou
|
|
http://AllenChou.net
|
|
*/
|
|
/******************************************************************************/
|
|
|
|
using UnityEngine;
|
|
|
|
namespace MudBun
|
|
{
|
|
[ExecuteInEditMode]
|
|
public abstract class MudMaterialBase : MonoBehaviour
|
|
{
|
|
[SerializeField] private MudSharedMaterialBase m_sharedMaterial;
|
|
public MudSharedMaterialBase SharedMaterial { get => m_sharedMaterial; set { m_sharedMaterial = value; MarkDirty(); } }
|
|
|
|
[SerializeField] [ConditionalField("m_sharedMaterial", "NULL")] private Color m_color = Color.white;
|
|
[SerializeField] [ConditionalField("m_sharedMaterial", "NULL")] private Color m_emission = Color.black;
|
|
[SerializeField] [ConditionalField("m_sharedMaterial", "NULL", Min = 0.0f, Max = 1.0f)] private float m_metallic = 0.0f;
|
|
[SerializeField] [ConditionalField("m_sharedMaterial", "NULL", Min = 0.0f, Max = 1.0f)] private float m_smoothness = 0.5f;
|
|
[SerializeField] [ConditionalField("m_sharedMaterial", "NULL", Min = 0, Max = 3 )] private int m_textureIndex = 0;
|
|
[SerializeField] [ConditionalField("m_sharedMaterial", "NULL", Min = 0.0f, Max = 5.0f)] private float m_splatSize = 1.0f;
|
|
[SerializeField] [ConditionalField("m_sharedMaterial", "NULL", Min = 0.0f, Max = 1.0f)] private float m_blendTightness = 0.0f;
|
|
[SerializeField] private bool m_contributeMaterial = true;
|
|
public Color Color { get => m_sharedMaterial != null ? m_sharedMaterial.Color : m_color; set { m_color = value; MarkDirty(); } }
|
|
public Color Emission { get => m_sharedMaterial != null ? m_sharedMaterial.Emission : m_emission; set { m_emission = value; MarkDirty(); } }
|
|
public float Metallic { get => m_sharedMaterial != null ? m_sharedMaterial.Metallic : m_metallic; set { m_metallic = value; MarkDirty(); } }
|
|
public float Smoothness { get => m_sharedMaterial != null ? m_sharedMaterial.Smoothness : m_smoothness; set { m_smoothness = value; MarkDirty(); } }
|
|
public int TextureIndex { get => m_sharedMaterial != null ? m_sharedMaterial.TextureIndex : m_textureIndex; set { m_textureIndex = value; MarkDirty(); } }
|
|
public float SplatSize { get => m_sharedMaterial != null ? m_sharedMaterial.SplatSize : m_splatSize; set { m_splatSize = value; MarkDirty(); } }
|
|
public float BlendTightness { get => m_sharedMaterial != null ? m_sharedMaterial.BlendTightness : m_blendTightness; set { m_blendTightness = value; MarkDirty(); } }
|
|
public bool ContributeMaterial { get => m_contributeMaterial; set { m_contributeMaterial = value; MarkDirty(); } }
|
|
|
|
private int m_materialHash = -1;
|
|
public int MaterialHash => (m_sharedMaterial != null ? m_sharedMaterial.MaterialHash : m_materialHash);
|
|
|
|
private void OnEnable()
|
|
{
|
|
MarkDirty();
|
|
}
|
|
|
|
private void OnValidate()
|
|
{
|
|
Validate.Saturate(ref m_metallic);
|
|
Validate.Saturate(ref m_smoothness);
|
|
Validate.Range(0, 3, ref m_textureIndex);
|
|
Validate.Saturate(ref m_blendTightness);
|
|
|
|
MarkDirty();
|
|
}
|
|
|
|
public void MarkDirty()
|
|
{
|
|
m_materialHash = Codec.Hash(this);
|
|
GetComponent<MudBrushBase>()?.MarkDirty();
|
|
}
|
|
}
|
|
}
|
|
|