mirror of
https://github.com/ZuneDev/MicrosoftIris.git
synced 2026-07-27 13:13:29 -07:00
153 lines
5.3 KiB
C#
153 lines
5.3 KiB
C#
// Decompiled with JetBrains decompiler
|
|||
|
|
// Type: Microsoft.Iris.Animations.Animation
|
||
|
|
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
||
|
|
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
|
||
|
|
// Assembly location: C:\Program Files\Zune\UIX.dll
|
||
|
|
|
||
|
|
using Microsoft.Iris.Drawing;
|
||
|
|
using Microsoft.Iris.Library;
|
||
|
|
using Microsoft.Iris.Render;
|
||
|
|
using System;
|
||
|
|
using System.Collections.Specialized;
|
||
|
|
using System.Text;
|
||
|
|
|
||
|
|
namespace Microsoft.Iris.Animations
|
||
|
|
{
|
||
|
|
internal class Animation : AnimationTemplate, IAnimationProvider
|
||
|
|
{
|
||
|
|
private static readonly DataCookie s_rotationAxisProperty = DataCookie.ReserveSlot();
|
||
|
|
private static readonly DataCookie s_centerPointScaleProperty = DataCookie.ReserveSlot();
|
||
|
|
private static readonly DataCookie s_centerPointOffsetProperty = DataCookie.ReserveSlot();
|
||
|
|
private BitVector32 _bitsBitVector;
|
||
|
|
private AnimationEventType _type;
|
||
|
|
private DynamicData _dataMap;
|
||
|
|
|
||
|
|
public Animation()
|
||
|
|
{
|
||
|
|
_type = AnimationEventType.Idle;
|
||
|
|
_bitsBitVector = new BitVector32();
|
||
|
|
_dataMap = new DynamicData();
|
||
|
|
}
|
||
|
|
|
||
|
|
public override object Clone()
|
||
|
|
{
|
||
|
|
Animation animation = new Animation();
|
||
|
|
CloneWorker(animation);
|
||
|
|
return animation;
|
||
|
|
}
|
||
|
|
|
||
|
|
protected override void CloneWorker(AnimationTemplate rawAnimation)
|
||
|
|
{
|
||
|
|
base.CloneWorker(rawAnimation);
|
||
|
|
Animation animation = (Animation)rawAnimation;
|
||
|
|
animation.Type = Type;
|
||
|
|
if (GetBit(Bits.CenterPointScale))
|
||
|
|
animation.CenterPointPercent = CenterPointPercent;
|
||
|
|
if (GetBit(Bits.RotationAxis))
|
||
|
|
animation.RotationAxis = RotationAxis;
|
||
|
|
animation.DisableMouseInput = DisableMouseInput;
|
||
|
|
}
|
||
|
|
|
||
|
|
private void PrepareToPlay(ref AnimationArgs args)
|
||
|
|
{
|
||
|
|
if (GetBit(Bits.CenterPointScale))
|
||
|
|
args.ViewItem.VisualCenterPoint = CenterPointPercent;
|
||
|
|
if (!GetBit(Bits.RotationAxis))
|
||
|
|
return;
|
||
|
|
Rotation visualRotation = args.ViewItem.VisualRotation;
|
||
|
|
args.ViewItem.VisualRotation = new Rotation(visualRotation.AngleRadians, RotationAxis);
|
||
|
|
}
|
||
|
|
|
||
|
|
public AnimationEventType Type
|
||
|
|
{
|
||
|
|
get => _type;
|
||
|
|
set => _type = value;
|
||
|
|
}
|
||
|
|
|
||
|
|
public Vector3 CenterPointPercent
|
||
|
|
{
|
||
|
|
get => !GetBit(Bits.CenterPointScale) ? Vector3.Zero : (Vector3)GetData(s_centerPointScaleProperty);
|
||
|
|
set
|
||
|
|
{
|
||
|
|
if (!(CenterPointPercent != value))
|
||
|
|
return;
|
||
|
|
SetData(s_centerPointScaleProperty, value);
|
||
|
|
SetBit(Bits.CenterPointScale, true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public Vector3 RotationAxis
|
||
|
|
{
|
||
|
|
get => !GetBit(Bits.RotationAxis) ? Rotation.Default.Axis : (Vector3)GetData(s_rotationAxisProperty);
|
||
|
|
set
|
||
|
|
{
|
||
|
|
if (!(RotationAxis != value))
|
||
|
|
return;
|
||
|
|
SetData(s_rotationAxisProperty, value);
|
||
|
|
SetBit(Bits.RotationAxis, true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public bool DisableMouseInput
|
||
|
|
{
|
||
|
|
get => GetBit(Bits.DisableMouseInput);
|
||
|
|
set => SetBit(Bits.DisableMouseInput, value);
|
||
|
|
}
|
||
|
|
|
||
|
|
AnimationTemplate IAnimationProvider.Build(
|
||
|
|
ref AnimationArgs args)
|
||
|
|
{
|
||
|
|
PrepareToPlay(ref args);
|
||
|
|
return this;
|
||
|
|
}
|
||
|
|
|
||
|
|
public bool CanCache => true;
|
||
|
|
|
||
|
|
public override string ToString()
|
||
|
|
{
|
||
|
|
StringBuilder stringBuilder = new StringBuilder();
|
||
|
|
stringBuilder.Append("{AnimationTemplate ID=");
|
||
|
|
stringBuilder.Append(DebugID);
|
||
|
|
stringBuilder.Append(", Loop=");
|
||
|
|
stringBuilder.Append(Loop);
|
||
|
|
stringBuilder.Append(", KeyframeCount=");
|
||
|
|
stringBuilder.Append(Keyframes.Count);
|
||
|
|
stringBuilder.Append("}");
|
||
|
|
return stringBuilder.ToString();
|
||
|
|
}
|
||
|
|
|
||
|
|
private bool GetBit(Animation.Bits bit) => _bitsBitVector[(int)bit];
|
||
|
|
|
||
|
|
private void SetBit(Animation.Bits bit, bool value) => _bitsBitVector[(int)bit] = value;
|
||
|
|
|
||
|
|
private bool ChangeBit(Animation.Bits bit, bool value)
|
||
|
|
{
|
||
|
|
if (_bitsBitVector[(int)bit] == value)
|
||
|
|
return false;
|
||
|
|
_bitsBitVector[(int)bit] = value;
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
protected object GetData(DataCookie cookie) => _dataMap.GetData(cookie);
|
||
|
|
|
||
|
|
protected void SetData(DataCookie cookie, object value) => _dataMap.SetData(cookie, value);
|
||
|
|
|
||
|
|
protected Delegate GetEventHandler(EventCookie cookie) => _dataMap.GetEventHandler(cookie);
|
||
|
|
|
||
|
|
protected void AddEventHandler(EventCookie cookie, Delegate handlerToAdd) => _dataMap.AddEventHandler(cookie, handlerToAdd);
|
||
|
|
|
||
|
|
protected void RemoveEventHandler(EventCookie cookie, Delegate handlerToRemove) => _dataMap.RemoveEventHandler(cookie, handlerToRemove);
|
||
|
|
|
||
|
|
protected void RemoveEventHandlers(EventCookie cookie) => _dataMap.RemoveEventHandlers(cookie);
|
||
|
|
|
||
|
|
private static uint GetKey(EventCookie cookie) => EventCookie.ToUInt32(cookie);
|
||
|
|
|
||
|
|
private enum Bits
|
||
|
|
{
|
||
|
|
CenterPointScale = 1,
|
||
|
|
RotationAxis = 2,
|
||
|
|
DisableMouseInput = 4,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|