using UnityEngine;
using System.Collections;
using RootMotion.FinalIK;
namespace RootMotion.FinalIK
{
    /// 
    /// Simple VRIK LOD level controller based on renderer.isVisible and camera distance.
    /// 
    public class VRIKLODController : MonoBehaviour
    {
        public Renderer LODRenderer;
        public float LODDistance = 15f;
        public bool allowCulled = true;
        private VRIK ik;
        void Start()
        {
            ik = GetComponent();
        }
        void Update()
        {
            ik.solver.LOD = GetLODLevel();
        }
        // Setting LOD level to 1 saves approximately 20% of solving time. LOD level 2 means IK is culled, with only root position and rotation updated if locomotion enabled.
        private int GetLODLevel()
        {
            if (allowCulled)
            {
                if (LODRenderer == null) return 0;
                if (!LODRenderer.isVisible) return 2;
            }
            // Set LOD to 1 if too far from camera
            float sqrMag = (ik.transform.position - Camera.main.transform.position).sqrMagnitude;
            if (sqrMag > LODDistance * LODDistance) return 1;
            return 0;
        }
    }
}