using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class VolumetricMedia : MonoBehaviour
{
    //Simple helper script for baker
    public enum ShapeType { Sphere, Box };
    public ShapeType shapeType;
    [Tooltip("3d texture. RGB is color")]
    public Texture3D Texture;
    
    public Vector3 Scale = Vector3.one;
   
    
    [HideInInspector,SerializeField] public Vector3 NormalizedScale;
    [HideInInspector,SerializeField] public Vector3 Corner;

    public float LocalExtinction()
    {
        return VolumeRenderingUtils.ExtinctionFromMeanFreePath(ViewDistance);
    }
    

    [Range(0.01f,100)] public float ViewDistance = 1f;
    [Range(0,1)] public float falloffDistance = .2f;


    private void OnEnable()
    {
        VolumetricRegisters.RegisterParticipatingMedia(this);
    }

    private void OnDisable()
    {
        VolumetricRegisters.UnregisterParticipatingMedia(this);
    }

    private void OnDestroy()
    {
        VolumetricRegisters.UnregisterParticipatingMedia(this);
    }

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.gray;
        Gizmos.matrix = Matrix4x4.TRS(gameObject.transform.position, gameObject.transform.rotation, Vector3.Scale( Scale , gameObject.transform.lossyScale) );
        Gizmos.DrawWireSphere(Vector3.zero, 0.5f);
        Gizmos.color = new Color(0.4f, 0.4f, 0.4f, .1f);
        Gizmos.DrawWireSphere(Vector3.zero, 0.5f * (1-falloffDistance) );

    }

    private void OnValidate()
    {
        //Check to see if the same and change if different
        Vector3 tempscale = Vector3.Scale(gameObject.transform.localScale, Scale);
        if (NormalizedScale != tempscale)  NormalizedScale = tempscale; //redundant check to prevent dirtying 
        

    }

}