fCraft.BuildingCommands.MirrorHandler C# (CSharp) Method

MirrorHandler() private static method

private static MirrorHandler ( Player player, Command cmd ) : void
player Player
cmd Command
return void
        private static void MirrorHandler( Player player, Command cmd )
        {
            CopyState originalInfo = player.GetCopyInformation();
            if ( originalInfo == null ) {
                player.MessageNow( "Nothing to flip! Copy something first." );
                return;
            }

            // clone to avoid messing up any paste-in-progress
            CopyState info = new CopyState( originalInfo );

            bool flipX = false, flipY = false, flipH = false;
            string axis;
            while ( ( axis = cmd.Next() ) != null ) {
                foreach ( char c in axis.ToLower() ) {
                    if ( c == 'x' )
                        flipX = true;
                    if ( c == 'y' )
                        flipY = true;
                    if ( c == 'z' )
                        flipH = true;
                }
            }

            if ( !flipX && !flipY && !flipH ) {
                CdMirror.PrintUsage( player );
                return;
            }

            Block block;

            if ( flipX ) {
                int left = 0;
                int right = info.Dimensions.X - 1;
                while ( left < right ) {
                    for ( int y = info.Dimensions.Y - 1; y >= 0; y-- ) {
                        for ( int z = info.Dimensions.Z - 1; z >= 0; z-- ) {
                            block = info.Buffer[left, y, z];
                            info.Buffer[left, y, z] = info.Buffer[right, y, z];
                            info.Buffer[right, y, z] = block;
                        }
                    }
                    left++;
                    right--;
                }
            }

            if ( flipY ) {
                int left = 0;
                int right = info.Dimensions.Y - 1;
                while ( left < right ) {
                    for ( int x = info.Dimensions.X - 1; x >= 0; x-- ) {
                        for ( int z = info.Dimensions.Z - 1; z >= 0; z-- ) {
                            block = info.Buffer[x, left, z];
                            info.Buffer[x, left, z] = info.Buffer[x, right, z];
                            info.Buffer[x, right, z] = block;
                        }
                    }
                    left++;
                    right--;
                }
            }

            if ( flipH ) {
                int left = 0;
                int right = info.Dimensions.Z - 1;
                while ( left < right ) {
                    for ( int x = info.Dimensions.X - 1; x >= 0; x-- ) {
                        for ( int y = info.Dimensions.Y - 1; y >= 0; y-- ) {
                            block = info.Buffer[x, y, left];
                            info.Buffer[x, y, left] = info.Buffer[x, y, right];
                            info.Buffer[x, y, right] = block;
                        }
                    }
                    left++;
                    right--;
                }
            }

            if ( flipX ) {
                if ( flipY ) {
                    if ( flipH ) {
                        player.Message( "Flipped copy along all axes." );
                    } else {
                        player.Message( "Flipped copy along X (east/west) and Y (north/south) axes." );
                    }
                } else {
                    if ( flipH ) {
                        player.Message( "Flipped copy along X (east/west) and Z (vertical) axes." );
                    } else {
                        player.Message( "Flipped copy along X (east/west) axis." );
                    }
                }
            } else {
                if ( flipY ) {
                    if ( flipH ) {
                        player.Message( "Flipped copy along Y (north/south) and Z (vertical) axes." );
                    } else {
                        player.Message( "Flipped copy along Y (north/south) axis." );
                    }
                } else {
                    player.Message( "Flipped copy along Z (vertical) axis." );
                }
            }

            player.SetCopyInformation( info );
        }