// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System.Collections.Generic;
using UnityEngine;
namespace Microsoft.MixedReality.Toolkit.SpatialAwareness
{
///
/// The interface for defining an which provides mesh data.
///
public interface IMixedRealitySpatialAwarenessMeshObserver : IMixedRealitySpatialAwarenessObserver
{
///
/// Gets or sets a value indicating how the mesh subsystem is to display surface meshes within the application.
///
///
/// Applications that wish to process the Meshes should set this value to None.
///
SpatialAwarenessMeshDisplayOptions DisplayOption { get; set; }
///
/// Gets or sets the level of detail, as a MixedRealitySpatialAwarenessMeshLevelOfDetail value, for the returned spatial mesh.
/// Setting this value to Custom, implies that the developer is specifying a custom value for MeshTrianglesPerCubicMeter.
///
///
/// Specifying any other value will cause to be overwritten.
///
SpatialAwarenessMeshLevelOfDetail LevelOfDetail { get; set; }
///
/// Gets the collection of s being managed by the observer.
///
IReadOnlyDictionary Meshes { get; }
///
/// Get or sets the desired Unity Physics Layer on which to set the spatial mesh.
///
///
/// If not explicitly set, it is recommended that implementations return .
///
int MeshPhysicsLayer { get; set; }
///
/// Gets the bit mask that corresponds to the value specified in .
///
int MeshPhysicsLayerMask { get; }
///
/// Indicates whether or not mesh normals should be recalculated by the observer.
///
bool RecalculateNormals { get; set; }
///
/// Gets or sets the level of detail, in triangles per cubic meter, for the returned spatial mesh.
///
///
/// When specifying a other than Custom, this value will be automatically overwritten with system default values.
///
int TrianglesPerCubicMeter { get; set; }
///
/// Gets or sets the Material to be used when spatial Meshes should occlude other objects.
///
Material OcclusionMaterial { get; set; }
///
/// Gets or sets the Material to be used when displaying Meshes.
///
Material VisibleMaterial { get; set; }
}
}