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 currentPosition=new(); private readonly DoubleBuffer 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); } } }