//----------------------------------------------------------------------------- // EditCurveKey.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace Xna.Tools { /// /// This class provide editing related informaiton. /// public class EditCurveKey : IEquatable { #region Properties /// /// Sets/Gets Id. /// public long Id { get { return id; } set { id = value; } } /// /// Sets/Gets Selection state. /// public EditCurveSelections Selection { get { return selection; } set { selection = value; } } /// /// Sets/Gets tangent out type. /// public EditCurveTangent TangentOutType { get { return tangentOutType; } set { tangentOutType = value; } } /// /// Sets/Gets tangent in type. /// public EditCurveTangent TangentInType { get { return tangentInType; } set { tangentInType = value; } } /// /// Gets original CurveKey instance. /// public CurveKey OriginalKey { get { return originalKey; } set { originalKey = value; } } /// /// Gets key position. /// public float Position { get { return originalKey.Position; } } /// /// Sets/Gets key value. /// public float Value { get { return originalKey.Value; } set { originalKey.Value = value; } } /// /// Sets/Gets TangentIn. /// public float TangentIn { get { return originalKey.TangentIn; } set { originalKey.TangentIn = value; } } /// /// Sets/Gets TangentOut. /// public float TangentOut { get { return originalKey.TangentOut; } set { originalKey.TangentOut = value; } } /// /// Sets/Gets Continuity. /// public CurveContinuity Continuity { get { return originalKey.Continuity; } set { originalKey.Continuity = value; } } #endregion #region Constructors public EditCurveKey(long id, CurveKey key) { Id = id; OriginalKey = key; TangentOutType = TangentInType = EditCurveTangent.Smooth; } #endregion /// /// Clone this Key. /// /// public EditCurveKey Clone() { EditCurveKey a = new EditCurveKey(Id, OriginalKey.Clone()); a.Selection = Selection; a.TangentInType = TangentInType; a.TangentOutType = TangentOutType; return a; } /// /// Compare against another key. /// /// public bool Equals(EditCurveKey other) { return ( other != null && Id == other.Id && OriginalKey.Equals( other.OriginalKey ) ); } /// /// Generate Unique Id for EditCurveKey /// We need to assign unique Id for each EditCurveKey for undo/redo. /// /// public static long GenerateUniqueId() { // Even if you add 1000 EditCurveKeys for each second, it'll takes // Half billion years to reach maximum number of long. // So, this code should be safe enough. return currentId++; } private static long currentId; #region Properties wrap members. public long id; private EditCurveSelections selection = EditCurveSelections.None; private EditCurveTangent tangentOutType = EditCurveTangent.Smooth; private EditCurveTangent tangentInType = EditCurveTangent.Smooth; private CurveKey originalKey; #endregion } }