/// <summary>
        /// Transforms the layer move
        /// </summary>
        /// <param name="rotationLayer">Transformation layer</param>
        /// <returns>Transformed layer move</returns>
        public IMove Transform(CubeFlag rotationLayer)
        {
            bool switchDir = CubeFlagService.IsYFlag(rotationLayer) && this.Layer.HasFlag(CubeFlag.MiddleSlice) ||
                             CubeFlagService.IsXFlag(rotationLayer) && this.Layer.HasFlag(CubeFlag.MiddleLayer) ||
                             CubeFlagService.IsZFlag(rotationLayer) && this.Layer.HasFlag(CubeFlag.MiddleSliceSides);

            LayerMove newMove = new LayerMove(CubeFlagService.NextCubeFlag(this.Layer, rotationLayer, true), this.Direction ^ switchDir, this.Twice);

            return(newMove);
        }
Beispiel #2
0
        /// <summary>
        /// Returns the next flags of the old flags after a layer rotation
        /// </summary>
        /// <param name="rotationLayer">Rotation layer</param>
        /// <param name="direction">Rotation direction</param>
        /// <returns>Next cube flags</returns>
        public static CubeFlag NextFlags(CubeFlag flags, CubeFlag rotationLayer, bool direction = true)
        {
            CubeFlag           newFlags = CubeFlag.None;
            IEnumerable <Enum> lstFlags = GetFlags(flags);

            foreach (CubeFlag flag in lstFlags)
            {
                newFlags |= CubeFlagService.NextCubeFlag(flag, rotationLayer, direction);
            }

            return(newFlags);
        }