namespace Zinnia.Pointer.Operation.Mutation { using UnityEngine; using Zinnia.Extension; /// /// Mutates the properties of a with the benefit of being able to specify a containing as the target. /// public class PointerElementPropertyMutator : MonoBehaviour { [Tooltip("The PointerElement to mutate.")] [SerializeField] private PointerElement target; /// /// The to mutate. /// public PointerElement Target { get { return target; } set { target = value; } } /// /// The containing that represents the element when a valid collision is occuring. /// private GameObject validElementContainer; public GameObject ValidElementContainer { get { return validElementContainer; } set { validElementContainer = value; if (this.IsMemberChangeAllowed()) { OnAfterValidElementContainerChange(); } } } /// /// The containing the visible mesh for the when a valid collision is occuring. /// private GameObject validMeshContainer; public GameObject ValidMeshContainer { get { return validMeshContainer; } set { validMeshContainer = value; if (this.IsMemberChangeAllowed()) { OnAfterValidMeshContainerChange(); } } } /// /// The containing that represents the element when an invalid collision or no collision is occuring. /// private GameObject invalidElementContainer; public GameObject InvalidElementContainer { get { return invalidElementContainer; } set { invalidElementContainer = value; if (this.IsMemberChangeAllowed()) { OnAfterInvalidElementContainerChange(); } } } /// /// The containing the visible mesh for the when an invalid collision or no collision is occuring. /// private GameObject invalidMeshContainer; public GameObject InvalidMeshContainer { get { return invalidMeshContainer; } set { invalidMeshContainer = value; if (this.IsMemberChangeAllowed()) { OnAfterInvalidMeshContainerChange(); } } } /// /// Determines when the is visible. /// private PointerElement.Visibility elementVisibility; public PointerElement.Visibility ElementVisibility { get { return elementVisibility; } set { elementVisibility = value; if (this.IsMemberChangeAllowed()) { OnAfterElementVisibilityChange(); } } } /// /// Clears . /// public virtual void ClearTarget() { if (!this.IsValidState()) { return; } Target = default; } /// /// Clears . /// public virtual void ClearValidElementContainer() { if (!this.IsValidState()) { return; } ValidElementContainer = default; } /// /// Clears . /// public virtual void ClearInvalidElementContainer() { if (!this.IsValidState()) { return; } InvalidElementContainer = default; } /// /// Clears . /// public virtual void ClearInvalidMeshContainer() { if (!this.IsValidState()) { return; } InvalidMeshContainer = default; } /// /// Sets the based on the first found as either a direct, descendant or ancestor of the given . /// /// The to search for a on. public virtual void SetTarget(GameObject target) { if (!this.IsValidState() || target == null) { return; } Target = target.TryGetComponent(true, true); } /// /// Sets the . /// /// The index of the . public virtual void SetElementVisibility(int elementVisibilityIndex) { ElementVisibility = EnumExtensions.GetByIndex(elementVisibilityIndex); } /// /// Called after has been changed. /// protected virtual void OnAfterValidElementContainerChange() { if (Target == null) { return; } Target.ValidElementContainer = ValidElementContainer; } /// /// Called after has been changed. /// protected virtual void OnAfterValidMeshContainerChange() { if (Target == null) { return; } Target.ValidMeshContainer = ValidMeshContainer; } /// /// Called after has been changed. /// protected virtual void OnAfterInvalidElementContainerChange() { if (Target == null) { return; } Target.InvalidElementContainer = InvalidElementContainer; } /// /// Called after has been changed. /// protected virtual void OnAfterInvalidMeshContainerChange() { if (Target == null) { return; } Target.InvalidMeshContainer = InvalidMeshContainer; } /// /// Called after has been changed. /// protected virtual void OnAfterElementVisibilityChange() { if (Target == null) { return; } Target.ElementVisibility = ElementVisibility; } } }