package rabbitescape.ui.swing;
import static rabbitescape.ui.swing.SwingConfigSetup.*;
import java.io.PrintStream;
import java.util.Locale;
import javax.swing.SwingUtilities;
import rabbitescape.engine.LevelWinListener;
import rabbitescape.engine.World;
import rabbitescape.engine.config.Config;
import rabbitescape.engine.config.ConfigTools;
import rabbitescape.engine.util.CommandLineOption;
import rabbitescape.engine.util.CommandLineOptionSet;
import rabbitescape.engine.util.FileSystem;
import rabbitescape.engine.util.RealFileSystem;
import rabbitescape.render.BitmapCache;
import rabbitescape.render.GameLaunch;
import rabbitescape.render.SingleGameEntryPoint;
import rabbitescape.render.androidlike.Sound;
public class SwingSingleGameEntryPoint extends SingleGameEntryPoint
{
private final BitmapCache<SwingBitmap> bitmapCache;
private final Config uiConfig;
private final MainJFrame frame;
private final Sound sound;
private final MenuUi menuUi;
private final String solution;
private final boolean frameDumping;
public SwingSingleGameEntryPoint(
FileSystem fs,
PrintStream out,
Locale locale,
BitmapCache<SwingBitmap> bitmapCache,
Config uiConfig,
MainJFrame frame,
Sound sound,
MenuUi menuUi,
String solution,
boolean frameDumping
)
{
super( fs, out, locale );
this.bitmapCache = bitmapCache;
this.uiConfig = uiConfig;
this.frame = frame;
this.sound = sound;
this.menuUi = menuUi;
this.solution = solution;
this.frameDumping = frameDumping;
}
public static void entryPoint( String[] args )
{
if ( 1 == args.length && args[0].endsWith( ".rel" ) )
{ // Single arg must level file
go( args, SwingGameLaunch.NOT_DEMO_MODE, false );
System.exit( 0 );
}
CommandLineOption level = new CommandLineOption( "--level", true );
CommandLineOption solution = new CommandLineOption( "--solution", true );
CommandLineOption anim = new CommandLineOption( "--animation", false );
CommandLineOption dump = new CommandLineOption( "--dump", false );
CommandLineOptionSet.parse( args,
level, solution, anim, dump);
try
{
if ( anim.isPresent() )
{
AnimationTester.main( new String[] {} );
System.exit( 0 );
}
if ( solution.isPresent() )
{
go( new String[] {level.getValue()}, solution.getValue(), dump.isPresent() );
System.exit( 0 );
}
if ( level.isPresent() )
{
go( new String[] {level.getValue()}, SwingGameLaunch.NOT_DEMO_MODE, false );
System.exit( 0 );
}
}
catch( Exception e )
{
e.printStackTrace();
System.exit( 1 );
}
}
private static void go( String[] fileName, String solution, boolean frameDumping )
{
Config cfg = SwingConfigSetup.createConfig();
Sound sound = SwingSound.create(
ConfigTools.getBool( cfg, CFG_MUTED ) );
SingleGameEntryPoint m = new SwingSingleGameEntryPoint(
new RealFileSystem(),
System.out,
Locale.getDefault(),
new BitmapCache<>(
new SwingBitmapLoader(),
new SwingBitmapScaler(),
SwingMain.cacheSize()
),
cfg,
new MainJFrame( cfg, sound ),
sound,
null,
solution,
frameDumping
);
m.run( fileName );
}
@Override
public GameLaunch createGameLaunch(
World world, LevelWinListener winListener )
{
SwingGameInit init = new SwingGameInit(
bitmapCache, uiConfig, frame, menuUi );
SwingUtilities.invokeLater( init );
return new SwingGameLaunch(
init, world, winListener, sound, uiConfig, out, solution, frameDumping );
}
}