using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace UnityEngine.Rendering.Universal
{
///
/// Class ShadowShape2DProvider has methods called by a ShadowCaster2D to determine if it should be listed as a Casting Option, and to provide geometry if it is the active ShadowShape2DProvider
///
public abstract class ShadowShape2DProvider
{
///
/// Gets the name to be listed in the ShadowCaster2D Casting Option drop down.
///
/// The name of component associated with the provider.
/// The string to be listed in the ShadowCaster2D Casting Option drop down.
public virtual string ProviderName(string componentName) { return componentName; }
///
/// Gets the priority to be listed in the ShadowCaster2D Casting Option drop down.
///
/// The priority to be listed in the ShadowCaster2D Casting Option drop down.
public virtual int Priority() { return 0; }
///
/// Called for the active ShadowShape2DProvider when the ShadowCaster2D becomes enabled
///
/// The component associated with the provider
public virtual void Enabled(Component sourceComponent) {}
///
/// Called for the active ShadowShape2DProvider when the ShadowCaster2D becomes disabled
///
/// The component associated with the provider
public virtual void Disabled(Component sourceComponent) {}
///
/// Called for each component on a ShadowCaster2D's GameObject. Returns true if the provided component is the data source of the ShadowShapeProvider.
///
/// The component to test as a source
/// Returns true if sourceComponent is the data source of the ShadowShapeProvider.
public abstract bool IsShapeSource(Component sourceComponent);
///
/// Called when the ShadowShape2DProvider is selected as the active Casting Option.
///
/// The component associated with the provider
/// An instance of ShadowShape2D that is used by the ShadowCaster2D
public virtual void OnPersistantDataCreated(Component sourceComponent, ShadowShape2D persistantShadowShape) { }
///
/// Called before 2D lighting is rendered each frame
///
/// The component associated with the provider
/// The bounds enclosing the region of the view frustum and all visible lights
/// An instance of ShadowShape2D that is used by the ShadowCaster2D
public virtual void OnBeforeRender(Component sourceComponent, Bounds worldCullingBounds, ShadowShape2D persistantShadowShape) { }
}
}