mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
Create FModel for loading preferences and other information
This commit is contained in:
5
.gitattributes
vendored
5
.gitattributes
vendored
@@ -16011,6 +16011,7 @@ forge-m-base/src/forge/assets/FSkinColor.java -text
|
|||||||
forge-m-base/src/forge/assets/FSkinFont.java -text
|
forge-m-base/src/forge/assets/FSkinFont.java -text
|
||||||
forge-m-base/src/forge/assets/FSkinImage.java -text
|
forge-m-base/src/forge/assets/FSkinImage.java -text
|
||||||
forge-m-base/src/forge/assets/FSkinTexture.java -text
|
forge-m-base/src/forge/assets/FSkinTexture.java -text
|
||||||
|
forge-m-base/src/forge/model/FModel.java -text
|
||||||
forge-m-base/src/forge/player/LobbyPlayerHuman.java -text
|
forge-m-base/src/forge/player/LobbyPlayerHuman.java -text
|
||||||
forge-m-base/src/forge/player/PlayerControllerHuman.java -text
|
forge-m-base/src/forge/player/PlayerControllerHuman.java -text
|
||||||
forge-m-base/src/forge/screens/FScreen.java -text
|
forge-m-base/src/forge/screens/FScreen.java -text
|
||||||
@@ -16041,7 +16042,9 @@ forge-m-base/src/forge/toolbox/FOverlay.java -text
|
|||||||
forge-m-base/src/forge/toolbox/FProgressBar.java -text
|
forge-m-base/src/forge/toolbox/FProgressBar.java -text
|
||||||
forge-m-base/src/forge/toolbox/FScrollPane.java -text
|
forge-m-base/src/forge/toolbox/FScrollPane.java -text
|
||||||
forge-m-base/src/forge/utils/Constants.java -text
|
forge-m-base/src/forge/utils/Constants.java -text
|
||||||
forge-m-base/src/forge/utils/FileLocation.java -text
|
forge-m-base/src/forge/utils/ForgePreferences.java -text
|
||||||
|
forge-m-base/src/forge/utils/Preferences.java -text
|
||||||
|
forge-m-base/src/forge/utils/PreferencesStore.java -text
|
||||||
forge-m-base/src/forge/utils/Utils.java -text
|
forge-m-base/src/forge/utils/Utils.java -text
|
||||||
forge-m-desktop/.classpath -text
|
forge-m-desktop/.classpath -text
|
||||||
forge-m-desktop/.project -text
|
forge-m-desktop/.project -text
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ import java.util.Map;
|
|||||||
public class AiProfileUtil {
|
public class AiProfileUtil {
|
||||||
private static Map<String, Map<AiProps, String>> loadedProfiles = new HashMap<String, Map<AiProps, String>>();
|
private static Map<String, Map<AiProps, String>> loadedProfiles = new HashMap<String, Map<AiProps, String>>();
|
||||||
|
|
||||||
private static final String AI_PROFILE_DIR = "res/ai";
|
private static String AI_PROFILE_DIR;
|
||||||
private static final String AI_PROFILE_EXT = ".ai";
|
private static final String AI_PROFILE_EXT = ".ai";
|
||||||
|
|
||||||
public static final String AI_PROFILE_RANDOM_MATCH = "* Random (Match) *";
|
public static final String AI_PROFILE_RANDOM_MATCH = "* Random (Match) *";
|
||||||
@@ -58,7 +58,9 @@ public class AiProfileUtil {
|
|||||||
/**
|
/**
|
||||||
* Load all profiles
|
* Load all profiles
|
||||||
*/
|
*/
|
||||||
public static final void loadAllProfiles() {
|
public static final void loadAllProfiles(String aiProfileDir) {
|
||||||
|
AI_PROFILE_DIR = aiProfileDir;
|
||||||
|
|
||||||
loadedProfiles.clear();
|
loadedProfiles.clear();
|
||||||
ArrayList<String> availableProfiles = getAvailableProfiles();
|
ArrayList<String> availableProfiles = getAvailableProfiles();
|
||||||
for (String profile : availableProfiles) {
|
for (String profile : availableProfiles) {
|
||||||
|
|||||||
@@ -150,17 +150,14 @@ public class FModel {
|
|||||||
this.decks = new CardCollections();
|
this.decks = new CardCollections();
|
||||||
this.quest = new QuestController();
|
this.quest = new QuestController();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Preload AI profiles
|
// Preload AI profiles
|
||||||
AiProfileUtil.loadAllProfiles();
|
AiProfileUtil.loadAllProfiles(NewConstants.AI_PROFILE_DIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final QuestController getQuest() {
|
public final QuestController getQuest() {
|
||||||
return quest;
|
return quest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static boolean KeywordsLoaded = false;
|
private static boolean KeywordsLoaded = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ public final class NewConstants {
|
|||||||
public static final String BAZAAR_FILE = _QUEST_DIR + "bazaar/index.xml";
|
public static final String BAZAAR_FILE = _QUEST_DIR + "bazaar/index.xml";
|
||||||
public static final String CARD_DATA_DIR = _RES_ROOT + "cardsfolder/";
|
public static final String CARD_DATA_DIR = _RES_ROOT + "cardsfolder/";
|
||||||
public static final String DECK_CUBE_DIR = _RES_ROOT + "cube";
|
public static final String DECK_CUBE_DIR = _RES_ROOT + "cube";
|
||||||
|
public static final String AI_PROFILE_DIR = _RES_ROOT + "ai";
|
||||||
public static final String QUEST_WORLD_DIR = _QUEST_DIR + "worlds/";
|
public static final String QUEST_WORLD_DIR = _QUEST_DIR + "worlds/";
|
||||||
public static final String QUEST_PRECON_DIR = _QUEST_DIR + "precons/";
|
public static final String QUEST_PRECON_DIR = _QUEST_DIR + "precons/";
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import forge.assets.FSkin;
|
|||||||
import forge.assets.FSkinColor;
|
import forge.assets.FSkinColor;
|
||||||
import forge.assets.FSkinFont;
|
import forge.assets.FSkinFont;
|
||||||
import forge.assets.FImage;
|
import forge.assets.FImage;
|
||||||
|
import forge.model.FModel;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
import forge.screens.SplashScreen;
|
import forge.screens.SplashScreen;
|
||||||
import forge.screens.home.HomeScreen;
|
import forge.screens.home.HomeScreen;
|
||||||
@@ -37,7 +38,6 @@ public class Forge implements ApplicationListener {
|
|||||||
private static SpriteBatch batch;
|
private static SpriteBatch batch;
|
||||||
private static ShapeRenderer shapeRenderer;
|
private static ShapeRenderer shapeRenderer;
|
||||||
private static FScreen currentScreen;
|
private static FScreen currentScreen;
|
||||||
private static StaticData magicDb;
|
|
||||||
private static SplashScreen splashScreen;
|
private static SplashScreen splashScreen;
|
||||||
private static final Stack<FScreen> screens = new Stack<FScreen>();
|
private static final Stack<FScreen> screens = new Stack<FScreen>();
|
||||||
|
|
||||||
@@ -56,38 +56,13 @@ public class Forge implements ApplicationListener {
|
|||||||
splashScreen = new SplashScreen();
|
splashScreen = new SplashScreen();
|
||||||
FSkin.loadLight("journeyman", splashScreen);
|
FSkin.loadLight("journeyman", splashScreen);
|
||||||
|
|
||||||
// Loads card database on background thread (using progress bar to report progress)
|
//load model on background thread (using progress bar to report progress)
|
||||||
/*new Thread(new Runnable() {
|
new Thread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
final FProgressBar bar = splashScreen.getProgressBar();
|
FModel.initialize(splashScreen.getProgressBar());
|
||||||
final CardStorageReader.ProgressObserver progressBarBridge = new CardStorageReader.ProgressObserver() {
|
|
||||||
@Override
|
|
||||||
public void setOperationName(final String name, final boolean usePercents) {
|
|
||||||
Gdx.app.postRunnable(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
bar.setDescription(name);
|
|
||||||
bar.setPercentMode(usePercents);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
splashScreen.getProgressBar().setDescription("Opening main window...");
|
||||||
public void report(final int current, final int total) {
|
|
||||||
Gdx.app.postRunnable(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
bar.setMaximum(total);
|
|
||||||
bar.setValue(current);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
final CardStorageReader reader = new CardStorageReader(Constants.CARD_DATA_DIR, progressBarBridge, null);
|
|
||||||
magicDb = new StaticData(reader, Constants.EDITIONS_DIR, Constants.BLOCK_DATA_DIR);
|
|
||||||
|
|
||||||
bar.setDescription("Opening main window...");
|
|
||||||
|
|
||||||
Gdx.app.postRunnable(new Runnable() {
|
Gdx.app.postRunnable(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
@@ -96,8 +71,7 @@ public class Forge implements ApplicationListener {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}).start();*/
|
}).start();
|
||||||
afterDbLoaded();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void afterDbLoaded() {
|
private void afterDbLoaded() {
|
||||||
@@ -133,10 +107,6 @@ public class Forge implements ApplicationListener {
|
|||||||
currentScreen.setSize(screenWidth, screenHeight);
|
currentScreen.setSize(screenWidth, screenHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static StaticData getMagicDb() {
|
|
||||||
return magicDb;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render () {
|
public void render () {
|
||||||
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // Clear the screen.
|
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // Clear the screen.
|
||||||
|
|||||||
323
forge-m-base/src/forge/model/FModel.java
Normal file
323
forge-m-base/src/forge/model/FModel.java
Normal file
@@ -0,0 +1,323 @@
|
|||||||
|
/*
|
||||||
|
* Forge: Play Magic: the Gathering.
|
||||||
|
* Copyright (C) 2011 Forge Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package forge.model;
|
||||||
|
|
||||||
|
import forge.CardStorageReader;
|
||||||
|
import forge.StaticData;
|
||||||
|
import forge.ai.AiProfileUtil;
|
||||||
|
import forge.card.CardType;
|
||||||
|
import forge.game.GameFormat;
|
||||||
|
import forge.game.card.CardUtil;
|
||||||
|
import forge.toolbox.FProgressBar;
|
||||||
|
import forge.util.FileUtil;
|
||||||
|
import forge.utils.Constants;
|
||||||
|
import forge.utils.ForgePreferences;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.Gdx;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default Model implementation for Forge.
|
||||||
|
*
|
||||||
|
* This used to be an interface, but it seems unlikely that we will ever use a
|
||||||
|
* different model.
|
||||||
|
*
|
||||||
|
* In case we need to convert it into an interface in the future, all fields of
|
||||||
|
* this class must be either private or public static final.
|
||||||
|
*/
|
||||||
|
public class FModel {
|
||||||
|
private static StaticData magicDb;
|
||||||
|
|
||||||
|
private static PrintStream oldSystemOut;
|
||||||
|
private static PrintStream oldSystemErr;
|
||||||
|
private static OutputStream logFileStream;
|
||||||
|
|
||||||
|
//private final QuestPreferences questPreferences;
|
||||||
|
private static ForgePreferences preferences;
|
||||||
|
|
||||||
|
// Someone should take care of 2 gauntlets here
|
||||||
|
/*private static GauntletData gauntletData;
|
||||||
|
private static GauntletMini gauntlet;
|
||||||
|
|
||||||
|
private static QuestController quest;
|
||||||
|
private static CardCollections decks;
|
||||||
|
|
||||||
|
private static IStorage<CardBlock> blocks;
|
||||||
|
private static IStorage<CardBlock> fantasyBlocks;
|
||||||
|
private static IStorage<QuestWorld> worlds;*/
|
||||||
|
private static GameFormat.Collection formats;
|
||||||
|
|
||||||
|
public static void initialize(final FProgressBar progressBar) {
|
||||||
|
// install our error reporter
|
||||||
|
//ExceptionHandler.registerErrorHandling();
|
||||||
|
|
||||||
|
//load card database
|
||||||
|
final CardStorageReader.ProgressObserver progressBarBridge = new CardStorageReader.ProgressObserver() {
|
||||||
|
@Override
|
||||||
|
public void setOperationName(final String name, final boolean usePercents) {
|
||||||
|
Gdx.app.postRunnable(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
progressBar.setDescription(name);
|
||||||
|
progressBar.setPercentMode(usePercents);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void report(final int current, final int total) {
|
||||||
|
Gdx.app.postRunnable(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
progressBar.setMaximum(total);
|
||||||
|
progressBar.setValue(current);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
final CardStorageReader reader = new CardStorageReader(Constants.CARD_DATA_DIR, progressBarBridge, null);
|
||||||
|
magicDb = new StaticData(reader, Constants.EDITIONS_DIR, Constants.BLOCK_DATA_DIR);
|
||||||
|
|
||||||
|
//create profile dirs if they don't already exist
|
||||||
|
for (String dname : Constants.PROFILE_DIRS) {
|
||||||
|
File path = new File(dname);
|
||||||
|
if (path.isDirectory()) {
|
||||||
|
// already exists
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!path.mkdirs()) {
|
||||||
|
throw new RuntimeException("cannot create profile directory: " + dname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//initialize log file
|
||||||
|
File logFile = new File(Constants.LOG_FILE);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
while (logFile.exists() && !logFile.delete()) {
|
||||||
|
String pathname = logFile.getPath().replaceAll("[0-9]{0,2}.log$", String.valueOf(i++) + ".log");
|
||||||
|
logFile = new File(pathname);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
logFileStream = new FileOutputStream(logFile);
|
||||||
|
}
|
||||||
|
catch (final FileNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*oldSystemOut = System.out;
|
||||||
|
System.setOut(new PrintStream(new MultiplexOutputStream(System.out, logFileStream), true));
|
||||||
|
oldSystemErr = System.err;
|
||||||
|
System.setErr(new PrintStream(new MultiplexOutputStream(System.err, logFileStream), true));*/
|
||||||
|
|
||||||
|
// Instantiate preferences: quest and regular
|
||||||
|
try {
|
||||||
|
preferences = new ForgePreferences();
|
||||||
|
}
|
||||||
|
catch (final Exception exn) {
|
||||||
|
throw new RuntimeException(exn);
|
||||||
|
}
|
||||||
|
|
||||||
|
formats = new GameFormat.Collection(new GameFormat.Reader(new File(Constants.BLOCK_DATA_DIR + "formats.txt")));
|
||||||
|
/*blocks = new StorageBase<CardBlock>("Block definitions", new CardBlock.Reader(Constants.BLOCK_DATA_DIR + "blocks.txt", magicDb.getEditions()));
|
||||||
|
questPreferences = new QuestPreferences();
|
||||||
|
gauntletData = new GauntletData();
|
||||||
|
fantasyBlocks = new StorageBase<CardBlock>("Custom blocks", new CardBlock.Reader(Constants.BLOCK_DATA_DIR + "fantasyblocks.txt", magicDb.getEditions()));
|
||||||
|
worlds = new StorageBase<QuestWorld>("Quest worlds", new QuestWorld.Reader(Constants.QUEST_WORLD_DIR + "worlds.txt"));*/
|
||||||
|
|
||||||
|
loadDynamicGamedata();
|
||||||
|
|
||||||
|
progressBar.setDescription("Loading decks");
|
||||||
|
|
||||||
|
/*decks = new CardCollections();
|
||||||
|
quest = new QuestController();*/
|
||||||
|
|
||||||
|
//preload AI profiles
|
||||||
|
AiProfileUtil.loadAllProfiles(Constants.AI_PROFILE_DIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public static QuestController getQuest() {
|
||||||
|
return quest;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
private static boolean keywordsLoaded = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load dynamic gamedata.
|
||||||
|
*/
|
||||||
|
public static void loadDynamicGamedata() {
|
||||||
|
if (!CardType.Constant.LOADED[0]) {
|
||||||
|
final List<String> typeListFile = FileUtil.readFile(Constants.TYPE_LIST_FILE);
|
||||||
|
|
||||||
|
List<String> tList = null;
|
||||||
|
|
||||||
|
if (typeListFile.size() > 0) {
|
||||||
|
for (int i = 0; i < typeListFile.size(); i++) {
|
||||||
|
final String s = typeListFile.get(i);
|
||||||
|
|
||||||
|
if (s.equals("[CardTypes]")) {
|
||||||
|
tList = CardType.Constant.CARD_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (s.equals("[SuperTypes]")) {
|
||||||
|
tList = CardType.Constant.SUPER_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (s.equals("[BasicTypes]")) {
|
||||||
|
tList = CardType.Constant.BASIC_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (s.equals("[LandTypes]")) {
|
||||||
|
tList = CardType.Constant.LAND_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (s.equals("[CreatureTypes]")) {
|
||||||
|
tList = CardType.Constant.CREATURE_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (s.equals("[InstantTypes]")) {
|
||||||
|
tList = CardType.Constant.INSTANT_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (s.equals("[SorceryTypes]")) {
|
||||||
|
tList = CardType.Constant.SORCERY_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (s.equals("[EnchantmentTypes]")) {
|
||||||
|
tList = CardType.Constant.ENCHANTMENT_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (s.equals("[ArtifactTypes]")) {
|
||||||
|
tList = CardType.Constant.ARTIFACT_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (s.equals("[WalkerTypes]")) {
|
||||||
|
tList = CardType.Constant.WALKER_TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (s.length() > 1) {
|
||||||
|
tList.add(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CardType.Constant.LOADED[0] = true;
|
||||||
|
/*
|
||||||
|
* if (Constant.Runtime.DevMode[0]) {
|
||||||
|
* System.out.println(CardType.Constant.cardTypes[0].list);
|
||||||
|
* System.out.println(CardType.Constant.superTypes[0].list);
|
||||||
|
* System.out.println(CardType.Constant.basicTypes[0].list);
|
||||||
|
* System.out.println(CardType.Constant.landTypes[0].list);
|
||||||
|
* System.out.println(CardType.Constant.creatureTypes[0].list);
|
||||||
|
* System.out.println(CardType.Constant.instantTypes[0].list);
|
||||||
|
* System.out.println(CardType.Constant.sorceryTypes[0].list);
|
||||||
|
* System.out.println(CardType.Constant.enchantmentTypes[0].list);
|
||||||
|
* System.out.println(CardType.Constant.artifactTypes[0].list);
|
||||||
|
* System.out.println(CardType.Constant.walkerTypes[0].list); }
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!keywordsLoaded) {
|
||||||
|
final List<String> nskwListFile = FileUtil.readFile(Constants.KEYWORD_LIST_FILE);
|
||||||
|
|
||||||
|
if (nskwListFile.size() > 1) {
|
||||||
|
for (String s : nskwListFile) {
|
||||||
|
if (s.length() > 1) {
|
||||||
|
CardUtil.NON_STACKING_LIST.add(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
keywordsLoaded = true;
|
||||||
|
/*
|
||||||
|
* if (Constant.Runtime.DevMode[0]) {
|
||||||
|
* System.out.println(Constant.Keywords.NonStackingList[0].list); }
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* if (!MagicColor.Constant.loaded[0]) { ArrayList<String> lcListFile =
|
||||||
|
* FileUtil.readFile("res/gamedata/LandColorList");
|
||||||
|
*
|
||||||
|
* if (lcListFile.size() > 1) { for (int i=0; i<lcListFile.size(); i++)
|
||||||
|
* { String s = lcListFile.get(i); if (s.length() > 1)
|
||||||
|
* MagicColor.Constant.LandColor[0].map.add(s); } }
|
||||||
|
* Constant.Keywords.loaded[0] = true; if (Constant.Runtime.DevMode[0])
|
||||||
|
* { System.out.println(Constant.Keywords.NonStackingList[0].list); } }
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public static StaticData getMagicDb() {
|
||||||
|
return magicDb;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ForgePreferences getPreferences() {
|
||||||
|
return preferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public static IStorage<CardBlock> getBlocks() {
|
||||||
|
return blocks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static QuestPreferences getQuestPreferences() {
|
||||||
|
return questPreferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GauntletData getGauntletData() {
|
||||||
|
return gauntletData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CardCollections getDecks() {
|
||||||
|
return decks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IStorage<QuestWorld> getWorlds() {
|
||||||
|
return worlds;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
public static GameFormat.Collection getFormats() {
|
||||||
|
return formats;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finalizer, generally should be avoided, but here closes the log file
|
||||||
|
* stream and resets the system output streams.
|
||||||
|
*/
|
||||||
|
public static void close() throws IOException {
|
||||||
|
System.setOut(oldSystemOut);
|
||||||
|
System.setErr(oldSystemErr);
|
||||||
|
logFileStream.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public static void setGauntletData(GauntletData data0) {
|
||||||
|
gauntletData = data0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IStorage<CardBlock> getFantasyBlocks() {
|
||||||
|
return fantasyBlocks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GauntletMini getGauntletMini() {
|
||||||
|
if (gauntlet == null) {
|
||||||
|
gauntlet = new GauntletMini();
|
||||||
|
}
|
||||||
|
return gauntlet;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
@@ -47,7 +47,8 @@ public final class Constants {
|
|||||||
public static final String EDITIONS_DIR = _ASSETS_ROOT + "editions/";
|
public static final String EDITIONS_DIR = _ASSETS_ROOT + "editions/";
|
||||||
public static final String BLOCK_DATA_DIR = _ASSETS_ROOT + "blockdata/";
|
public static final String BLOCK_DATA_DIR = _ASSETS_ROOT + "blockdata/";
|
||||||
public static final String DECK_CUBE_DIR = _ASSETS_ROOT + "cube";
|
public static final String DECK_CUBE_DIR = _ASSETS_ROOT + "cube";
|
||||||
public static final String QUEST_WORLD_DIR = _QUEST_DIR + "worlds/";
|
public static final String AI_PROFILE_DIR = _ASSETS_ROOT + "ai";
|
||||||
|
public static final String QUEST_WORLD_DIR = _QUEST_DIR + "world/";
|
||||||
public static final String QUEST_PRECON_DIR = _QUEST_DIR + "precons/";
|
public static final String QUEST_PRECON_DIR = _QUEST_DIR + "precons/";
|
||||||
|
|
||||||
public static final String CARD_DATA_PETS_DIR = _QUEST_DIR + "bazaar/";
|
public static final String CARD_DATA_PETS_DIR = _QUEST_DIR + "bazaar/";
|
||||||
@@ -77,14 +78,6 @@ public final class Constants {
|
|||||||
public static final String QUEST_PREFS_FILE = USER_PREFS_DIR + "quest.preferences";
|
public static final String QUEST_PREFS_FILE = USER_PREFS_DIR + "quest.preferences";
|
||||||
public static final String ITEM_VIEW_PREFS_FILE = USER_PREFS_DIR + "item_view.preferences";
|
public static final String ITEM_VIEW_PREFS_FILE = USER_PREFS_DIR + "item_view.preferences";
|
||||||
|
|
||||||
// data that has defaults in the program dir but overrides/additions in the user dir
|
|
||||||
private static final String _DEFAULTS_DIR = _ASSETS_ROOT + "defaults/";
|
|
||||||
public static final FileLocation WINDOW_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "window.xml");
|
|
||||||
public static final FileLocation MATCH_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "match.xml");
|
|
||||||
public static final FileLocation WORKSHOP_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "workshop.xml");
|
|
||||||
public static final FileLocation EDITOR_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "editor.xml");
|
|
||||||
public static final FileLocation GAUNTLET_DIR = new FileLocation(_DEFAULTS_DIR, USER_DIR, "gauntlet/");
|
|
||||||
|
|
||||||
// data that is only in the cached dir
|
// data that is only in the cached dir
|
||||||
private static final String _PICS_DIR = CACHE_DIR + "pics/";
|
private static final String _PICS_DIR = CACHE_DIR + "pics/";
|
||||||
public static final String DB_DIR = CACHE_DIR + "db/";
|
public static final String DB_DIR = CACHE_DIR + "db/";
|
||||||
@@ -101,7 +94,6 @@ public final class Constants {
|
|||||||
USER_DIR,
|
USER_DIR,
|
||||||
CACHE_DIR,
|
CACHE_DIR,
|
||||||
USER_PREFS_DIR,
|
USER_PREFS_DIR,
|
||||||
GAUNTLET_DIR.userPrefLoc,
|
|
||||||
DB_DIR,
|
DB_DIR,
|
||||||
DECK_CONSTRUCTED_DIR,
|
DECK_CONSTRUCTED_DIR,
|
||||||
DECK_DRAFT_DIR,
|
DECK_DRAFT_DIR,
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.utils;
|
|
||||||
|
|
||||||
public final class FileLocation {
|
|
||||||
public final String defaultLoc;
|
|
||||||
public final String userPrefLoc;
|
|
||||||
|
|
||||||
FileLocation (String defaultPrefix, String userPrefix, String commonSuffix) {
|
|
||||||
defaultLoc = defaultPrefix + commonSuffix;
|
|
||||||
userPrefLoc = userPrefix + commonSuffix;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
138
forge-m-base/src/forge/utils/ForgePreferences.java
Normal file
138
forge-m-base/src/forge/utils/ForgePreferences.java
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
/*
|
||||||
|
* Forge: Play Magic: the Gathering.
|
||||||
|
* Copyright (C) 2011 Forge Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package forge.utils;
|
||||||
|
|
||||||
|
import forge.ai.AiProfileUtil;
|
||||||
|
import forge.game.GameLogEntryType;
|
||||||
|
|
||||||
|
public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
||||||
|
/**
|
||||||
|
* Preference identifiers, and their default values.
|
||||||
|
*/
|
||||||
|
public static enum FPref {
|
||||||
|
PLAYER_NAME (""),
|
||||||
|
CONSTRUCTED_P1_DECK_STATE(""),
|
||||||
|
CONSTRUCTED_P2_DECK_STATE(""),
|
||||||
|
CONSTRUCTED_P3_DECK_STATE(""),
|
||||||
|
CONSTRUCTED_P4_DECK_STATE(""),
|
||||||
|
CONSTRUCTED_P5_DECK_STATE(""),
|
||||||
|
CONSTRUCTED_P6_DECK_STATE(""),
|
||||||
|
CONSTRUCTED_P7_DECK_STATE(""),
|
||||||
|
CONSTRUCTED_P8_DECK_STATE(""),
|
||||||
|
UI_RANDOM_FOIL ("false"),
|
||||||
|
UI_ENABLE_AI_CHEATS ("false"),
|
||||||
|
UI_AVATARS ("0,1"),
|
||||||
|
UI_SHOW_CARD_OVERLAYS ("true"),
|
||||||
|
UI_OVERLAY_CARD_NAME ("true"),
|
||||||
|
UI_OVERLAY_CARD_POWER ("true"),
|
||||||
|
UI_OVERLAY_CARD_MANA_COST ("true"),
|
||||||
|
UI_OVERLAY_CARD_ID ("true"),
|
||||||
|
UI_OVERLAY_FOIL_EFFECT ("true"),
|
||||||
|
UI_HIDE_REMINDER_TEXT ("false"),
|
||||||
|
UI_UPLOAD_DRAFT ("false"),
|
||||||
|
UI_RANDOM_ART_IN_POOLS ("true"),
|
||||||
|
UI_BUGZ_NAME (""),
|
||||||
|
UI_BUGZ_PWD (""),
|
||||||
|
UI_ANTE ("false"),
|
||||||
|
UI_MANABURN("false"),
|
||||||
|
UI_SKIN ("Default"),
|
||||||
|
UI_PREFERRED_AVATARS_ONLY ("false"),
|
||||||
|
UI_TARGETING_OVERLAY ("false"),
|
||||||
|
UI_ENABLE_SOUNDS ("true"),
|
||||||
|
UI_ALT_SOUND_SYSTEM ("false"),
|
||||||
|
UI_CURRENT_AI_PROFILE (AiProfileUtil.AI_PROFILE_RANDOM_MATCH),
|
||||||
|
UI_CLONE_MODE_SOURCE ("false"),
|
||||||
|
UI_MATCH_IMAGE_VISIBLE ("true"),
|
||||||
|
|
||||||
|
UI_FOR_TOUCHSCREN("false"),
|
||||||
|
|
||||||
|
MATCHPREF_PROMPT_FREE_BLOCKS("false"),
|
||||||
|
|
||||||
|
ENFORCE_DECK_LEGALITY ("true"),
|
||||||
|
|
||||||
|
DEV_MODE_ENABLED ("false"),
|
||||||
|
// DEV_MILLING_LOSS ("true"),
|
||||||
|
DEV_UNLIMITED_LAND ("false"),
|
||||||
|
DEV_LOG_ENTRY_TYPE (GameLogEntryType.DAMAGE.toString()),
|
||||||
|
|
||||||
|
DECK_DEFAULT_CARD_LIMIT ("4"),
|
||||||
|
DECKGEN_SINGLETONS ("false"),
|
||||||
|
DECKGEN_ARTIFACTS ("false"),
|
||||||
|
DECKGEN_NOSMALL ("false"),
|
||||||
|
|
||||||
|
PHASE_AI_UPKEEP ("true"),
|
||||||
|
PHASE_AI_DRAW ("true"),
|
||||||
|
PHASE_AI_MAIN1 ("true"),
|
||||||
|
PHASE_AI_BEGINCOMBAT ("true"),
|
||||||
|
PHASE_AI_DECLAREATTACKERS ("true"),
|
||||||
|
PHASE_AI_DECLAREBLOCKERS ("true"),
|
||||||
|
PHASE_AI_FIRSTSTRIKE ("true"),
|
||||||
|
PHASE_AI_COMBATDAMAGE ("true"),
|
||||||
|
PHASE_AI_ENDCOMBAT ("true"),
|
||||||
|
PHASE_AI_MAIN2 ("true"),
|
||||||
|
PHASE_AI_EOT ("true"),
|
||||||
|
PHASE_AI_CLEANUP ("true"),
|
||||||
|
|
||||||
|
PHASE_HUMAN_UPKEEP ("true"),
|
||||||
|
PHASE_HUMAN_DRAW ("true"),
|
||||||
|
PHASE_HUMAN_MAIN1 ("true"),
|
||||||
|
PHASE_HUMAN_BEGINCOMBAT ("true"),
|
||||||
|
PHASE_HUMAN_DECLAREATTACKERS ("true"),
|
||||||
|
PHASE_HUMAN_DECLAREBLOCKERS ("true"),
|
||||||
|
PHASE_HUMAN_FIRSTSTRIKE ("true"),
|
||||||
|
PHASE_HUMAN_COMBATDAMAGE ("true"),
|
||||||
|
PHASE_HUMAN_ENDCOMBAT ("true"),
|
||||||
|
PHASE_HUMAN_MAIN2 ("true"),
|
||||||
|
PHASE_HUMAN_EOT ("true"),
|
||||||
|
PHASE_HUMAN_CLEANUP ("true");
|
||||||
|
|
||||||
|
private final String strDefaultVal;
|
||||||
|
|
||||||
|
/** @param s0   {@link java.lang.String} */
|
||||||
|
FPref(String s0) {
|
||||||
|
this.strDefaultVal = s0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link java.lang.String} */
|
||||||
|
public String getDefault() {
|
||||||
|
return strDefaultVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Instantiates a ForgePreferences object. */
|
||||||
|
public ForgePreferences() {
|
||||||
|
super(Constants.MAIN_PREFS_FILE, FPref.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected FPref[] getEnumValues() {
|
||||||
|
return FPref.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected FPref valueOf(String name) {
|
||||||
|
try {
|
||||||
|
return FPref.valueOf(name);
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getPrefDefault(FPref key) {
|
||||||
|
return key.getDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
196
forge-m-base/src/forge/utils/Preferences.java
Normal file
196
forge-m-base/src/forge/utils/Preferences.java
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
/*
|
||||||
|
* Forge: Play Magic: the Gathering.
|
||||||
|
* Copyright (C) 2011 Forge Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package forge.utils;
|
||||||
|
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of name/value pairs with sorted keys and utility methods.
|
||||||
|
*
|
||||||
|
* @author Forge
|
||||||
|
* @version $Id: Preferences.java 24769 2014-02-09 13:56:04Z Hellfish $
|
||||||
|
*/
|
||||||
|
public class Preferences {
|
||||||
|
|
||||||
|
/** The props. */
|
||||||
|
private final Properties props;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Constructor for Preferences.
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public Preferences() {
|
||||||
|
this.props = new Properties();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Constructor for Preferences.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param prefs
|
||||||
|
* a {@link forge.properties.Preferences} object.
|
||||||
|
*/
|
||||||
|
public Preferences(final Preferences prefs) {
|
||||||
|
this.props = prefs.props;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* keys.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @return a {@link java.util.Enumeration} object.
|
||||||
|
*/
|
||||||
|
public final synchronized Enumeration<String> keys() {
|
||||||
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||||
|
final Set<String> keysEnum = (Set) this.props.keySet();
|
||||||
|
final Vector<String> keyList = new Vector<String>();
|
||||||
|
keyList.addAll(keysEnum);
|
||||||
|
Collections.sort(keyList);
|
||||||
|
return keyList.elements();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* getInt.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @param defaultValue
|
||||||
|
* a int.
|
||||||
|
* @return a int.
|
||||||
|
*/
|
||||||
|
public final int getInt(final String name, final int defaultValue) {
|
||||||
|
final String value = this.props.getProperty(name);
|
||||||
|
if (value == null) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return Integer.parseInt(value);
|
||||||
|
} catch (final NumberFormatException ex) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* getBoolean.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @param defaultValue
|
||||||
|
* a boolean.
|
||||||
|
* @return a boolean.
|
||||||
|
*/
|
||||||
|
public final boolean getBoolean(final String name, final boolean defaultValue) {
|
||||||
|
final String value = this.props.getProperty(name);
|
||||||
|
if (value == null) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
return Boolean.parseBoolean(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* getLong.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @param defaultValue
|
||||||
|
* a long.
|
||||||
|
* @return a long.
|
||||||
|
*/
|
||||||
|
public final long getLong(final String name, final long defaultValue) {
|
||||||
|
final String value = this.props.getProperty(name);
|
||||||
|
if (value == null) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
return Long.parseLong(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* set.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param key
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @param value
|
||||||
|
* a {@link java.lang.Object} object.
|
||||||
|
*/
|
||||||
|
public final void set(final String key, final Object value) {
|
||||||
|
this.props.setProperty(key, String.valueOf(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* get.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param key
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @param value
|
||||||
|
* a {@link java.lang.Object} object.
|
||||||
|
* @return a {@link java.lang.String} object.
|
||||||
|
*/
|
||||||
|
public final String get(final String key, final Object value) {
|
||||||
|
String string = null;
|
||||||
|
if (value != null) {
|
||||||
|
string = String.valueOf(value);
|
||||||
|
}
|
||||||
|
return this.props.getProperty(key, string);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* load.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param stream
|
||||||
|
* a {@link java.io.FileInputStream} object.
|
||||||
|
* @throws IOException
|
||||||
|
* Signals that an I/O exception has occurred.
|
||||||
|
*/
|
||||||
|
public final void load(final FileInputStream stream) throws IOException {
|
||||||
|
this.props.load(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* store.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param stream
|
||||||
|
* a {@link java.io.FileOutputStream} object.
|
||||||
|
* @param comments
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @throws IOException
|
||||||
|
* Signals that an I/O exception has occurred.
|
||||||
|
*/
|
||||||
|
public final void store(final FileOutputStream stream, final String comments) throws IOException {
|
||||||
|
this.props.store(stream, comments);
|
||||||
|
}
|
||||||
|
}
|
||||||
115
forge-m-base/src/forge/utils/PreferencesStore.java
Normal file
115
forge-m-base/src/forge/utils/PreferencesStore.java
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
/*
|
||||||
|
* Forge: Play Magic: the Gathering.
|
||||||
|
* Copyright (C) 2011 Forge Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package forge.utils;
|
||||||
|
|
||||||
|
import forge.util.FileUtil;
|
||||||
|
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.EnumMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds default preference values in an enum.
|
||||||
|
* Loads preferred values when instantiated.
|
||||||
|
* If a requested value is not present, default is returned.
|
||||||
|
*/
|
||||||
|
public abstract class PreferencesStore<T extends Enum<T>> {
|
||||||
|
private final Map<T, String> preferenceValues;
|
||||||
|
private final String filename;
|
||||||
|
|
||||||
|
public PreferencesStore(String filename0, Class<T> clasz) {
|
||||||
|
preferenceValues = new EnumMap<T, String>(clasz);
|
||||||
|
filename = filename0;
|
||||||
|
|
||||||
|
List<String> lines = FileUtil.readFile(filename);
|
||||||
|
for (String line : lines) {
|
||||||
|
line = line.trim();
|
||||||
|
if (line.startsWith("#") || (line.isEmpty())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] split = line.split("=");
|
||||||
|
T pref = valueOf(split[0]);
|
||||||
|
|
||||||
|
if (null == pref) {
|
||||||
|
System.out.println("unknown preference: " + line);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (split.length == 2) {
|
||||||
|
this.setPref(pref, split[1]);
|
||||||
|
} else if (split.length == 1 && line.endsWith("=")) {
|
||||||
|
this.setPref(pref, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract T[] getEnumValues();
|
||||||
|
protected abstract T valueOf(String name);
|
||||||
|
protected abstract String getPrefDefault(T key);
|
||||||
|
|
||||||
|
public final void save() {
|
||||||
|
BufferedWriter writer = null;
|
||||||
|
try {
|
||||||
|
writer = new BufferedWriter(new FileWriter(filename));
|
||||||
|
for (T key : getEnumValues()) {
|
||||||
|
writer.write(key + "=" + getPref(key));
|
||||||
|
writer.newLine();
|
||||||
|
}
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if (null != writer) {
|
||||||
|
try { writer.close(); }
|
||||||
|
catch (IOException e) { System.out.println("error while closing " + filename); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void reset() {
|
||||||
|
this.preferenceValues.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void setPref(T q0, String s0) {
|
||||||
|
preferenceValues.put(q0, s0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void setPref(T q0, boolean val) {
|
||||||
|
setPref(q0, String.valueOf(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
public final String getPref(T fp0) {
|
||||||
|
String val;
|
||||||
|
|
||||||
|
val = preferenceValues.get(fp0);
|
||||||
|
if (val == null) { val = getPrefDefault(fp0); }
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final int getPrefInt(T fp0) {
|
||||||
|
return Integer.parseInt(getPref(fp0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public final boolean getPrefBoolean(T fp0) {
|
||||||
|
return Boolean.parseBoolean(getPref(fp0));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,6 @@ package forge.utils;
|
|||||||
|
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
|
|
||||||
import forge.Forge;
|
|
||||||
import forge.card.CardDb;
|
import forge.card.CardDb;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.deck.generation.DeckGenerator2Color;
|
import forge.deck.generation.DeckGenerator2Color;
|
||||||
@@ -10,6 +9,7 @@ import forge.deck.generation.DeckGenerator3Color;
|
|||||||
import forge.deck.generation.DeckGenerator5Color;
|
import forge.deck.generation.DeckGenerator5Color;
|
||||||
import forge.deck.generation.DeckGeneratorBase;
|
import forge.deck.generation.DeckGeneratorBase;
|
||||||
import forge.deck.generation.DeckGeneratorMonoColor;
|
import forge.deck.generation.DeckGeneratorMonoColor;
|
||||||
|
import forge.model.FModel;
|
||||||
|
|
||||||
public class Utils {
|
public class Utils {
|
||||||
private final static float ppcX = Gdx.graphics.getPpcX();
|
private final static float ppcX = Gdx.graphics.getPpcX();
|
||||||
@@ -29,7 +29,7 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Deck generateRandomDeck(final int colorCount0) {
|
public static Deck generateRandomDeck(final int colorCount0) {
|
||||||
CardDb cardDb = Forge.getMagicDb().getCommonCards();
|
CardDb cardDb = FModel.getMagicDb().getCommonCards();
|
||||||
DeckGeneratorBase gen = null;
|
DeckGeneratorBase gen = null;
|
||||||
switch (colorCount0) {
|
switch (colorCount0) {
|
||||||
case 1: gen = new DeckGeneratorMonoColor(cardDb, null); break;
|
case 1: gen = new DeckGeneratorMonoColor(cardDb, null); break;
|
||||||
|
|||||||
Reference in New Issue
Block a user