"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/** Enum for describing snapping modes */
var SnapMode;
(function (SnapMode) {
    /** No snapping detected. */
    SnapMode[SnapMode["None"] = 0] = "None";
    /** Semantic snapping based on matching attachment points, for instance. */
    SnapMode[SnapMode["Strong"] = 1] = "Strong";
    /** Geometric snapping based on bounding boxes, for instance. */
    SnapMode[SnapMode["Weak"] = 2] = "Weak";
    /** Snapping to a wall */
    SnapMode[SnapMode["Wall"] = 3] = "Wall";
    /** Snapping is currently disabled. */
    SnapMode[SnapMode["Disabled"] = 4] = "Disabled";
})(SnapMode = exports.SnapMode || (exports.SnapMode = {}));
var NeighborType;
(function (NeighborType) {
    NeighborType[NeighborType["None"] = 0] = "None";
    NeighborType[NeighborType["Top"] = 1] = "Top";
    NeighborType[NeighborType["Bottom"] = 2] = "Bottom";
    NeighborType[NeighborType["Left"] = 3] = "Left";
    NeighborType[NeighborType["Right"] = 4] = "Right";
    NeighborType[NeighborType["Front"] = 5] = "Front";
    NeighborType[NeighborType["Back"] = 6] = "Back";
    NeighborType[NeighborType["Snap"] = 7] = "Snap";
})(NeighborType = exports.NeighborType || (exports.NeighborType = {}));
(function (NeighborType) {
    function getAsType(type) {
        switch (type) {
            case "Top":
                return NeighborType.Top;
            case "Bottom":
                return NeighborType.Bottom;
            case "Right":
                return NeighborType.Right;
            case "Left":
                return NeighborType.Left;
            case "Snap":
                return NeighborType.Snap;
            case "Front":
                return NeighborType.Front;
            case "Back":
                return NeighborType.Back;
        }
        return NeighborType.None;
    }
    NeighborType.getAsType = getAsType;
    function getAsString(type) {
        switch (type) {
            case NeighborType.Top:
                return "Top";
            case NeighborType.Bottom:
                return "Bottom";
            case NeighborType.Right:
                return "Right";
            case NeighborType.Left:
                return "Left";
            case NeighborType.Snap:
                return "Snap";
            case NeighborType.Front:
                return "Front";
            case NeighborType.Back:
                return "Back";
        }
        return null;
    }
    NeighborType.getAsString = getAsString;
    function allValidNeighborTypes() {
        return [
            NeighborType.Top,
            NeighborType.Bottom,
            NeighborType.Right,
            NeighborType.Left,
            NeighborType.Snap,
            NeighborType.Back,
            NeighborType.Front,
        ];
    }
    NeighborType.allValidNeighborTypes = allValidNeighborTypes;
    function getOpposite(type) {
        switch (type) {
            case NeighborType.Top:
                return NeighborType.Bottom;
            case NeighborType.Bottom:
                return NeighborType.Top;
            case NeighborType.Right:
                return NeighborType.Left;
            case NeighborType.Left:
                return NeighborType.Right;
            case NeighborType.Snap:
                return NeighborType.Snap;
            case NeighborType.Front:
                return NeighborType.Back;
            case NeighborType.Back:
                return NeighborType.Front;
        }
        return NeighborType.None;
    }
    NeighborType.getOpposite = getOpposite;
})(NeighborType = exports.NeighborType || (exports.NeighborType = {}));
var EStage;
(function (EStage) {
    EStage[EStage["None"] = 0] = "None";
    EStage[EStage["Start"] = 1] = "Start";
    EStage[EStage["Motion"] = 2] = "Motion";
    EStage[EStage["End"] = 3] = "End";
})(EStage = exports.EStage || (exports.EStage = {}));
var EMoveMode;
(function (EMoveMode) {
    EMoveMode[EMoveMode["Translate"] = 1] = "Translate";
    EMoveMode[EMoveMode["Rotate"] = 2] = "Rotate";
})(EMoveMode = exports.EMoveMode || (exports.EMoveMode = {}));
