package com.weem.epicinventor; import com.weem.epicinventor.actor.*; import com.weem.epicinventor.actor.monster.*; import com.weem.epicinventor.placeable.*; import com.weem.epicinventor.world.block.*; import com.weem.epicinventor.item.*; import com.weem.epicinventor.utility.*; import java.awt.*; import java.io.*; import java.util.ArrayList; import java.awt.event.*; public class Settings { public static int resolution; public static int volumeMusic; public static int volumeFX; public static int player = -1; public static int buttonMoveRight; public static int buttonMoveLeft; public static int buttonJump; public static int buttonAction; public static int buttonRobot; public static int buttonInventory; public static int buttonPause; private static Registry registry; private static ArrayList resolutions; private static ArrayList<Player> players; private static ArrayList<BlockManager> blockManagers; private static ArrayList<PlaceableManager> placeableManagers; private static ArrayList<MonsterManager> monsterManagers; private static int NUMBER_OF_PLAYER_SLOTS = 4; public Settings() { } public static void init(GameController gc, Registry r) { int version; registry = r; resolutions = new ArrayList(); resolutions.add("800x600"); resolutions.add("1024x768"); resolutions.add("1152x864"); resolutions.add("1280x720"); resolutions.add("1280x768"); resolutions.add("1280x800"); resolutions.add("1280x960"); resolutions.add("1280x1024"); resolutions.add("1360x768"); resolutions.add("1366x768"); resolutions.add("1440x900"); resolutions.add("1600x900"); resolutions.add("1600x1024"); resolutions.add("1680x1050"); resolutions.add("1920x1080"); resolutions.add("1920x1200"); //resolutions.add("Full Screen"); players = new ArrayList<Player>(); blockManagers = new ArrayList<BlockManager>(); placeableManagers = new ArrayList<PlaceableManager>(); monsterManagers = new ArrayList<MonsterManager>(); //try to load the settings file try { FileInputStream settingsFile = new FileInputStream("Settings.dat"); ObjectInputStream settings = new ObjectInputStream(settingsFile); version = ((Integer) settings.readObject()).intValue(); resolution = ((Integer) settings.readObject()).intValue(); volumeMusic = ((Integer) settings.readObject()).intValue(); volumeFX = ((Integer) settings.readObject()).intValue(); buttonMoveRight = ((Integer) settings.readObject()).intValue(); buttonMoveLeft = ((Integer) settings.readObject()).intValue(); buttonJump = ((Integer) settings.readObject()).intValue(); buttonAction = ((Integer) settings.readObject()).intValue(); buttonRobot = ((Integer) settings.readObject()).intValue(); buttonInventory = ((Integer) settings.readObject()).intValue(); buttonPause = ((Integer) settings.readObject()).intValue(); settings.close(); } catch (Exception e) { EIError.debugMsg(e.getMessage(), EIError.ErrorLevel.Warning); } if (volumeMusic < -1 || volumeMusic > 10) { volumeMusic = 8; } if (volumeMusic == 0) { volumeMusic = 8; } if (volumeMusic == -1) { volumeMusic = 0; } if (volumeFX < -1 || volumeFX > 10) { volumeFX = 8; } if (volumeFX == 0) { volumeFX = 8; } if (volumeFX == -1) { volumeFX = 0; } if (buttonMoveRight == 0) { buttonMoveRight = KeyEvent.VK_D; } if (buttonMoveLeft == 0) { buttonMoveLeft = KeyEvent.VK_A; } if (buttonJump == 0) { buttonJump = KeyEvent.VK_SPACE; } if (buttonAction == 0) { buttonAction = KeyEvent.VK_E; } if (buttonRobot == 0) { buttonRobot = KeyEvent.VK_R; } if (buttonInventory == 0) { buttonInventory = KeyEvent.VK_I; } if (buttonPause == 0) { buttonPause = KeyEvent.VK_P; } //try to load the players for (int i = 1; i <= NUMBER_OF_PLAYER_SLOTS; i++) { try { FileInputStream playerFile = new FileInputStream("Player" + i + ".dat"); ObjectInputStream playerInfo = new ObjectInputStream(playerFile); version = ((Integer) playerInfo.readObject()).intValue(); players.add((Player) playerInfo.readObject()); blockManagers.add((BlockManager) playerInfo.readObject()); placeableManagers.add((PlaceableManager) playerInfo.readObject()); MonsterManager mm = null; if (version >= 2) { mm = (MonsterManager) playerInfo.readObject(); } if (mm == null) { mm = new MonsterManager(gc, r); } monsterManagers.add(mm); playerInfo.close(); EIError.debugMsg("Added Player " + i); } catch (Exception e) { if (players.size() >= i) { players.set(i - 1, null); } else { players.add(null); } if (blockManagers.size() >= i) { blockManagers.set(i - 1, null); } else { blockManagers.add(null); } if (placeableManagers.size() >= i) { placeableManagers.set(i - 1, null); } else { placeableManagers.add(null); } if (monsterManagers.size() >= i) { monsterManagers.set(i - 1, null); } else { monsterManagers.add(null); } EIError.debugMsg("Couldn't load Player " + i + " " + e.getMessage(), EIError.ErrorLevel.Error); } } } public static boolean save() { if (registry.isSaving) { return false; } boolean status = true; registry.isSaving = true; resolutions.add("800x600"); resolutions.add("1024x768"); resolutions.add("1152x864"); resolutions.add("1280x720"); resolutions.add("1280x768"); resolutions.add("1280x800"); resolutions.add("1280x960"); resolutions.add("1280x1024"); resolutions.add("1360x768"); resolutions.add("1366x768"); resolutions.add("1440x900"); resolutions.add("1600x900"); resolutions.add("1600x1024"); resolutions.add("1680x1050"); resolutions.add("1920x1080"); resolutions.add("1920x1200"); //resolutions.add("Full Screen"); //try to save the settings file try { FileOutputStream settingsFile = new FileOutputStream("SettingsTemp.dat"); ObjectOutputStream settings = new ObjectOutputStream(settingsFile); settings.writeObject(new Integer(1)); //settings file version settings.writeObject(new Integer(resolution)); if (volumeMusic == 0) { settings.writeObject(new Integer(-1)); } else { settings.writeObject(new Integer(volumeMusic)); } if (volumeFX == 0) { settings.writeObject(new Integer(-1)); } else { settings.writeObject(new Integer(volumeFX)); } settings.writeObject(new Integer(buttonMoveRight)); settings.writeObject(new Integer(buttonMoveLeft)); settings.writeObject(new Integer(buttonJump)); settings.writeObject(new Integer(buttonAction)); settings.writeObject(new Integer(buttonRobot)); settings.writeObject(new Integer(buttonInventory)); settings.writeObject(new Integer(buttonPause)); settings.close(); moveFile("SettingsTemp.dat", "Settings.dat"); EIError.debugMsg("Saved Settings", EIError.ErrorLevel.Notice); } catch (Exception e) { status = false; EIError.debugMsg("Couldn't save settings " + e.getMessage(), EIError.ErrorLevel.Error); } //try to save the players for (int i = 1; i <= NUMBER_OF_PLAYER_SLOTS; i++) { try { if (player == i - 1) { FileOutputStream playerFile = new FileOutputStream("PlayerTemp.dat"); ObjectOutputStream playerInfo = new ObjectOutputStream(playerFile); playerInfo.writeObject(new Integer(2)); //settings file version playerInfo.writeObject(players.get(i - 1)); if (registry.getGameController().multiplayerMode != GameController.MultiplayerMode.CLIENT && player == i - 1) { blockManagers.set(i - 1, registry.getBlockManager()); placeableManagers.set(i - 1, registry.getPlaceableManager()); monsterManagers.set(i - 1, registry.getMonsterManager()); } playerInfo.writeObject(blockManagers.get(i - 1)); playerInfo.writeObject(placeableManagers.get(i - 1)); playerInfo.writeObject(monsterManagers.get(i - 1)); playerInfo.close(); moveFile("PlayerTemp.dat", "Player" + i + ".dat"); EIError.debugMsg("Saved Player " + i, EIError.ErrorLevel.Notice); } } catch (Exception e) { status = false; EIError.debugMsg("Couldn't save Player " + i + " " + e.getMessage(), EIError.ErrorLevel.Error); } } registry.isSaving = false; return status; } public static Point getResolution(int i) { if (i == 16) { //full screen return new Point(0, 0); } else { String resString = (String) resolutions.get(i); String[] resParts = resString.split("x"); Point res = null; if (resParts.length == 2) { res = new Point(Integer.parseInt(resParts[0]), Integer.parseInt(resParts[1])); } else { res = new Point(800, 600); } return res; } } public static ArrayList getPlayers() { return players; } public static void invalidatePlayerSelect() { player = -1; } public static void setPlayer(int i, Player p) { if (players.size() > i) { players.set(i, p); } } public static void setBlockManager(int i, BlockManager bm) { blockManagers.set(i, bm); } public static void setPlaceableManager(int i, PlaceableManager pm) { placeableManagers.set(i, pm); } public static void setMonsterManager(int i, MonsterManager mm) { monsterManagers.set(i, mm); } public static void loadPlayer(Registry registry) { Player p = (Player) getPlayers().get(player); if (p != null) { p.setTransient(registry); } GameController gc = registry.getGameController(); registry.getPlayerManager().clearPlayers(); registry.getPlayerManager().registerPlayer(p); BlockManager bm = (BlockManager) blockManagers.get(player); bm.name = "Saved"; bm = (BlockManager) bm.clone(); bm.name = "Clone"; bm.setTransient(registry); gc.setBlockManager(bm); PlaceableManager pm = (PlaceableManager) placeableManagers.get(player).clone(); gc.setPlaceableManager(pm); MonsterManager mm = (MonsterManager) monsterManagers.get(player).clone(); mm.setTransient(registry); gc.setMonsterManager(mm); if (p != null) { p.resetPlayer(); } //unloadUnused(); } // public static void unloadUnused() { // if (player > -1) { // for (int i = 0; i < NUMBER_OF_PLAYER_SLOTS; i++) { // if (i != player) { // players.set(i, null); // blockManagers.set(i, null); // placeableManagers.set(i, null); // monsterManagers.set(i, null); // } // } // } // } public static ArrayList getPlayerList() { ArrayList names = new ArrayList(); for (int i = 0; i < players.size(); i++) { Player p = players.get(i); if (p != null) { names.add(p.getName()); } else { names.add(""); } } return names; } public static void deletePlayer(int i) { moveFile("Player" + (i + 1) + ".dat", "Player" + (i + 1) + "Deleted.dat"); } private static void moveFile(String srFile, String dtFile) { copyfile(srFile, dtFile); deletefile(srFile); } private static void copyfile(String srFile, String dtFile) { try { File f1 = new File(srFile); File f2 = new File(dtFile); InputStream in = new FileInputStream(f1); //For Overwrite the file. OutputStream out = new FileOutputStream(f2); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); EIError.debugMsg("File copied " + srFile + " " + dtFile, EIError.ErrorLevel.Notice); } catch (Exception e) { EIError.debugMsg("Couldn't copy file" + srFile + " " + dtFile + " " + e.getMessage(), EIError.ErrorLevel.Error); } } private static void deletefile(String file) { try { File f1 = new File(file); boolean success = f1.delete(); if (success) { EIError.debugMsg("File deleted " + file, EIError.ErrorLevel.Notice); } else { EIError.debugMsg("Couldn't delete file " + file, EIError.ErrorLevel.Error); } } catch (Exception e) { EIError.debugMsg("Couldn't delete file " + file + " " + e.getMessage(), EIError.ErrorLevel.Error); } } }