package rabbitescape.engine.util; import java.io.PrintStream; import java.util.ArrayList; /** * Formats a table of debug output. */ public class CellDebugPrint { private final ArrayList<ArrayList<ArrayList<String>>> strings; private static int maxLength = 0, maxX = 0, maxY = 0, maxI = 0; private static boolean off = false; public CellDebugPrint() { strings = new ArrayList<ArrayList<ArrayList<String>>>();; } public void addString( int x, int y, int i, String s ) { x++; y++; // Offset so -1 can be shown if ( x < 0 || y < 0 || i < 0 ) { return; } while ( strings.size() <= x ) { strings.add( new ArrayList<ArrayList<String>>() ); } while ( strings.get( x ).size() <= y ) { strings.get( x ).add( new ArrayList<String>() ); } while ( strings.get( x ).get( y ).size() <= i ) { strings.get( x ).get( y ).add( ""); } strings.get( x ).get( y ).set( i, s ); maxX = maxX > x ? maxX : x; maxY = maxY > y ? maxY : y; maxI = maxI > i ? maxI : i; maxLength = maxLength > s.length() ? maxLength : s.length(); } public void addString( LookupItem2D l, int i, String s ) { Position p = l.getPosition(); addString( p.x, p.y, i, s); } public void addString( LookupItem2D l, int i, String f, Object... args ) { Position p = l.getPosition(); addString( p.x, p.y, i, String.format( f, args )); } public void print() { if ( off ) { return; } print( System.out ); } public void print( PrintStream s) { for ( int y = 0; y <= maxY; y++) { for ( int i = 0; i <= maxI; i++ ) { for ( int x = 0; x <= maxX; x++ ) { s.print( stringAt( x, y, i ) + "|" ); } s.println(); } s.println( "-" ); } } private String stringAt( int x, int y, int i ) { if ( strings.size() <= x ) { return formatString( "" ); } if ( strings.get( x ).size() <= y ) { return formatString( "" ); } if ( strings.get( x ).get( y ).size() <= i ) { return formatString( "" ); } return formatString( strings.get( x ).get( y ).get( i ) ); } private static String formatString( String s ) { if ( maxLength == 0 ) { return ""; } return String.format( "%" + maxLength + "s", s ); } }