// --------------------------------------------------------------------------------------------------------------------
//
// Copyright (c) VRMADA, All rights reserved.
//
// --------------------------------------------------------------------------------------------------------------------
using UltimateXR.Manipulation;
using UnityEngine;
namespace UltimateXR.Avatar.Controllers
{
///
/// Internal interface for avatar controllers to make updating publicly available only from within the framework.
/// Child classes from will implement these through the protected methods.
///
internal interface IUxrAvatarControllerUpdater
{
#region Public Methods
///
/// Updates the avatar for the given frame. This is normally in charge of updating input devices, tracking devices and
/// locomotion.
/// Animation is left for a later stage (), to make sure it is performed in the
/// right order right after Unity has updated the built-in animation components such as .
///
void UpdateAvatar();
///
/// Updates the avatar using the current tracking data.
///
void UpdateAvatarUsingTrackingDevices();
///
/// Updates the avatar manipulation actions based on user input.
///
void UpdateAvatarManipulation();
///
/// Updates the animation and rig transforms for the given frame. It is performed in a later stage than
/// to make sure the transforms override the transforms that Unity may have updated using
/// built-in components such as .
///
void UpdateAvatarAnimation();
///
/// Updates the avatar for a given frame, at the end of all stages and UltimateXR manager updates such as the
/// . It can be used to perform operations that require to be executed at the end of all
/// stages, such as Inverse Kinematics.
///
void UpdateAvatarPostProcess();
#endregion
}
}