// Copyright (C) 2019-2021 Alexander Bogarsukov. All rights reserved.
// See the LICENSE.md file in the project root for more information.
using System;
using UnityEngine;
namespace UnityFx.Outline
{
///
/// Outline settings.
///
[CreateAssetMenu(fileName = "OutlineSettings", menuName = "UnityFx/Outline/Outline Settings")]
public sealed class OutlineSettings : ScriptableObject, IOutlineSettings
{
#region data
// NOTE: There is a custom editor for OutlineSettings, so no need to show these in default inspector.
[SerializeField, HideInInspector]
private Color _outlineColor = Color.red;
[SerializeField, HideInInspector, Range(OutlineResources.MinWidth, OutlineResources.MaxWidth)]
private int _outlineWidth = 4;
[SerializeField, HideInInspector, Range(OutlineResources.MinIntensity, OutlineResources.MaxIntensity)]
private float _outlineIntensity = 2;
[SerializeField, HideInInspector, Range(OutlineResources.MinAlphaCutoff, OutlineResources.MaxAlphaCutoff)]
private float _outlineAlphaCutoff = 0.9f;
[SerializeField, HideInInspector]
private OutlineRenderFlags _outlineMode;
#endregion
#region interface
public static bool Equals(IOutlineSettings lhs, IOutlineSettings rhs)
{
if (lhs == null || rhs == null)
{
return false;
}
return lhs.OutlineColor == rhs.OutlineColor &&
lhs.OutlineWidth == rhs.OutlineWidth &&
lhs.OutlineRenderMode == rhs.OutlineRenderMode &&
Mathf.Approximately(lhs.OutlineIntensity, rhs.OutlineIntensity) &&
Mathf.Approximately(lhs.OutlineAlphaCutoff, rhs.OutlineAlphaCutoff);
}
#endregion
#region IOutlineSettings
///
public Color OutlineColor
{
get
{
return _outlineColor;
}
set
{
_outlineColor = value;
}
}
///
public int OutlineWidth
{
get
{
return _outlineWidth;
}
set
{
_outlineWidth = Mathf.Clamp(value, OutlineResources.MinWidth, OutlineResources.MaxWidth);
}
}
///
public float OutlineIntensity
{
get
{
return _outlineIntensity;
}
set
{
_outlineIntensity = Mathf.Clamp(value, OutlineResources.MinIntensity, OutlineResources.MaxIntensity);
}
}
///
public float OutlineAlphaCutoff
{
get
{
return _outlineAlphaCutoff;
}
set
{
_outlineAlphaCutoff = Mathf.Clamp(value, 0, 1);
}
}
///
public OutlineRenderFlags OutlineRenderMode
{
get
{
return _outlineMode;
}
set
{
_outlineMode = value;
}
}
#endregion
#region IEquatable
///
public bool Equals(IOutlineSettings other)
{
return Equals(this, other);
}
#endregion
#region Object
///
public override bool Equals(object other)
{
return Equals(this, other as IOutlineSettings);
}
///
public override int GetHashCode()
{
return base.GetHashCode();
}
#endregion
}
}