using UnityEngine;
<%IF !EQUATABLE%>using System;<%ENDIF%>
<%IF TYPE_HAS_NAMESPACE%>using {TYPE_NAMESPACE};<%ENDIF%>
<%IF HAS_SUB_UA_NAMESPACE%>
namespace UnityAtoms.{SUB_UA_NAMESPACE}
<%ELSE%>
namespace UnityAtoms
<%ENDIF%>
{
<%IF EQUATABLE%>
///
/// Variable of type `{VALUE_TYPE}`. Inherits from `EquatableAtomVariable<{VALUE_TYPE}, {VALUE_TYPE_NAME}Pair, {VALUE_TYPE_NAME}Event, {VALUE_TYPE_NAME}PairEvent, {VALUE_TYPE_NAME}{VALUE_TYPE_NAME}Function>`.
///
[EditorIcon("atom-icon-lush")]
[CreateAssetMenu(menuName = "Unity Atoms/Variables/{VALUE_TYPE_NAME}", fileName = "{VALUE_TYPE_NAME}Variable")]
public <%IF !TYPE_IS_STRING%>sealed <%ENDIF%>class {VALUE_TYPE_NAME}Variable : EquatableAtomVariable<{VALUE_TYPE}, {VALUE_TYPE_NAME}Pair, {VALUE_TYPE_NAME}Event, {VALUE_TYPE_NAME}PairEvent, {VALUE_TYPE_NAME}{VALUE_TYPE_NAME}Function>
{
<%IF TYPE_IS_COLOR%>
///
/// Set Alpha of Color by value.
///
/// New alpha value.
public void SetAlpha(float value) => Value = new Color(Value.r, Value.g, Value.b, value);
///
/// Set Alpha of Color by Variable value.
///
/// New alpha Variable value.
public void SetAlpha(AtomBaseVariable variable) => SetAlpha(variable.Value);
<%ENDIF%>
<%IF IS_NUMERIC%>
///
/// Add value to Variable.
///
/// Value to add.
public void Add({VALUE_TYPE} value) => Value += value;
///
/// Add variable value to Variable.
///
/// Variable with value to add.
public void Add(AtomBaseVariable<{VALUE_TYPE}> variable) => Add(variable.Value);
///
/// Subtract value from Variable.
///
/// Value to subtract.
public void Subtract({VALUE_TYPE} value) => Value -= value;
///
/// Subtract variable value from Variable.
///
/// Variable with value to subtract.
public void Subtract(AtomBaseVariable<{VALUE_TYPE}> variable) => Subtract(variable.Value);
///
/// Multiply variable by value.
///
/// Value to multiple by.
public void MultiplyBy({VALUE_TYPE} value) => Value *= value;
///
/// Multiply variable by Variable value.
///
/// Variable with value to multiple by.
public void MultiplyBy(AtomBaseVariable<{VALUE_TYPE}> variable) => MultiplyBy(variable.Value);
///
/// Divide Variable by value.
///
/// Value to divide by.
public void DivideBy({VALUE_TYPE} value) => Value /= value;
///
/// Divide Variable by Variable value.
///
/// Variable value to divide by.
public void DivideBy(AtomBaseVariable<{VALUE_TYPE}> variable) => DivideBy(variable.Value);
<%ENDIF%>
<%IF IS_VECTOR%>
///
/// Multiply variable by value.
///
/// Value to multiple by.
public void MultiplyBy(float value) => Value *= value;
///
/// Multiply variable by Variable value.
///
/// Variable with value to multiple by.
public void MultiplyBy(AtomBaseVariable variable) => MultiplyBy(variable.Value);
///
/// Divide Variable by value.
///
/// Value to divide by.
public void DivideBy(float value) => Value /= value;
///
/// Divide Variable by Variable value.
///
/// Variable value to divide by.
public void DivideBy(AtomBaseVariable variable) => DivideBy(variable.Value);
<%ENDIF%>
}
<%ELSE%>
///
/// Variable of type `{VALUE_TYPE}`. Inherits from `AtomVariable<{VALUE_TYPE}, {VALUE_TYPE_NAME}Pair, {VALUE_TYPE_NAME}Event, {VALUE_TYPE_NAME}PairEvent, {VALUE_TYPE_NAME}{VALUE_TYPE_NAME}Function>`.
///
[EditorIcon("atom-icon-lush")]
[CreateAssetMenu(menuName = "Unity Atoms/Variables/{VALUE_TYPE_NAME}", fileName = "{VALUE_TYPE_NAME}Variable")]
public sealed class {VALUE_TYPE_NAME}Variable : AtomVariable<{VALUE_TYPE}, {VALUE_TYPE_NAME}Pair, {VALUE_TYPE_NAME}Event, {VALUE_TYPE_NAME}PairEvent, {VALUE_TYPE_NAME}{VALUE_TYPE_NAME}Function>
{
protected override bool ValueEquals({VALUE_TYPE} other)
{
<%IF TYPE_IS_GAMEOBJECT|TYPE_IS_COLLIDER|TYPE_IS_COLLIDER2D|TYPE_IS_COLLISION|TYPE_IS_COLLISION2D%>
return _value == other;
<%ELSE%>
throw new NotImplementedException();
<%ENDIF%>
}
}
<%ENDIF%>
}