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