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.config.Config; import rabbitescape.engine.config.ConfigTools; import rabbitescape.engine.i18n.Translation; import rabbitescape.engine.util.RealFileSystem; import rabbitescape.render.BitmapCache; import rabbitescape.render.androidlike.Sound; public class SwingMain { private final RealFileSystem fs; private final PrintStream out; private final Locale locale; private final BitmapCache<SwingBitmap> bitmapCache; private final Config uiConfig; private final Sound sound; public SwingMain( RealFileSystem fs, PrintStream out, Locale locale, BitmapCache<SwingBitmap> bitmapCache, Config uiConfig, Sound sound ) { this.fs = fs; this.out = out; this.locale = locale; this.bitmapCache = bitmapCache; this.uiConfig = uiConfig; this.sound = sound; } public static void main( String[] args ) { if ( args.length > 0 ) { SwingSingleGameEntryPoint.entryPoint( args ); return; } Locale locale = Locale.getDefault(); Translation.init( locale ); Config config = SwingConfigSetup.createConfig(); Sound sound = SwingSound.create( ConfigTools.getBool( config, CFG_MUTED ) ); SwingMain m = new SwingMain( new RealFileSystem(), System.out, locale, new BitmapCache<>( new SwingBitmapLoader(), new SwingBitmapScaler(), cacheSize() ), config, sound ); m.run( args ); } public static long cacheSize() { // About half of the available memory we will give to images return Runtime.getRuntime().maxMemory() / 2; } public void run( String[] args ) { SwingUtilities.invokeLater( new Runnable() { @Override public void run() { MainJFrame frame = new MainJFrame( uiConfig, sound ); new MenuUi( fs, out, locale, bitmapCache, uiConfig, frame, sound ); } } ); } }