// --------------------------------------------------------------------------------------------------------------------
//
// Copyright (c) VRMADA, All rights reserved.
//
// --------------------------------------------------------------------------------------------------------------------
using UltimateXR.Core.Components;
using UnityEngine;
namespace UltimateXR.Animation.Materials
{
///
/// Component that changes the RenderQueue of a material. Changes will be applied at runtime.
///
public class UxrMaterialRenderQueue : UxrComponent
{
#region Inspector Properties/Serialized Fields
[SerializeField] private bool _instanceOnly;
[SerializeField] private bool _everyFrame = true;
[SerializeField] private int _slot;
[SerializeField] private int _value;
#endregion
#region Unity
///
/// Gets the component and applies the RenderQueue value.
///
protected override void Start()
{
base.Start();
_renderer = GetComponent();
Apply();
}
///
/// Applies the RenderQueue each frame if required.
///
private void LateUpdate()
{
if (_everyFrame)
{
Apply();
}
}
#endregion
#region Private Methods
///
/// Internal method that applies the RenderQueue value.
///
private void Apply()
{
if (_renderer != null)
{
if (_instanceOnly)
{
Material[] materials = _renderer.materials;
if (_slot >= 0 && _slot < materials.Length)
{
materials[_slot].renderQueue = _value;
}
_renderer.materials = materials;
}
else
{
Material[] materials = _renderer.sharedMaterials;
if (_slot >= 0 && _slot < materials.Length)
{
materials[_slot].renderQueue = _value;
}
_renderer.sharedMaterials = materials;
}
}
}
#endregion
#region Private Types & Data
private Renderer _renderer;
#endregion
}
}