70 lines
2.5 KiB
C#
70 lines
2.5 KiB
C#
using NeoFPS.CharacterMotion;
|
|
using NeoFPS.CharacterMotion.Parameters;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace NeoFPS
|
|
{
|
|
[HelpURL("https://docs.neofps.com/manual/hudref-mb-hudmotiongraphparametermeter.html")]
|
|
public class HudMotionGraphParameterMeter : PlayerCharacterHudBase
|
|
{
|
|
[SerializeField, Tooltip("The rect transform of the filled bar.")]
|
|
private RectTransform m_BarRect = null;
|
|
[SerializeField, Tooltip("The parameter on the motion graph to track.")]
|
|
private string m_ParameterKey = "myFloat";
|
|
[SerializeField, Tooltip("The minimum value the parameter should reach (the filled section of the bar will be hidden).")]
|
|
private float m_MinValue = 0f;
|
|
[SerializeField, Tooltip("The maximum value the parameter should reach (the entire bar will be filled).")]
|
|
private float m_MaxValue = 1f;
|
|
|
|
private FloatParameter m_Parameter = null;
|
|
|
|
protected override void OnDestroy()
|
|
{
|
|
base.OnDestroy();
|
|
|
|
// Unsubscribe from old character
|
|
if (m_Parameter != null)
|
|
m_Parameter.onValueChanged -= OnValueChanged;
|
|
}
|
|
|
|
public override void OnPlayerCharacterChanged(ICharacter character)
|
|
{
|
|
// Unsubscribe from old parameter
|
|
if (m_Parameter != null)
|
|
m_Parameter.onValueChanged -= OnValueChanged;
|
|
|
|
// Subscribe to new parameter
|
|
if (character as Component != null)
|
|
{
|
|
var m = character.GetComponent<MotionController>();
|
|
if (m != null)
|
|
{
|
|
m_Parameter = m.motionGraph.GetFloatProperty(m_ParameterKey);
|
|
if (m_Parameter != null)
|
|
{
|
|
m_Parameter.onValueChanged += OnValueChanged;
|
|
OnValueChanged(m_Parameter.value);
|
|
gameObject.SetActive(true);
|
|
}
|
|
else
|
|
gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
protected virtual void OnValueChanged(float to)
|
|
{
|
|
if (m_BarRect != null)
|
|
{
|
|
to -= m_MinValue;
|
|
to /= m_MaxValue - m_MinValue;
|
|
|
|
var localScale = m_BarRect.localScale;
|
|
localScale.x = Mathf.Clamp01(to);
|
|
m_BarRect.localScale = localScale;
|
|
}
|
|
}
|
|
}
|
|
} |