import { Image, Line, LineDisplayMode, Marker } from '../Venue';
import { Navigation } from './Navigation';

export interface NavigationSceneElements {
    /**
     * Part of the Line not yet covered and without elements hiding it from the camera.
     */
    readonly lineProgress: Line;
    /**
     * Part of the Line not yet covered with elements hiding it from the camera.
     */
    readonly lineProgressOverlay: Line;
    /**
     * Outline of the Line not yet covered.
     */
    readonly lineProgressOutline: Line;
    /**
     * Part of the Line covered and without elements hiding it from the camera.
     */
    readonly lineProgressDisabled: Line;
    /**
     * Part of the Line covered with elements hiding it from the camera.
     */
    readonly lineProgressDisabledOverlay: Line;
    /**
     * Line while no current Navigation has been set and without elements hiding it from the camera.
     */
    readonly linePreview: Line;
    /**
     * Outline Line while no current Navigation has been set and without elements hiding it from the camera.
     */
    readonly linePreviewOutline: Line;
    /**
     * Line while no current Navigation has been set with elements hiding it from the camera.
     */
    readonly linePreviewOverlay: Line;
    /**
     * Dot that'll move along the Line to display current position of the user.
     */
    readonly dot: Image;
    /**
     * This optional Marker is placed at the beginning of the Navigation segment.
     */
    readonly startMarker?: Marker;
    /**
     * This optional Marker is placed at the end of the Navigation segment.
     */
    readonly endMarker: Marker;
}
/**
 * A NavigationTrace is needed to represent a Navigation visually.
 * It contains the Navigation to represent and all the visual attributes that are required to render
 * this representation.
 */
export interface NavigationTrace {
    /**
     * The Navigation to represent.
     */
    readonly navigation: Navigation;
    /**
     * Index of the current instruction.
     */
    readonly index: number;
    /**
     * Percentage of distance covered along the total Navigation.
     */
    readonly percentageOfDistanceCovered: number;
    /**
     * Density, in iteration per meter, of the animated texture.
     * Related to display mode. If display mode isn't "textured" this field won't have any effect.
     */
    readonly textureRepeat?: number;
    /**
     * Change the way the current Line will be rendered.
     */
    readonly displayMode: LineDisplayMode;
    /**
     * Speed, in meter per second, at which texture will be animated.
     * Related to display mode. If display mode isn't "textured" this field won't have any effect.
     */
    readonly animationSpeed?: number;
    /**
     * Thickness, in meters, applied to all Lines of the Navigation.
     */
    readonly thickness: number;
    /**
     * All elements displayed on the scene to represent the Navigation.
     */
    readonly sceneElements: NavigationSceneElements[];
}
