mirror of
https://github.com/ZuneDev/Xune.git
synced 2026-07-27 13:13:10 -07:00
131 lines
4.7 KiB
C#
131 lines
4.7 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Microsoft.Iris.Render.Animation.AnimationSystem
|
|
// Assembly: UIX.RenderApi, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
|
// MVID: D47658B8-A8EA-43D6-8837-ECE823BFFFC1
|
|
// Assembly location: C:\Program Files\Zune\UIX.RenderApi.dll
|
|
|
|
using Microsoft.Iris.Render.Common;
|
|
using Microsoft.Iris.Render.Internal;
|
|
using Microsoft.Iris.Render.Protocol;
|
|
using Microsoft.Iris.Render.Protocols.Splash.Rendering;
|
|
using System;
|
|
|
|
namespace Microsoft.Iris.Render.Animation
|
|
{
|
|
internal class AnimationSystem : SharedRenderObject, IAnimationSystem, IRenderHandleOwner
|
|
{
|
|
private RenderSession m_ownerSession;
|
|
private RemoteAnimationManager m_remoteObject;
|
|
private int m_nUpdatesPerSecond;
|
|
private float m_flSpeedAdjustment;
|
|
private bool m_backCompat;
|
|
|
|
internal AnimationSystem(RenderSession ownerSession)
|
|
{
|
|
this.m_ownerSession = ownerSession;
|
|
this.m_remoteObject = ownerSession.BuildRemoteAnimationManager(this);
|
|
this.m_flSpeedAdjustment = 1f;
|
|
this.m_backCompat = false;
|
|
this.RegisterUsage(ownerSession);
|
|
}
|
|
|
|
protected override void Dispose(bool inDispose)
|
|
{
|
|
try
|
|
{
|
|
if (inDispose && this.m_remoteObject != null)
|
|
this.m_remoteObject.Dispose();
|
|
this.m_ownerSession = null;
|
|
this.m_remoteObject = null;
|
|
}
|
|
finally
|
|
{
|
|
base.Dispose(inDispose);
|
|
}
|
|
}
|
|
|
|
internal RenderSession Session => this.m_ownerSession;
|
|
|
|
public bool BackCompat
|
|
{
|
|
get => this.m_backCompat;
|
|
set => this.m_backCompat = value;
|
|
}
|
|
|
|
IKeyframeAnimation IAnimationSystem.CreateKeyframeAnimation(
|
|
object objUser,
|
|
AnimationInput initialValue)
|
|
{
|
|
Debug2.Validate(objUser != null, typeof(ArgumentNullException), nameof(objUser));
|
|
Debug2.Validate(initialValue != null, typeof(ArgumentNullException), nameof(initialValue));
|
|
KeyframeAnimation keyframeAnimation = new KeyframeAnimation(this, initialValue);
|
|
keyframeAnimation.RegisterUsage(objUser);
|
|
return keyframeAnimation;
|
|
}
|
|
|
|
IAnimationGroup IAnimationSystem.CreateAnimationGroup(
|
|
object objUser)
|
|
{
|
|
Debug2.Validate(objUser != null, typeof(ArgumentNullException), nameof(objUser));
|
|
AnimationGroup animationGroup = new AnimationGroup(this);
|
|
animationGroup.RegisterUsage(objUser);
|
|
return animationGroup;
|
|
}
|
|
|
|
void IAnimationSystem.PulseTimeAdvance(int nAdvanceMs) => this.PulseTimeAdvance(nAdvanceMs);
|
|
|
|
int IAnimationSystem.UpdatesPerSecond
|
|
{
|
|
get => this.m_nUpdatesPerSecond;
|
|
set
|
|
{
|
|
if (value == this.m_nUpdatesPerSecond)
|
|
return;
|
|
this.m_nUpdatesPerSecond = value;
|
|
this.m_remoteObject.SendSetAnimationRate(this.m_nUpdatesPerSecond);
|
|
}
|
|
}
|
|
|
|
float IAnimationSystem.SpeedAdjustment
|
|
{
|
|
get => this.m_flSpeedAdjustment;
|
|
set
|
|
{
|
|
if (Math2.WithinEpsilon(this.m_flSpeedAdjustment, value))
|
|
return;
|
|
this.m_flSpeedAdjustment = value;
|
|
this.m_remoteObject.SendSetGlobalSpeedAdjustment(this.m_flSpeedAdjustment);
|
|
}
|
|
}
|
|
|
|
IExternalAnimationInput IAnimationSystem.CreateExternalAnimationInput(
|
|
object objUser,
|
|
IAnimationPropertyMap propertyMap)
|
|
{
|
|
return new ExternalAnimationInput(objUser, this.m_ownerSession, propertyMap);
|
|
}
|
|
|
|
void IAnimationSystem.PauseAnimations() => this.m_remoteObject.SendSetGlobalSpeedAdjustment(0.0f);
|
|
|
|
void IAnimationSystem.StepAnimations(int nAdvanceMs) => this.PulseTimeAdvance(nAdvanceMs);
|
|
|
|
void IAnimationSystem.ResumeAnimations() => this.m_remoteObject.SendSetGlobalSpeedAdjustment(this.m_flSpeedAdjustment);
|
|
|
|
RENDERHANDLE IRenderHandleOwner.RenderHandle => this.m_remoteObject.RenderHandle;
|
|
|
|
void IRenderHandleOwner.OnDisconnect() => this.m_remoteObject = null;
|
|
|
|
protected override void Invariant()
|
|
{
|
|
Debug2.Validate(this.m_remoteObject.IsValid, typeof(InvalidOperationException), "RemoteAnimationManager must be connected");
|
|
this.m_ownerSession.AssertOwningThread();
|
|
}
|
|
|
|
private void PulseTimeAdvance(int nAdvanceMs)
|
|
{
|
|
Debug2.Validate(nAdvanceMs > 0, typeof(ArgumentOutOfRangeException), "advanceTime");
|
|
this.m_remoteObject.SendPulseTimeAdvance(nAdvanceMs);
|
|
}
|
|
}
|
|
}
|