using System; using System.Collections.Generic; using UnityEngine; namespace nadena.dev.modular_avatar.core { [Serializable] public class MaterialSwitchObject { public AvatarObjectReference Object; public Material Material; public int MaterialIndex; public MaterialSwitchObject Clone() { return new MaterialSwitchObject { Object = Object.Clone(), Material = Material, MaterialIndex = MaterialIndex }; } public bool Equals(MaterialSwitchObject other) { return Equals(Object, other.Object) && Equals(Material, other.Material) && MaterialIndex == other.MaterialIndex; } public override bool Equals(object obj) { return obj is MaterialSwitchObject other && Equals(other); } public override int GetHashCode() { return HashCode.Combine(Object, Material, MaterialIndex); } } [AddComponentMenu("Modular Avatar/MA Material Setter")] [HelpURL("https://modular-avatar.nadena.dev/docs/reference/reaction/material-setter?lang=auto")] public class ModularAvatarMaterialSetter : ReactiveComponent, IHaveObjReferences { [SerializeField] private List m_objects = new(); public List Objects { get => m_objects; set => m_objects = value; } public override void ResolveReferences() { foreach (var obj in m_objects) { obj.Object?.Get(this); } } public IEnumerable GetObjectReferences() { foreach (var obj in m_objects) if (obj.Object != null) yield return obj.Object; } } }