OldBlueWater/BlueWater/Assets/Doozy/Runtime/Reactor/Targets/ProgressTargets/UnityEventProgressTarget.cs

92 lines
3.2 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.Common.Events;
using UnityEngine;
namespace Doozy.Runtime.Reactor.Targets.ProgressTargets
{
[AddComponentMenu("Doozy/Reactor/Targets/UnityEvent Progress Target")]
public class UnityEventProgressTarget : MetaProgressTarget<FloatEvent>
{
[SerializeField] private bool WholeNumbers = true;
/// <summary> Should the target variable value get rounded to the nearest integer? </summary>
public bool wholeNumbers
{
get => WholeNumbers;
set => WholeNumbers = value;
}
[SerializeField] private bool UseMultiplier = true;
/// <summary> Should the target variable value have a multiplier applied? </summary>
public bool useMultiplier
{
get => UseMultiplier;
set => UseMultiplier = value;
}
[SerializeField] private float Multiplier = 100;
/// <summary>
/// If UseMultiplier is TRUE, the target variable value will be multiplied by this value.
/// Useful if you want to convert the Progress from 0.5 to 50% for example.
/// </summary>
public float multiplier
{
get => Multiplier;
set => Multiplier = value;
}
/// <summary> Internal variable used to get the updated target value </summary>
private float m_TargetValue;
#if UNITY_EDITOR
private void OnValidate()
{
if (!Enum.IsDefined(typeof(Mode), targetMode))
targetMode = Mode.Value;
}
#endif
public override void UpdateTarget(Progressor progressor)
{
if (target == null) return;
if (!Enum.IsDefined(typeof(Mode), targetMode))
targetMode = Mode.Value;
m_TargetValue = 0;
switch (targetMode)
{
case Mode.Progress:
m_TargetValue = progressor.progress;
break;
case Mode.Value:
m_TargetValue = progressor.currentValue;
break;
default:
throw new ArgumentOutOfRangeException();
}
if (UseMultiplier) m_TargetValue *= Multiplier;
if (WholeNumbers) m_TargetValue = Mathf.Round(m_TargetValue);
target.Invoke(m_TargetValue);
}
public override void UpdateTarget(ProgressorGroup progressorGroup)
{
if (target == null) return;
if (!Enum.IsDefined(typeof(Mode), targetMode))
targetMode = Mode.Progress;
targetMode = Mode.Progress; //force the target mode to be Progress
m_TargetValue = progressorGroup.progress;
if (UseMultiplier) m_TargetValue *= Multiplier;
if (WholeNumbers) m_TargetValue = Mathf.Round(m_TargetValue);
target.Invoke(m_TargetValue);
}
}
}