r2mods/ilspy_dump/ror2_csproj/RoR2/IKTargetPassive.cs

95 lines
2.3 KiB
C#

using UnityEngine;
namespace RoR2;
public class IKTargetPassive : MonoBehaviour, IIKTargetBehavior
{
private float smoothedTargetHeightOffset;
private float targetHeightOffset;
private float smoothdampVelocity;
public float minHeight = -0.3f;
public float maxHeight = 1f;
public float dampTime = 0.1f;
public float baseOffset;
[Tooltip("The IK weight float parameter if used")]
public string animatorIKWeightFloat = "";
public Animator animator;
[Tooltip("The target transform will plant without any calls from external IK chains")]
public bool selfPlant;
public float selfPlantFrequency = 5f;
[Tooltip("Whether or not to cache where the raycast begins. Used when not attached to bones, who reset themselves via animator.")]
public bool cacheFirstPosition;
private Vector3 cachedLocalPosition;
private float selfPlantTimer;
public void UpdateIKState(int targetState)
{
}
private void Awake()
{
if (cacheFirstPosition)
{
cachedLocalPosition = base.transform.localPosition;
}
}
private void LateUpdate()
{
selfPlantTimer -= Time.deltaTime;
if (selfPlant && selfPlantTimer <= 0f)
{
selfPlantTimer = 1f / selfPlantFrequency;
UpdateIKTargetPosition();
}
UpdateYOffset();
}
public void UpdateIKTargetPosition()
{
ResetTransformToCachedPosition();
if (Physics.Raycast(base.transform.position + Vector3.up * (0f - minHeight), Vector3.down, out var hitInfo, maxHeight - minHeight, LayerIndex.world.mask))
{
targetHeightOffset = hitInfo.point.y - base.transform.position.y;
}
else
{
targetHeightOffset = 0f;
}
targetHeightOffset += baseOffset;
}
public void UpdateYOffset()
{
float t = 1f;
if ((bool)animator && animatorIKWeightFloat.Length > 0)
{
t = animator.GetFloat(animatorIKWeightFloat);
}
smoothedTargetHeightOffset = Mathf.SmoothDamp(smoothedTargetHeightOffset, targetHeightOffset, ref smoothdampVelocity, dampTime, float.PositiveInfinity, Time.deltaTime);
ResetTransformToCachedPosition();
base.transform.position = new Vector3(base.transform.position.x, base.transform.position.y + Mathf.Lerp(0f, smoothedTargetHeightOffset, t), base.transform.position.z);
}
private void ResetTransformToCachedPosition()
{
if (cacheFirstPosition)
{
base.transform.localPosition = new Vector3(cachedLocalPosition.x, cachedLocalPosition.y, cachedLocalPosition.z);
}
}
}