package com.bladecoder.engineeditor.common; import java.io.IOException; import java.io.InputStream; import java.nio.IntBuffer; import java.util.Properties; import org.lwjgl.BufferUtils; import org.lwjgl.LWJGLException; import org.lwjgl.input.Cursor; import org.lwjgl.input.Mouse; import com.badlogic.gdx.Files.FileType; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import com.bladecoder.engine.BladeEngine; import com.bladecoder.engine.assets.EngineAssetManager; import com.bladecoder.engine.util.Config; public class DesktopLauncher extends BladeEngine { private boolean fullscreen = true; private LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); DesktopLauncher() { Properties p = new Properties(); try { InputStream s = DesktopLauncher.class.getResourceAsStream(Config.PROPERTIES_FILENAME); if(s!=null) p.load(s); } catch (IOException e) { } cfg.title = p.getProperty(Config.TITLE_PROP, "Blade Engine Adventure"); // cfg.useGL30 = true; // cfg.width = World.getInstance().getWidth(); // cfg.height = World.getInstance().getHeight(); cfg.width = 1920 / 2; cfg.height = 1080 / 2; cfg.resizable = true; //cfg.samples = 2; cfg.vSyncEnabled = true; } public void run() { if(DesktopLauncher.class.getResource("/icons/icon128.png")!=null) cfg.addIcon("icons/icon128.png", FileType.Internal); if(DesktopLauncher.class.getResource("/icons/icon32.png")!=null) cfg.addIcon("icons/icon32.png", FileType.Internal); if(DesktopLauncher.class.getResource("/icons/icon16.png")!=null) cfg.addIcon("icons/icon16.png", FileType.Internal); new LwjglApplication(this, cfg); } public void parseParams(String[] args) { for (int i = 0; i < args.length; i++) { String s = args[i]; if (s.equals("-t")) { if (i + 1 < args.length) { i++; setTestMode(args[i]); } } else if (s.equals("-p")) { if (i + 1 < args.length) { i++; setPlayMode(args[i]); } } else if (s.equals("-chapter")) { if (i + 1 < args.length) { i++; setChapter(args[i]); } } else if (s.equals("-f")) { fullscreen = true; //cfg.fullscreen = true; } else if (s.equals("-d")) { setDebugMode(); } else if (s.equals("-r")) { setRestart(); } else if (s.equals("-res")) { if (i + 1 < args.length) { i++; forceResolution(args[i]); } } else if (s.equals("-adv-dir")) { if (i + 1 < args.length) { i++; EngineAssetManager.createEditInstance(args[i]); } } else if (s.equals("-w")) { fullscreen = false; } else if (s.equals("-l")) { if (i + 1 < args.length) { i++; loadGameState(args[i]); } } else if (s.equals("-h")) { usage(); } else { if(i == 0 && !s.startsWith("-")) continue; // When embeded JRE the 0 parameter is the app name System.out.println("Unrecognized parameter: " + s); usage(); } } } public void usage() { System.out.println( "Usage:\n" + "-chapter chapter\tLoads the selected chapter\n" + "-t scene_name\tStart test mode for the scene\n" + "-p record_name\tPlay previusly recorded games\n" + "-f\tSet fullscreen mode\n" + "-w\tSet windowed mode\n" + "-d\tShow debug messages\n" + "-res width\tForce the resolution width\n" + "-l game_state\tLoad the previusly saved game state\n" + "-adv-dir game_folder\tSets the game folder\n" + "-r\tRun the game from the begining\n" ); System.exit(0); } @Override public void create() { // Gdx.input.setCursorCatched(false); if (fullscreen) Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode()); hideCursor(); super.create(); } private void hideCursor() { Cursor emptyCursor; int min = org.lwjgl.input.Cursor.getMinCursorSize(); IntBuffer tmp = BufferUtils.createIntBuffer(min * min); try { emptyCursor = new org.lwjgl.input.Cursor(min, min, min / 2, min / 2, 1, tmp, null); Mouse.setNativeCursor(emptyCursor); } catch (LWJGLException e) { EditorLogger.printStackTrace(e); } } public static void main(String[] args) { DesktopLauncher game = new DesktopLauncher(); game.parseParams(args); game.run(); } }