00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.main;
00023
00024 import com.realtime.crossfire.jxclient.settings.Settings;
00025 import com.realtime.crossfire.jxclient.util.Resolution;
00026 import org.jetbrains.annotations.NotNull;
00027 import org.jetbrains.annotations.Nullable;
00028
00034 public class Options {
00035
00039 private static final int DEFAULT_TILE_SIZE = 64;
00040
00048 private boolean fullScreen = true;
00049
00054 @Nullable
00055 private String server = null;
00056
00060 private boolean debugGui = false;
00061
00066 @Nullable
00067 private String debugProtocolFilename = null;
00068
00073 @Nullable
00074 private String debugKeyboardFilename = null;
00075
00080 @Nullable
00081 private String debugScreenFilename = null;
00082
00087 @Nullable
00088 private String debugSoundFilename = null;
00089
00093 @Nullable
00094 private Resolution resolution = null;
00095
00099 @Nullable
00100 private String skin = null;
00101
00105 private int tileSize = DEFAULT_TILE_SIZE;
00106
00110 @NotNull
00111 public static final String DEFAULT_SKIN = "ragnorok";
00112
00117 public void parse(@NotNull final String[] args) {
00118 resolution = null;
00119 skin = "default";
00120
00121
00122 if (skin.equals("com.realtime.crossfire.jxclient.JXCSkinPrelude")) {
00123 skin = "default";
00124 }
00125
00126 int i = 0;
00127 while (i < args.length) {
00128 if ((args[i].equals("-r") || args[i].equals("--resolution")) && i+1 < args.length) {
00129 resolution = Resolution.parse(args[++i]);
00130 if (resolution == null) {
00131 System.err.println("Invalid resolution: "+args[i]);
00132 System.exit(1);
00133 }
00134 } else if ((args[i].equals("-S") || args[i].equals("-s") || args[i].equals("--skin")) && i+1 < args.length) {
00135 skin = args[++i];
00136 if (skin.indexOf('@') != -1) {
00137 System.err.println("Invalid skin name: "+skin);
00138 System.exit(1);
00139 }
00140 } else if (args[i].equals("-N") || args[i].equals("-n") || args[i].equals("--no-full-screen")) {
00141 fullScreen = false;
00142 } else if (args[i].equals("--opengl")) {
00143 System.setProperty("sun.java2d.opengl", "True");
00144 } else if (args[i].equals("--server") && i+1 < args.length) {
00145 server = args[++i];
00146 } else if (args[i].equals("--debug-gui")) {
00147 debugGui = true;
00148 } else if (args[i].equals("--debug-protocol") && i+1 < args.length) {
00149 debugProtocolFilename = args[++i];
00150 } else if (args[i].equals("--debug-keyboard") && i+1 < args.length) {
00151 debugKeyboardFilename = args[++i];
00152 } else if (args[i].equals("--debug-screen") && i+1 < args.length) {
00153 debugScreenFilename = args[++i];
00154 } else if (args[i].equals("--debug-sound") && i+1 < args.length) {
00155 debugSoundFilename = args[++i];
00156 } else if (args[i].equals("--tile-size") && i+1 < args.length) {
00157 final String tmp = args[++i];
00158 try {
00159 tileSize = Integer.parseInt(tmp);
00160 } catch (final NumberFormatException ignored) {
00161 System.err.println("Invalid tile size: "+tmp);
00162 System.exit(1);
00163 }
00164 if (tileSize < 1) {
00165 System.err.println("Invalid tile size: "+tileSize);
00166 System.exit(1);
00167 }
00168 } else {
00169 System.out.println("");
00170 System.out.println("Available options:");
00171 System.out.println(" --no-full-screen");
00172
00173 System.out.println(" -n : Disable full-screen mode.");
00174 System.out.println(" --resolution <width>x<height>");
00175 System.out.println(" -r <width>x<height>");
00176 System.out.println(" : Resolution to use. [default is maximum not exceeding screen]");
00177 System.out.println(" --skin <skin>");
00178
00179 System.out.println(" -s <skin> : Skin name to use.");
00180 System.out.println(" --tile-size <n>: The size of map view tiles in pixels.");
00181 System.out.println(" --opengl : Enable the OpenGL rendering pipeline.");
00182 System.out.println(" --server <host>: Select a server to connect to; skips main and metaserver");
00183 System.out.println(" windows.");
00184 System.out.println(" --debug-gui : Enable debugging of GUI elements.");
00185 System.out.println(" --debug-keyboard <log-file>");
00186 System.out.println(" : Log keyboard input.");
00187 System.out.println(" --debug-protocol <log-file>");
00188 System.out.println(" : Log messages exchanged with the server.");
00189 System.out.println(" --debug-screen <log-file>");
00190 System.out.println(" : Log messages related to screen resolution.");
00191 System.out.println(" --debug-sound <log-file>");
00192 System.out.println(" : Log messages related to sound.");
00193 System.out.println("");
00194 System.out.println("Available skins: default, ragnorok.");
00195 System.exit(1);
00196 }
00197 i++;
00198 }
00199
00200
00201
00202 if (skin.equals("default")) {
00203 skin = DEFAULT_SKIN;
00204 }
00205 }
00206
00212 @Nullable
00213 public String getDebugProtocolFilename() {
00214 return debugProtocolFilename;
00215 }
00216
00221 @Nullable
00222 public String getDebugKeyboardFilename() {
00223 return debugKeyboardFilename;
00224 }
00225
00230 @Nullable
00231 public String getDebugScreenFilename() {
00232 return debugScreenFilename;
00233 }
00234
00239 @Nullable
00240 public String getDebugSoundFilename() {
00241 return debugSoundFilename;
00242 }
00243
00248 public boolean isDebugGui() {
00249 return debugGui;
00250 }
00251
00256 @Nullable
00257 public Resolution getResolution() {
00258 return resolution;
00259 }
00260
00265 @Nullable
00266 public String getSkin() {
00267 return skin;
00268 }
00269
00274 public int getTileSize() {
00275 return tileSize;
00276 }
00277
00282 public boolean isFullScreen() {
00283 return fullScreen;
00284 }
00285
00290 @Nullable
00291 public String getServer() {
00292 return server;
00293 }
00294
00295 }