Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/CurveKey.cs
224 lines | 5.2 KiB | text/x-csharp | CSharpLexer
224 lines | 5.2 KiB | text/x-csharp | CSharpLexer
r0 | #region License | |||
/* FNA - XNA4 Reimplementation for Desktop Platforms | ||||
* Copyright 2009-2020 Ethan Lee and the MonoGame Team | ||||
* | ||||
* Released under the Microsoft Public License. | ||||
* See LICENSE for details. | ||||
*/ | ||||
/* Derived from code by the Mono.Xna Team (Copyright 2006). | ||||
* Released under the MIT License. See monoxna.LICENSE for details. | ||||
*/ | ||||
#endregion | ||||
#region Using Statements | ||||
using System; | ||||
#endregion | ||||
namespace Microsoft.Xna.Framework | ||||
{ | ||||
/// <summary> | ||||
/// Key point on the <see cref="Curve"/>. | ||||
/// </summary> | ||||
[Serializable] | ||||
public class CurveKey : IEquatable<CurveKey>, IComparable<CurveKey> | ||||
{ | ||||
#region Public Properties | ||||
/// <summary> | ||||
/// Gets or sets the indicator whether the segment between this point and the next point on the curve is discrete or continuous. | ||||
/// </summary> | ||||
public CurveContinuity Continuity | ||||
{ | ||||
get; | ||||
set; | ||||
} | ||||
/// <summary> | ||||
/// Gets a position of the key on the curve. | ||||
/// </summary> | ||||
public float Position | ||||
{ | ||||
get; | ||||
private set; | ||||
} | ||||
/// <summary> | ||||
/// Gets or sets a tangent when approaching this point from the previous point on the curve. | ||||
/// </summary> | ||||
public float TangentIn | ||||
{ | ||||
get; | ||||
set; | ||||
} | ||||
/// <summary> | ||||
/// Gets or sets a tangent when leaving this point to the next point on the curve. | ||||
/// </summary> | ||||
public float TangentOut | ||||
{ | ||||
get; | ||||
set; | ||||
} | ||||
/// <summary> | ||||
/// Gets a value of this point. | ||||
/// </summary> | ||||
public float Value | ||||
{ | ||||
get; | ||||
set; | ||||
} | ||||
#endregion | ||||
#region Public Constructors | ||||
/// <summary> | ||||
/// Creates a new instance of <see cref="CurveKey"/> class. | ||||
/// </summary> | ||||
/// <param name="position">Position on the curve.</param> | ||||
/// <param name="value">Value of the control point.</param> | ||||
public CurveKey( | ||||
float position, | ||||
float value | ||||
) : this( | ||||
position, | ||||
value, | ||||
0, | ||||
0, | ||||
CurveContinuity.Smooth | ||||
) { | ||||
} | ||||
/// <summary> | ||||
/// Creates a new instance of <see cref="CurveKey"/> class. | ||||
/// </summary> | ||||
/// <param name="position">Position on the curve.</param> | ||||
/// <param name="value">Value of the control point.</param> | ||||
/// <param name="tangentIn">Tangent approaching point from the previous point on the curve.</param> | ||||
/// <param name="tangentOut">Tangent leaving point toward next point on the curve.</param> | ||||
public CurveKey( | ||||
float position, | ||||
float value, | ||||
float tangentIn, | ||||
float tangentOut | ||||
) : this( | ||||
position, | ||||
value, | ||||
tangentIn, | ||||
tangentOut, | ||||
CurveContinuity.Smooth | ||||
) { | ||||
} | ||||
/// <summary> | ||||
/// Creates a new instance of <see cref="CurveKey"/> class. | ||||
/// </summary> | ||||
/// <param name="position">Position on the curve.</param> | ||||
/// <param name="value">Value of the control point.</param> | ||||
/// <param name="tangentIn">Tangent approaching point from the previous point on the curve.</param> | ||||
/// <param name="tangentOut">Tangent leaving point toward next point on the curve.</param> | ||||
/// <param name="continuity">Indicates whether the curve is discrete or continuous.</param> | ||||
public CurveKey( | ||||
float position, | ||||
float value, | ||||
float tangentIn, | ||||
float tangentOut, | ||||
CurveContinuity continuity | ||||
) { | ||||
Position = position; | ||||
Value = value; | ||||
TangentIn = tangentIn; | ||||
TangentOut = tangentOut; | ||||
Continuity = continuity; | ||||
} | ||||
#endregion | ||||
#region Public Methods | ||||
/// <summary> | ||||
/// Creates a copy of this key. | ||||
/// </summary> | ||||
/// <returns>A copy of this key.</returns> | ||||
public CurveKey Clone() | ||||
{ | ||||
return new CurveKey( | ||||
Position, | ||||
Value, | ||||
TangentIn, | ||||
TangentOut, | ||||
Continuity | ||||
); | ||||
} | ||||
public int CompareTo(CurveKey other) | ||||
{ | ||||
return Position.CompareTo(other.Position); | ||||
} | ||||
public bool Equals(CurveKey other) | ||||
{ | ||||
return (this == other); | ||||
} | ||||
#endregion | ||||
#region Public Static Operators and Override Methods | ||||
/// <summary> | ||||
/// Compares whether two <see cref="CurveKey"/> instances are not equal. | ||||
/// </summary> | ||||
/// <param name="value1"><see cref="CurveKey"/> instance on the left of the not equal sign.</param> | ||||
/// <param name="value2"><see cref="CurveKey"/> instance on the right of the not equal sign.</param> | ||||
/// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns> | ||||
public static bool operator !=(CurveKey a, CurveKey b) | ||||
{ | ||||
return !(a == b); | ||||
} | ||||
/// <summary> | ||||
/// Compares whether two <see cref="CurveKey"/> instances are equal. | ||||
/// </summary> | ||||
/// <param name="value1"><see cref="CurveKey"/> instance on the left of the equal sign.</param> | ||||
/// <param name="value2"><see cref="CurveKey"/> instance on the right of the equal sign.</param> | ||||
/// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns> | ||||
public static bool operator ==(CurveKey a, CurveKey b) | ||||
{ | ||||
if (object.Equals(a, null)) | ||||
{ | ||||
return object.Equals(b, null); | ||||
} | ||||
if (object.Equals(b, null)) | ||||
{ | ||||
return object.Equals(a, null); | ||||
} | ||||
return ( (a.Position == b.Position) && | ||||
(a.Value == b.Value) && | ||||
(a.TangentIn == b.TangentIn) && | ||||
(a.TangentOut == b.TangentOut) && | ||||
(a.Continuity == b.Continuity) ); | ||||
} | ||||
public override bool Equals(object obj) | ||||
{ | ||||
return (obj as CurveKey) == this; | ||||
} | ||||
public override int GetHashCode() | ||||
{ | ||||
return ( | ||||
Position.GetHashCode() ^ | ||||
Value.GetHashCode() ^ | ||||
TangentIn.GetHashCode() ^ | ||||
TangentOut.GetHashCode() ^ | ||||
Continuity.GetHashCode() | ||||
); | ||||
} | ||||
#endregion | ||||
} | ||||
} | ||||