BITFALL/Assets/Artists/Scripts/Scenes/AnimatorBasedPlatform.cs

49 lines
1.2 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using BITKit;
using Lightbug.Utilities;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace BITFALL.Scenes
{
[ExecuteAlways]
public class AnimatorBasedPlatform : MonoBehaviour
{
[SerializeField] private float mass;
[SerializeField] private Animator animator;
[SerializeField] private RigidbodyComponent rigidbodyComponent;
private readonly DoubleBuffer<Vector3> currentPosition=new();
private readonly DoubleBuffer<Quaternion> currentRotation=new();
private void Start()
{
#if UNITY_EDITOR
if(EditorApplication.isPlaying is false)
return;
#endif
rigidbodyComponent = RigidbodyComponent.CreateInstance(gameObject);
}
private void FixedUpdate()
{
#if UNITY_EDITOR
if(EditorApplication.isPlaying is false)
return;
#endif
if(currentPosition.TryGetRelease(out var position))
rigidbodyComponent.Position = position;
if(currentRotation.TryGetRelease(out var rotation))
rigidbodyComponent.Rotation = rotation;
}
private void OnAnimatorMove()
{
animator.ApplyBuiltinRootMotion();
currentPosition.Release(animator.rootPosition);
currentRotation.Release(animator.rootRotation);
}
}
}