77 lines
No EOL
3.1 KiB
C#
77 lines
No EOL
3.1 KiB
C#
using System;
|
|
using DC.Animator.Core;
|
|
using UnityEngine;
|
|
|
|
namespace DC.Animator.Adapters
|
|
{
|
|
public class RectTransformAdapter : IAnimatable
|
|
{
|
|
private readonly RectTransform _rectTransform;
|
|
|
|
public RectTransformAdapter(RectTransform rectTransform) => _rectTransform = rectTransform;
|
|
|
|
public bool SupportsProperty(AnimatableProperty property)
|
|
{
|
|
return property switch
|
|
{
|
|
AnimatableProperty.Position or AnimatableProperty.LocalPosition or AnimatableProperty.AnchoredPosition
|
|
or AnimatableProperty.Scale or AnimatableProperty.Rotation
|
|
or AnimatableProperty.EulerAngles => true,
|
|
_ => false
|
|
};
|
|
}
|
|
|
|
public object GetValue(AnimatableProperty property)
|
|
{
|
|
return property switch
|
|
{
|
|
AnimatableProperty.Position => _rectTransform.position,
|
|
AnimatableProperty.LocalPosition => _rectTransform.localPosition,
|
|
AnimatableProperty.AnchoredPosition => _rectTransform.anchoredPosition,
|
|
AnimatableProperty.Scale => _rectTransform.localScale,
|
|
AnimatableProperty.Rotation => _rectTransform.rotation,
|
|
AnimatableProperty.EulerAngles => _rectTransform.eulerAngles,
|
|
_ => throw new ArgumentException($"RectTransformAdapter does not support property {property}")
|
|
};
|
|
}
|
|
|
|
public void SetValue(AnimatableProperty property, object value)
|
|
{
|
|
switch (property)
|
|
{
|
|
case AnimatableProperty.Position:
|
|
_rectTransform.position = (Vector3)value;
|
|
break;
|
|
case AnimatableProperty.LocalPosition:
|
|
_rectTransform.localPosition = (Vector3)value;
|
|
break;
|
|
case AnimatableProperty.AnchoredPosition:
|
|
_rectTransform.anchoredPosition = (Vector2)value;
|
|
break;
|
|
case AnimatableProperty.Scale:
|
|
_rectTransform.localScale = (Vector3)value;
|
|
break;
|
|
case AnimatableProperty.Rotation:
|
|
_rectTransform.rotation = (Quaternion)value;
|
|
break;
|
|
case AnimatableProperty.EulerAngles:
|
|
_rectTransform.eulerAngles = (Vector3)value;
|
|
break;
|
|
default:
|
|
throw new ArgumentException($"RectTransformAdapter does not support property {property}");
|
|
}
|
|
}
|
|
|
|
public Type GetPropertyType(AnimatableProperty property)
|
|
{
|
|
return property switch
|
|
{
|
|
AnimatableProperty.Position or AnimatableProperty.LocalPosition or AnimatableProperty.Scale
|
|
or AnimatableProperty.EulerAngles => typeof(Vector3),
|
|
AnimatableProperty.AnchoredPosition => typeof(Vector2),
|
|
AnimatableProperty.Rotation => typeof(Quaternion),
|
|
_ => throw new ArgumentException($"RectTransformAdapter does not support property {property}")
|
|
};
|
|
}
|
|
}
|
|
} |