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