OldBlueWater/BlueWater/Assets/Doozy/Runtime/Reactor/Reactions/UIScaleReaction.cs
2023-08-02 15:08:03 +09:00

159 lines
4.6 KiB
C#

// Copyright (c) 2015 - 2023 Doozy Entertainment. All Rights Reserved.
// This code can only be used under the standard Unity Asset Store End User License Agreement
// A Copy of the EULA APPENDIX 1 is available at http://unity3d.com/company/legal/as_terms
using System;
using Doozy.Runtime.Reactor.Internal;
using UnityEngine;
namespace Doozy.Runtime.Reactor.Reactions
{
[Serializable]
public class UIScaleReaction : Vector3Reaction
{
public RectTransform rectTransform { get; private set; }
[SerializeField] private bool Enabled;
public bool enabled
{
get => Enabled;
set => Enabled = value;
}
[SerializeField] private Vector3 StartScale;
public Vector3 startScale
{
get => StartScale;
set
{
StartScale = value;
if (isActive) UpdateValues();
}
}
[SerializeField] private ReferenceValue FromReferenceValue = ReferenceValue.StartValue;
public ReferenceValue fromReferenceValue
{
get => FromReferenceValue;
set => FromReferenceValue = value;
}
[SerializeField] private ReferenceValue ToReferenceValue = ReferenceValue.StartValue;
public ReferenceValue toReferenceValue
{
get => ToReferenceValue;
set => ToReferenceValue = value;
}
[SerializeField] private Vector3 FromCustomValue;
public Vector3 fromCustomValue
{
get => FromCustomValue;
set => FromCustomValue = value;
}
[SerializeField] private Vector3 ToCustomValue;
public Vector3 toCustomValue
{
get => ToCustomValue;
set => ToCustomValue = value;
}
[SerializeField] private Vector3 FromOffset;
public Vector3 fromOffset
{
get => FromOffset;
set => FromOffset = value;
}
[SerializeField] private Vector3 ToOffset;
public Vector3 toOffset
{
get => ToOffset;
set => ToOffset = value;
}
public Vector3 currentScale
{
get
{
Vector3 localScale = rectTransform.localScale;
return new Vector3(localScale.x, localScale.y, 1f);
}
set
{
if (rectTransform == null)
{
Stop();
return;
}
rectTransform.localScale = new Vector3(value.x, value.y, 1f);
}
}
public override void Reset()
{
base.Reset();
rectTransform = null;
FromReferenceValue = ReferenceValue.StartValue;
FromCustomValue = Vector3.one;
FromOffset = Vector3.zero;
ToReferenceValue = ReferenceValue.StartValue;
ToCustomValue = Vector3.one;
ToOffset = Vector3.zero;
}
public UIScaleReaction SetTarget(RectTransform target)
{
this.SetTargetObject(target);
rectTransform = target;
StartScale = currentScale;
getter = () => currentScale;
setter = value => currentScale = value;
return this;
}
public override void Play(bool inReverse = false)
{
if (!isActive)
{
UpdateValues();
SetValue(inReverse ? ToValue : FromValue);
}
base.Play(inReverse);
}
public override void PlayFromProgress(float fromProgress)
{
UpdateValues();
base.PlayFromProgress(fromProgress);
}
public override void SetProgressAt(float targetProgress)
{
UpdateValues();
base.SetProgressAt(targetProgress);
}
public void UpdateValues()
{
SetFrom(GetValue(FromReferenceValue, FromOffset, FromCustomValue));
SetTo(GetValue(ToReferenceValue, ToOffset, ToCustomValue));
}
private Vector3 GetValue(ReferenceValue referenceValue, Vector3 offset, Vector3 customValue)
{
return referenceValue switch
{
ReferenceValue.StartValue => StartScale + offset,
ReferenceValue.CurrentValue => currentScale + offset,
ReferenceValue.CustomValue => customValue,
_ => throw new ArgumentOutOfRangeException()
};
}
}
}