/*
* Copyright (c) 2012, 2013 Hemanta Sapkota.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Hemanta Sapkota (laex.pearl@gmail.com)
*/
package com.laex.cg2d.render;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.laex.cg2d.model.ScreenModel.CGScreenModel;
/**
* The Class MyGdxGameDesktop.
*
* @author hemantasapkota
*/
public class MyGdxGameDesktop {
/** The lapp. */
private static LwjglApplication lapp;
/**
* Construct.
*
* @return the options
*/
public static Options construct() {
final Options gnuOptions = new Options();
Option cardWidth = new Option("cw", true, "Card Width");
Option cardHeight = new Option("ch", true, "Card Height");
Option cardNoX = new Option("cx", true, "Card No X");
Option cardNoY = new Option("cy", true, "Card No Y");
Option drawBodies = new Option("body", "Draw Bodies");
Option drawJoint = new Option("joint", "Draw Joints");
Option drawAABB = new Option("aabb", "Draw AABB");
Option drawInactiveBodies = new Option("inactive", "Draw Inactive Bodieds");
Option drawDebugData = new Option("debugData", "Draw Debug Data");
Option drawEntities = new Option("entities", "Draw Entities");
Option mouseJoint = new Option("mouseJoint", "Install Mouse Joint");
Option ptmRatio = new Option("ptmRatio", true, "PIXELS TO METERS (PTM) Ratio");
Option gravityX = new Option("gravityX", true, "Gravity X. Can be negative.");
Option gravityY = new Option("gravityY", true, "Gravity Y. Can be negative.");
Option timestep = new Option("timeStep", true, "TimeStep");
Option velocityItr = new Option("velItr", true, "Velocity Iterations");
Option positionItr = new Option("posItr", true, "Position Iterations");
Option screenFile = new Option("screenFile", true, "Screen File");
Option screenController = new Option("screenController", true, "Screen Controller File");
gnuOptions.addOption(cardWidth);
gnuOptions.addOption(cardHeight);
gnuOptions.addOption(cardNoX);
gnuOptions.addOption(cardNoY);
gnuOptions.addOption(drawBodies);
gnuOptions.addOption(drawJoint);
gnuOptions.addOption(drawAABB);
gnuOptions.addOption(drawInactiveBodies);
gnuOptions.addOption(drawDebugData);
gnuOptions.addOption(drawEntities);
gnuOptions.addOption(mouseJoint);
gnuOptions.addOption(ptmRatio);
gnuOptions.addOption(gravityX);
gnuOptions.addOption(gravityY);
gnuOptions.addOption(timestep);
gnuOptions.addOption(velocityItr);
gnuOptions.addOption(positionItr);
gnuOptions.addOption(screenFile);
gnuOptions.addOption(screenController);
return gnuOptions;
}
/**
* Parses the.
*
* @param options
* the options
* @param args
* the args
* @return the map
* @throws ParseException
* the parse exception
*/
private static Map<String, Object> parse(Options options, String args[]) throws ParseException {
Map<String, Object> prefs = new HashMap<String, Object>();
CommandLineParser parse = new GnuParser();
CommandLine cmd = parse.parse(options, args);
// CG2D File
if (cmd.hasOption("screenFile")) {
prefs.put(PreferenceConstants.SCREEN_FILE, cmd.getOptionValue("screenFile"));
}
// screen controller file
if (cmd.hasOption("screenController")) {
prefs.put(PreferenceConstants.SCREEN_CONTROLLER, cmd.getOptionValue("screenController"));
}
return prefs;
}
/**
* The main method.
*
* @param args
* the arguments
* @throws ParseException
* the parse exception
*/
public static void main(String[] args) throws ParseException {
Options options = construct();
Map<String, Object> prefs = parse(options, args);
String screenFile = (String) prefs.get(PreferenceConstants.SCREEN_FILE);
String screenControllerFile = (String) prefs.get(PreferenceConstants.SCREEN_CONTROLLER);
InputStream is;
CGScreenModel model = null;
try {
is = new FileInputStream(screenFile);
model = CGScreenModel.parseFrom(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
} catch (IOException e) {
e.printStackTrace();
return;
}
int cardWidth = model.getScreenPrefs().getCardPrefs().getCardWidth();
int cardHeight = model.getScreenPrefs().getCardPrefs().getCardHeight();
LwjglApplicationConfiguration lwapp = new LwjglApplicationConfiguration();
lwapp.width = cardWidth;
lwapp.height = cardHeight;
// lwapp.title = screenFile;
lwapp.forceExit = false;
final CGScreenModel modelMain = model;
MyGdxGame mgd = new MyGdxGame(screenControllerFile) {
@Override
public CGScreenModel loadGameModel() {
return modelMain;
}
};
// new JoglApplication(mgd, jac);
lapp = new LwjglApplication(mgd, lwapp);
}
/**
* Exit.
*/
public static void exit() {
lapp.error("", "Exiting because of some error");
lapp.exit();
System.exit(0);
}
/**
* Lwjgl app.
*
* @return the lwjgl application
*/
public static LwjglApplication lwjglApp() {
return lapp;
}
}