84 lines
2.7 KiB
C#
84 lines
2.7 KiB
C#
|
using UnityEngine;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System;
|
|||
|
|
|||
|
namespace DigitalOpus.MB.Core
|
|||
|
{
|
|||
|
public class TextureBlenderMaterialPropertyCacheHelper
|
|||
|
{
|
|||
|
private struct MaterialPropertyPair
|
|||
|
{
|
|||
|
public Material material;
|
|||
|
public string property;
|
|||
|
|
|||
|
public MaterialPropertyPair(Material m, string prop)
|
|||
|
{
|
|||
|
material = m;
|
|||
|
property = prop;
|
|||
|
}
|
|||
|
|
|||
|
public override bool Equals(object obj)
|
|||
|
{
|
|||
|
if (!(obj is MaterialPropertyPair)) return false;
|
|||
|
MaterialPropertyPair b = (MaterialPropertyPair)obj;
|
|||
|
if (!material.Equals(b.material)) return false;
|
|||
|
if (property != b.property) return false;
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
public override int GetHashCode()
|
|||
|
{
|
|||
|
return base.GetHashCode();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private Dictionary<MaterialPropertyPair, object> nonTexturePropertyValuesForSourceMaterials = new Dictionary<MaterialPropertyPair, object>();
|
|||
|
|
|||
|
private bool AllNonTexturePropertyValuesAreEqual(string prop)
|
|||
|
{
|
|||
|
bool foundFirst = false;
|
|||
|
object firstVal = null;
|
|||
|
foreach (MaterialPropertyPair k in nonTexturePropertyValuesForSourceMaterials.Keys)
|
|||
|
{
|
|||
|
if (k.property.Equals(prop))
|
|||
|
{
|
|||
|
if (!foundFirst)
|
|||
|
{
|
|||
|
firstVal = nonTexturePropertyValuesForSourceMaterials[k];
|
|||
|
foundFirst = true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (!firstVal.Equals(nonTexturePropertyValuesForSourceMaterials[k]))
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
public void CacheMaterialProperty(Material m, string property, object value)
|
|||
|
{
|
|||
|
nonTexturePropertyValuesForSourceMaterials[new MaterialPropertyPair(m, property)] = value;
|
|||
|
}
|
|||
|
|
|||
|
public object GetValueIfAllSourceAreTheSameOrDefault(string property, object defaultValue)
|
|||
|
{
|
|||
|
if (AllNonTexturePropertyValuesAreEqual(property))
|
|||
|
{
|
|||
|
foreach (MaterialPropertyPair k in nonTexturePropertyValuesForSourceMaterials.Keys)
|
|||
|
{
|
|||
|
if (k.property.Equals(property))
|
|||
|
{
|
|||
|
return nonTexturePropertyValuesForSourceMaterials[k];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return defaultValue;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|