using System.Text;
using UnityEngine;
using UnityEngine.TerrainTools;
namespace UnityEditor.TerrainTools
{
///
/// Calls the methods in its invocation list when a brush's settings are reset.
///
public delegate void ResetBrush();
///
/// An interface that represent the brush's common UI.
///
public interface IBrushUIGroup
{
///
/// The normalized size of the brush.
///
float brushSize { get; }
///
/// The rotation of the brush (in degrees).
///
float brushRotation { get; }
///
/// The normalized strength of the brush when applied.
///
float brushStrength { get; }
///
/// The spacing used when applying certain brushes.
///
float brushSpacing { get; }
///
/// Gets and sets the message for validating terrain parameters.
///
string validationMessage { get; set; }
///
/// Are we allowed to paint with this brush?
///
bool allowPaint { get; }
///
/// Inverts the brush's strength.
///
bool InvertStrength { get; }
///
/// Checks if the brush is in use.
///
bool isInUse { get; }
///
/// Gets the brush mask's Filter stack view.
///
FilterStackView brushMaskFilterStackView { get; }
///
/// Gets the brush mask's Filter stack.
///
FilterStack brushMaskFilterStack { get; }
///
/// Checks if the brush has enabled filters.
///
bool hasEnabledFilters { get; }
///
/// Gets a reference to the terrain under the cursor.
///
Terrain terrainUnderCursor { get; }
///
/// Gets and sets the value associated to whether there is a raycast hit detecting a terrain under the cursor.
///
bool isRaycastHitUnderCursorValid { get; }
///
/// Gets and sets the raycast hit that was under the cursor's position.
///
RaycastHit raycastHitUnderCursor { get; }
///
/// Renders the brush's GUI within the inspector view.
///
/// The terrain in focus.
/// The editcontext used to show the brush GUI.
/// The brushflags to use when displaying the brush GUI.
void OnInspectorGUI(Terrain terrain, IOnInspectorGUI editContext, BrushGUIEditFlags brushFlags = BrushGUIEditFlags.SelectAndInspect);
///
/// Defines data when the brush is selected.
///
///
void OnEnterToolMode();
///
/// Defines data when the brush is deselected.
///
///
void OnExitToolMode();
///
/// Triggers events when painting on a terrain.
///
/// The terrain in focus.
/// The editcontext to reference.
void OnPaint(Terrain terrain, IOnPaint editContext);
///
/// Triggers events to render a 2D GUI within the Scene view.
///
/// The terrain in focus.
/// The editcontext to reference.
///
void OnSceneGUI2D(Terrain terrain, IOnSceneGUI editContext);
///
/// Triggers events to render objects and displays within Scene view.
///
/// The terrain in focus.
/// The editcontext to reference.
///
void OnSceneGUI(Terrain terrain, IOnSceneGUI editContext);
///
/// Adds basic information to the selected brush.
///
/// The Terrain in focus.
/// The IOnSceneGUI to reference.
/// The StringBuilder containing the brush information.
void AppendBrushInfo(Terrain terrain, IOnSceneGUI editContext, StringBuilder builder);
///
/// Generates the brush mask.
///
/// The source render texture to blit from.
/// The destination render texture for bliting to.
///
/// Use this overload method to let Unity handle passing the brush's parameters and terrain reference to the main GenerateBrushMask meethod.
void GenerateBrushMask(RenderTexture sourceRenderTexture, RenderTexture destinationRenderTexture);
///
/// Generates the brush mask.
///
/// The terrain in focus.
/// The source render texture to blit from.
/// The destination render texture for bliting to.
///
/// Use this overload method to let Unity handle passing the brush's parameters to the main GenerateBrushMask meethod.
void GenerateBrushMask(Terrain terrain, RenderTexture sourceRenderTexture, RenderTexture destinationRenderTexture);
///
/// Generates the brush mask.
///
/// The terrain in focus.
/// The source render texture to blit from.
/// The destination render texture for bliting to.
/// The brush's position.
/// The brush's scale.
/// The brush's rotation.
/// This is the main overload method for generating brush mask.
void GenerateBrushMask(Terrain terrain, RenderTexture sourceRenderTexture, RenderTexture destinationRenderTexture, Vector3 position, float scale, float rotation);
///
/// Scatters the brush around the specified UV on the specified terrain. If the scattered UV leaves
/// the current terrain then the terrain AND UV are modified for the terrain the UV is now over.
///
/// The terrain the scattered UV co-ordinate is actually on.
/// The UV co-ordinate passed in transformed into the UV co-ordinate relative to the scattered terrain.
/// "true" if we scattered to a terrain, "false" if we fell off ALL terrains.
bool ScatterBrushStamp(ref Terrain terrain, ref Vector2 uv);
///
/// Activates a modifier key controller.
///
/// The modifier key to activate.
/// Returns false when the modifier key controller is null.
bool ModifierActive(BrushModifierKey k);
}
}