mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
374 lines
15 KiB
Java
374 lines
15 KiB
Java
/*
|
|
* 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.properties;
|
|
|
|
import java.io.BufferedWriter;
|
|
import java.io.File;
|
|
import java.io.FileNotFoundException;
|
|
import java.io.FileWriter;
|
|
import java.io.IOException;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import com.google.common.io.Files;
|
|
|
|
import forge.Constant;
|
|
import forge.Constant.Preferences;
|
|
import forge.gui.home.EMenuItem;
|
|
import forge.gui.match.VMatchUI;
|
|
import forge.gui.match.nonsingleton.VField;
|
|
import forge.gui.match.views.VDev;
|
|
import forge.util.FileUtil;
|
|
|
|
/**
|
|
* Holds default preference values in an enum.
|
|
* Loads preferred values when instantiated.
|
|
* If a requested value is not present, default is returned.
|
|
*
|
|
* @author Forge
|
|
* @version $Id$
|
|
*/
|
|
public class ForgePreferences {
|
|
private Map<FPref, String> preferenceValues;
|
|
|
|
/**
|
|
* Preference identifiers, and their default values.
|
|
* When this class is instantiated, these enum values are used
|
|
* in a map that is populated with the current preferences
|
|
* from the text file.
|
|
*/
|
|
public enum FPref { /** */
|
|
UI_USE_OLD ("false"), /** */
|
|
UI_RANDOM_FOIL ("false"), /** */
|
|
UI_SMOOTH_LAND ("false"), /** */
|
|
UI_AVATARS ("0,1"), /** */
|
|
UI_CARD_OVERLAY ("true"), /** */
|
|
UI_UPLOAD_DRAFT ("false"), /** */
|
|
UI_SCALE_LARGER ("true"), /** */
|
|
UI_MAX_STACK ("3"), /** */
|
|
UI_STACK_OFFSET ("tiny"), /** */
|
|
UI_CARD_SIZE ("small"), /** */
|
|
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"), /** */
|
|
|
|
SUBMENU_CURRENTMENU (EMenuItem.CONSTRUCTED.toString()), /** */
|
|
SUBMENU_SANCTIONED ("false"), /** */
|
|
SUBMENU_GAUNTLET ("false"), /** */
|
|
SUBMENU_VARIANT ("false"), /** */
|
|
SUBMENU_QUEST ("false"), /** */
|
|
SUBMENU_SETTINGS ("false"), /** */
|
|
SUBMENU_UTILITIES ("false"), /** */
|
|
|
|
DEV_MODE_ENABLED ("false"), /** */
|
|
DEV_MILLING_LOSS ("true"), /** */
|
|
DEV_UNLIMITED_LAND ("false"), /** */
|
|
|
|
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"), /** */
|
|
|
|
SHORTCUT_SHOWSTACK ("83"), /** */
|
|
SHORTCUT_SHOWCOMBAT ("67"), /** */
|
|
SHORTCUT_SHOWCONSOLE ("76"), /** */
|
|
SHORTCUT_SHOWPLAYERS ("80"), /** */
|
|
SHORTCUT_SHOWDEV ("68"), /** */
|
|
SHORTCUT_CONCEDE ("17"), /** */
|
|
SHORTCUT_ENDTURN ("69"), /** */
|
|
SHORTCUT_ALPHASTRIKE ("65"), /** */
|
|
SHORTCUT_SHOWTARGETING ("84");
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
/** */
|
|
public enum CardSizeType {
|
|
/** */
|
|
tiny, smaller, small, medium, large, huge
|
|
}
|
|
|
|
/** */
|
|
public enum StackOffsetType {
|
|
/** */
|
|
tiny, small, medium, large
|
|
}
|
|
|
|
/** */
|
|
public enum HomeMenus {
|
|
/** */
|
|
constructed, draft, sealed, quest, settings, utilities
|
|
}
|
|
|
|
/** Instantiates a ForgePreferences object. */
|
|
public ForgePreferences() {
|
|
preferenceValues = new HashMap<FPref, String>();
|
|
try {
|
|
// Preferences files have been consolidated into res/prefs/.
|
|
// This code is here temporarily to facilitate this transfer.
|
|
// After a while, this can be deleted. Doublestrike 21-5-12
|
|
final File oldFile = new File("forge.preferences");
|
|
|
|
if (oldFile.exists()) {
|
|
final File newFile = new File(NewConstants.PREFS_GLOBAL_FILE);
|
|
Files.copy(oldFile, newFile);
|
|
oldFile.delete();
|
|
} // END TEMPORARY CONSOLIDATION FACILITATION
|
|
|
|
List<String> lines = FileUtil.readFile(NewConstants.PREFS_GLOBAL_FILE);
|
|
for (String line : lines) {
|
|
|
|
if (line.startsWith("#") || (line.length() == 0)) {
|
|
continue;
|
|
}
|
|
|
|
final String[] split = line.split("=");
|
|
|
|
if (split.length == 2) {
|
|
this.setPref(split[0], split[1]);
|
|
}
|
|
}
|
|
} catch (FileNotFoundException ex) {
|
|
//ex.printStackTrace();
|
|
} catch (IOException ex) {
|
|
//ex.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* TODO: Needs to be reworked for efficiency with rest of prefs saves in
|
|
* codebase.
|
|
*/
|
|
public void writeMatchPreferences() {
|
|
final List<VField> fieldViews = VMatchUI.SINGLETON_INSTANCE.getFieldViews();
|
|
|
|
// AI field is at index [1]
|
|
this.setPref(FPref.PHASE_AI_UPKEEP, String.valueOf(fieldViews.get(1).getLblUpkeep().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_DRAW, String.valueOf(fieldViews.get(1).getLblDraw().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_MAIN1, String.valueOf(fieldViews.get(1).getLblMain1().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_BEGINCOMBAT, String.valueOf(fieldViews.get(1).getLblBeginCombat().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_DECLAREATTACKERS,
|
|
String.valueOf(fieldViews.get(1).getLblDeclareAttackers().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_DECLAREBLOCKERS,
|
|
String.valueOf(fieldViews.get(1).getLblDeclareBlockers().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_FIRSTSTRIKE, String.valueOf(fieldViews.get(1).getLblFirstStrike().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_COMBATDAMAGE, String.valueOf(fieldViews.get(1).getLblCombatDamage().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_ENDCOMBAT, String.valueOf(fieldViews.get(1).getLblEndCombat().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_MAIN2, String.valueOf(fieldViews.get(1).getLblMain2().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_EOT, String.valueOf(fieldViews.get(1).getLblEndTurn().getEnabled()));
|
|
this.setPref(FPref.PHASE_AI_CLEANUP, String.valueOf(fieldViews.get(1).getLblCleanup().getEnabled()));
|
|
|
|
// Human field is at index [0]
|
|
this.setPref(FPref.PHASE_HUMAN_UPKEEP, String.valueOf(fieldViews.get(0).getLblUpkeep().getEnabled()));
|
|
this.setPref(FPref.PHASE_HUMAN_DRAW, String.valueOf(fieldViews.get(0).getLblDraw().getEnabled()));
|
|
this.setPref(FPref.PHASE_HUMAN_MAIN1, String.valueOf(fieldViews.get(0).getLblMain1().getEnabled()));
|
|
this.setPref(FPref.PHASE_HUMAN_BEGINCOMBAT, String.valueOf(fieldViews.get(0).getLblBeginCombat().getEnabled()));
|
|
this.setPref(FPref.PHASE_HUMAN_DECLAREATTACKERS,
|
|
String.valueOf(fieldViews.get(0).getLblDeclareAttackers().getEnabled()));
|
|
this.setPref(FPref.PHASE_HUMAN_DECLAREBLOCKERS,
|
|
String.valueOf(fieldViews.get(0).getLblDeclareBlockers().getEnabled()));
|
|
this.setPref(FPref.PHASE_HUMAN_FIRSTSTRIKE, String.valueOf(fieldViews.get(0).getLblFirstStrike().getEnabled()));
|
|
this.setPref(FPref.PHASE_HUMAN_COMBATDAMAGE, String.valueOf(fieldViews.get(0).getLblCombatDamage().getEnabled()));
|
|
this.setPref(FPref.PHASE_HUMAN_ENDCOMBAT, String.valueOf(fieldViews.get(0).getLblEndCombat().getEnabled()));
|
|
this.setPref(FPref.PHASE_HUMAN_MAIN2, String.valueOf(fieldViews.get(0).getLblMain2().getEnabled()));
|
|
this.setPref(FPref.PHASE_HUMAN_EOT, fieldViews.get(0).getLblEndTurn().getEnabled());
|
|
this.setPref(FPref.PHASE_HUMAN_CLEANUP, fieldViews.get(0).getLblCleanup().getEnabled());
|
|
|
|
final VDev v = VDev.SINGLETON_INSTANCE;
|
|
|
|
this.setPref(FPref.DEV_MILLING_LOSS, v.getLblMilling().getEnabled());
|
|
this.setPref(FPref.DEV_UNLIMITED_LAND, v.getLblUnlimitedLands().getEnabled());
|
|
}
|
|
|
|
/**
|
|
* TODO: Needs to be reworked for efficiency with rest of prefs saves in
|
|
* codebase.
|
|
*/
|
|
public void actuateMatchPreferences() {
|
|
final List<VField> fieldViews = VMatchUI.SINGLETON_INSTANCE.getFieldViews();
|
|
|
|
Preferences.DEV_MODE = this.getPrefBoolean(FPref.DEV_MODE_ENABLED);
|
|
Preferences.UPLOAD_DRAFT = Constant.Runtime.NET_CONN && this.getPrefBoolean(FPref.UI_UPLOAD_DRAFT);
|
|
|
|
// AI field is at index [0]
|
|
fieldViews.get(1).getLblUpkeep().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_UPKEEP));
|
|
fieldViews.get(1).getLblDraw().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_DRAW));
|
|
fieldViews.get(1).getLblMain1().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_MAIN1));
|
|
fieldViews.get(1).getLblBeginCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_BEGINCOMBAT));
|
|
fieldViews.get(1).getLblDeclareAttackers().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_DECLAREATTACKERS));
|
|
fieldViews.get(1).getLblDeclareBlockers().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_DECLAREBLOCKERS));
|
|
fieldViews.get(1).getLblFirstStrike().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_FIRSTSTRIKE));
|
|
fieldViews.get(1).getLblCombatDamage().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_COMBATDAMAGE));
|
|
fieldViews.get(1).getLblEndCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_ENDCOMBAT));
|
|
fieldViews.get(1).getLblMain2().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_MAIN2));
|
|
fieldViews.get(1).getLblEndTurn().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_EOT));
|
|
fieldViews.get(1).getLblCleanup().setEnabled(this.getPrefBoolean(FPref.PHASE_AI_CLEANUP));
|
|
|
|
// Human field is at index [1]
|
|
fieldViews.get(0).getLblUpkeep().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_UPKEEP));
|
|
fieldViews.get(0).getLblDraw().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_DRAW));
|
|
fieldViews.get(0).getLblMain1().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_MAIN1));
|
|
fieldViews.get(0).getLblBeginCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_BEGINCOMBAT));
|
|
fieldViews.get(0).getLblDeclareAttackers().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_DECLAREATTACKERS));
|
|
fieldViews.get(0).getLblDeclareBlockers().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_DECLAREBLOCKERS));
|
|
fieldViews.get(0).getLblFirstStrike().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_FIRSTSTRIKE));
|
|
fieldViews.get(0).getLblCombatDamage().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_COMBATDAMAGE));
|
|
fieldViews.get(0).getLblEndCombat().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_ENDCOMBAT));
|
|
fieldViews.get(0).getLblMain2().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_MAIN2));
|
|
fieldViews.get(0).getLblEndTurn().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_EOT));
|
|
fieldViews.get(0).getLblCleanup().setEnabled(this.getPrefBoolean(FPref.PHASE_HUMAN_CLEANUP));
|
|
|
|
//Singletons.getView().getViewMatch().setLayoutParams(this.getPref(FPref.UI_LAYOUT_PARAMS));
|
|
}
|
|
|
|
/** Saves prefs map to file. */
|
|
public void save() {
|
|
BufferedWriter writer = null;
|
|
|
|
try {
|
|
writer = new BufferedWriter(new FileWriter(NewConstants.PREFS_GLOBAL_FILE));
|
|
for (FPref key : FPref.values()) {
|
|
writer.write(key + "=" + getPref(key));
|
|
writer.newLine();
|
|
}
|
|
|
|
writer.flush();
|
|
writer.close();
|
|
} catch (FileNotFoundException ex) {
|
|
ex.printStackTrace();
|
|
} catch (IOException ex) {
|
|
ex.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/** */
|
|
public void reset() {
|
|
this.preferenceValues.clear();
|
|
}
|
|
|
|
/**
|
|
* DUE TO BE DEPRECATED:
|
|
* Transition code between preference manager for v1.2.2 and v1.2.3.
|
|
* (string-based vs. enum-based)
|
|
*
|
|
* @param s0   {@link java.lang.String} identifier of preference
|
|
* @param s1   {@link java.lang.String} value
|
|
*/
|
|
public void setPref(String s0, String s1) {
|
|
try {
|
|
preferenceValues.put(FPref.valueOf(s0), s1);
|
|
}
|
|
catch (Exception e) {
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param q0   {@link forge.properties.ForgePreferences.FPref}
|
|
* @param s0   {@link java.lang.String} value
|
|
*/
|
|
public void setPref(FPref q0, String s0) {
|
|
preferenceValues.put(q0, s0);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* TODO: Write javadoc for this method.
|
|
* @param q0 FPref
|
|
* @param val boolean
|
|
*/
|
|
public void setPref(FPref q0, boolean val) {
|
|
setPref(q0, String.valueOf(val));
|
|
}
|
|
|
|
/**
|
|
* Returns a non-difficulty-indexed preference value.
|
|
*
|
|
* @param fp0   {@link forge.quest.data.ForgePreferences.FPref}
|
|
* @return String
|
|
*/
|
|
public String getPref(FPref fp0) {
|
|
String val;
|
|
|
|
val = preferenceValues.get(fp0);
|
|
if (val == null) { val = fp0.getDefault(); }
|
|
|
|
return val;
|
|
}
|
|
|
|
/**
|
|
* Returns a non-difficulty-indexed preference value, as an int.
|
|
*
|
|
* @param fp0   {@link forge.quest.data.ForgePreferences.FPref}
|
|
* @return int
|
|
*/
|
|
public int getPrefInt(FPref fp0) {
|
|
return Integer.parseInt(getPref(fp0));
|
|
}
|
|
|
|
/**
|
|
* Returns a non-difficulty-indexed preference value, as a boolean.
|
|
*
|
|
* @param fp0   {@link forge.quest.data.ForgePreferences.FPref}
|
|
* @return boolean
|
|
*/
|
|
public boolean getPrefBoolean(FPref fp0) {
|
|
return Boolean.parseBoolean(getPref(fp0));
|
|
}
|
|
}
|