/// <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); }
/// <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); }