package rabbitescape.render;
import static rabbitescape.engine.util.Util.*;
import java.io.PrintStream;
import java.util.Locale;
import rabbitescape.engine.IgnoreLevelWinListener;
import rabbitescape.engine.IgnoreWorldStatsListener;
import rabbitescape.engine.LevelWinListener;
import rabbitescape.engine.LoadWorldFile;
import rabbitescape.engine.World;
import rabbitescape.engine.util.FileSystem;
public abstract class SingleGameEntryPoint
{
public abstract GameLaunch createGameLaunch(
World world, LevelWinListener winListener );
private static final int SUCCESS = 0;
private static final int FAILED_TO_LOAD_FILE = 1;
private static final int UNKNOWN_ERROR = 42;
private final FileSystem fs;
public final PrintStream out;
private final Locale locale;
public SingleGameEntryPoint( FileSystem fs, PrintStream out, Locale locale )
{
this.fs = fs;
this.out = out;
this.locale = locale;
}
public void run( String[] args )
{
int status = launchGame( args, new IgnoreLevelWinListener() );
System.exit( status );
}
public int launchGame( String[] args, LevelWinListener winListener )
{
reAssert( args.length >= 1 );
try
{
String levelName = args[0];
World world = new LoadWorldFile( fs ).load(
new IgnoreWorldStatsListener(), levelName );
GameLaunch gameLaunch = createGameLaunch( world, winListener );
gameLaunch.run( args );
gameLaunch.showResult();
}
catch( LoadWorldFile.Failed e )
{
out.println( e.translate( locale ) );
return FAILED_TO_LOAD_FILE;
}
catch( Throwable e )
{
e.printStackTrace();
return UNKNOWN_ERROR;
}
return SUCCESS;
}
}