From: <jde...@us...> - 2007-01-03 07:53:54
|
Revision: 1870 http://svn.sourceforge.net/pcgen/?rev=1870&view=rev Author: jdempsey Date: 2007-01-02 23:53:55 -0800 (Tue, 02 Jan 2007) Log Message: ----------- Freq #1262317 - Ability Object: Add ability tags - Remove obsolete Template-specific Ability tag. - Add support of global ABILITY tag in LEVEL and HD Freq #1025273 - LEVEL & HD tags need to be able to call all global tags - Add support of all global tags that support PREREQs to LEVEL and HD Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java Trunk/pcgen/code/src/java/plugin/lsttokens/template/HdToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/template/LevelToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2007-01-03 07:49:14 UTC (rev 1869) +++ Trunk/pcgen/code/pluginbuild.xml 2007-01-03 07:53:55 UTC (rev 1870) @@ -3884,13 +3884,6 @@ <target name="jar-lst-template-plugins" depends="makeplugindirs" description="Build (Link) Weapon Prof Lst Token plugin jar files"> <!-- Template tokens--> - <jar jarfile="${lstplugins.dir}/TemplateLstToken-ABILITY.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/template/AbilityToken.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${lstplugins.dir}/TemplateLstToken-ADDLEVEL.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2007-01-03 07:49:14 UTC (rev 1869) +++ Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2007-01-03 07:53:55 UTC (rev 1870) @@ -32,7 +32,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.StringTokenizer; import pcgen.core.levelability.LevelAbility; @@ -62,8 +61,6 @@ private AbilityStore abilityCatStore = null; private List<String> featStrings = null; - /** A Map storing a List of Ability keys Keyed on AbilityCategory */ - private Map<AbilityCategory, List<String>> theAutoAbilityKeys = null; private List<String> hitDiceStrings = null; private List<String> templates = new ArrayList<String>(); @@ -575,32 +572,7 @@ txt.append("\tFEAT:").append(buffer.toString()); } - // TODO - Need a tag for this - if (theAutoAbilityKeys != null) - { - final Set<AbilityCategory> categories = theAutoAbilityKeys.keySet(); - for (final AbilityCategory category : categories) - { - if (category == AbilityCategory.FEAT) - { - continue; - } - final StringBuffer buffer = new StringBuffer(); - for (final String key : theAutoAbilityKeys.get(category)) - { - if (buffer.length() != 0) - { - buffer.append(Constants.PIPE); - } - buffer.append(key); - } - txt.append("\tABILITY:AUTO|CATEGORY=").append( - category.getKeyName()).append("|") - .append(buffer.toString()); - } - } - if (!Constants.s_NONE.equals(gender)) { txt.append("\tGENDERLOCK:").append(gender); @@ -1139,15 +1111,6 @@ */ public void addHitDiceString(final String hitDiceString) { - if (".CLEAR".equals(hitDiceString)) - { - if (hitDiceStrings != null) - { - hitDiceStrings.clear(); - } - - return; - } StringTokenizer tok = new StringTokenizer(hitDiceString, ":"); String hdStr = tok.nextToken(); String typeStr = tok.nextToken(); @@ -1185,6 +1148,17 @@ } /** + * Clear the list of HD strings for this template. + */ + public void clearHitDiceStrings() + { + if (hitDiceStrings != null) + { + hitDiceStrings.clear(); + } + } + + /** * Get a list of strings which may grant the following abilities at a given * hit die: * @@ -1423,12 +1397,6 @@ aTemp.featStrings = new ArrayList<String>(featStrings); } - if (theAutoAbilityKeys != null) - { - aTemp.theAutoAbilityKeys = new HashMap<AbilityCategory, List<String>>( - theAutoAbilityKeys); - } - if (chosenFeatStrings != null) { aTemp.chosenFeatStrings = new HashMap<String, String>( @@ -1827,7 +1795,6 @@ * @param aPC * The PC that this Template is appled to */ - // TODO - This should be refactored to use the LevelAbility code. private void getLevelFeat(final String featString, final int lvl, final String aKey, final PlayerCharacter aPC) { @@ -1887,64 +1854,6 @@ addChosenFeat(aKey, featKe); } - private void getLevelAbility(final String anAbilityString, - final int aLevel, final PlayerCharacter aPC) - { - String abilityKey = null; - while (true) - { - List<String> abilityList = new ArrayList<String>(); - final LevelAbility la = LevelAbility.createAbility(this, aLevel, - "FEAT(" + anAbilityString + ")"); - - la.process(abilityList, aPC, null); - - switch (abilityList.size()) - { - case 1: - abilityKey = abilityList.get(0); - - break; - - default: - - if ((aPC != null) && !aPC.isImporting()) - { - Collections.sort(abilityList); - - final ChooserInterface c = ChooserFactory - .getChooserInstance(); - c.setPool(1); - c.setTitle("Ability Choice"); - c.setAvailableList(abilityList); - c.setVisible(true); - abilityList = c.getSelectedList(); - - if ((abilityList != null) && (abilityList.size() != 0)) - { - abilityKey = abilityList.get(0); - - continue; - } - } - - // fall-through intentional - case 0: - return; - } - - break; - } - final LevelAbility la = LevelAbility.createAbility(this, aLevel, - "FEAT(" + abilityKey + ")"); - - aPC.setAllowFeatPoolAdjustment(false); - la.process(null, aPC, null); - aPC.setAllowFeatPoolAdjustment(true); - - addChosenFeat("L" + aLevel, abilityKey); - } - /** * Add a chosen feat to the Template * @@ -2034,30 +1943,10 @@ addAbilityString("CATEGORY=FEAT|" + abilityString); } - public void addAbilityString(final AbilityCategory aCategory, - final String anAbilityKey) - { - if (aCategory == AbilityCategory.FEAT) - { - addFeatString(anAbilityKey); - return; - } - - if (theAutoAbilityKeys == null) - { - theAutoAbilityKeys = new HashMap<AbilityCategory, List<String>>(); - } - // TODO - Move this to token processing. - if (".CLEAR".equals(anAbilityKey)) - { - theAutoAbilityKeys.put(aCategory, null); - return; - } - - } - /** - * TODO DOCUMENT ME! + * Retrieve the list of the keynames of any feats + * that the PC qualifies for at the supplied level and + * hit dice. * * @param level * TODO DOCUMENT ME! @@ -2169,70 +2058,6 @@ return feats; } - public List<String> getAutoAbilityKeys(final AbilityCategory aCategory, - final PlayerCharacter aPC, final boolean addNew) - { - if (aCategory == AbilityCategory.FEAT) - { - return this.feats(aPC.getTotalLevels(), aPC.totalHitDice(), aPC, - addNew); - } - - List<String> ret = null; - - if (theAutoAbilityKeys != null) - { - ret = theAutoAbilityKeys.get(aCategory); - } - if (ret == null) - { - ret = new ArrayList<String>(); - } - - // Add all the abilities we have already chosen - if (theChosenAbilityKeys != null) - { - final Map<String, String> choices = theChosenAbilityKeys - .get(aCategory); - ret.addAll(choices.values()); - } - - if (theLevelAbilities != null) - { - for (int lvl = 0; lvl < aPC.getTotalLevels(); lvl++) - { - // TODO - Need to deal with this - final String abilityString = theLevelAbilities.get(lvl, - "ABILITY"); - if (abilityString != null) - { - this.getLevelAbility(abilityString, lvl, aPC); - } - } - } - - for (int x = 0; x < getListSize(hitDiceStrings); ++x) - { - final String featKey = "H" + Integer.toString(x); - String featName = null; - - if (chosenFeatStrings != null) - { - featName = chosenFeatStrings.get(featKey); - } - - if ((featName == null) && addNew) - { - if (doesHitDiceQualify(aPC.totalHitDice(), x)) - { - getLevelFeat(hitDiceStrings.get(x), -1, featKey, aPC); - } - } - } - - return ret; - } - /** * Set face * Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2007-01-03 07:49:14 UTC (rev 1869) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2007-01-03 07:53:55 UTC (rev 1870) @@ -973,7 +973,7 @@ // // Save level and hit dice abilities // - thisPCTemplate.addHitDiceString(".CLEAR"); + thisPCTemplate.clearHitDiceStrings(); thisPCTemplate.clearLevelAbilities(); sel = pnlLevelAbilities.getSelectedList(); Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java 2007-01-03 07:49:14 UTC (rev 1869) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java 2007-01-03 07:53:55 UTC (rev 1870) @@ -40,7 +40,7 @@ * @author David Rice <dav...@jc...> * @version $Revision$ */ -final class PCTemplateLoader +public final class PCTemplateLoader { /** Creates a new instance of PCTemplateLoader */ private PCTemplateLoader() Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/template/HdToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/template/HdToken.java 2007-01-03 07:49:14 UTC (rev 1869) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/template/HdToken.java 2007-01-03 07:53:55 UTC (rev 1870) @@ -1,7 +1,15 @@ package plugin.lsttokens.template; +import java.util.Map; +import java.util.StringTokenizer; + import pcgen.core.PCTemplate; +import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.LstToken; import pcgen.persistence.lst.PCTemplateLstToken; +import pcgen.persistence.lst.PObjectLoader; +import pcgen.persistence.lst.TokenStore; +import pcgen.util.Logging; /** * Class deals with HD Token @@ -9,14 +17,50 @@ public class HdToken implements PCTemplateLstToken { + /* (non-Javadoc) + * @see pcgen.persistence.lst.LstToken#getTokenName() + */ public String getTokenName() { return "HD"; } + /* (non-Javadoc) + * @see pcgen.persistence.lst.PCTemplateLstToken#parse(pcgen.core.PCTemplate, java.lang.String) + */ public boolean parse(PCTemplate template, String value) { - template.addHitDiceString(value); + if (".CLEAR".equals(value)) + { + template.clearHitDiceStrings(); + return true; + } + + StringTokenizer tok = new StringTokenizer(value, ":"); + String hdStr = tok.nextToken(); + String typeStr = tok.nextToken(); + Map<String, LstToken> tokenMap = + TokenStore.inst().getTokenMap(PCTemplateLstToken.class); + PCTemplateLstToken token = (PCTemplateLstToken) tokenMap.get(typeStr); + + if (token != null) + { + template.addHitDiceString(value); + } + else + { + String tagValue = + value.substring(hdStr.length() + 1) + "|PREHD:" + hdStr; + try + { + return PObjectLoader.parseTag(template, tagValue); + } + catch (PersistenceLayerException e) + { + Logging.errorPrint("Failed to parse " + value + ".", e); + return false; + } + } return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/template/LevelToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/template/LevelToken.java 2007-01-03 07:49:14 UTC (rev 1869) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/template/LevelToken.java 2007-01-03 07:53:55 UTC (rev 1870) @@ -1,21 +1,37 @@ package plugin.lsttokens.template; +import java.util.Map; import java.util.StringTokenizer; import pcgen.core.PCTemplate; +import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.LstToken; import pcgen.persistence.lst.PCTemplateLstToken; +import pcgen.persistence.lst.PObjectLoader; +import pcgen.persistence.lst.TokenStore; +import pcgen.util.Logging; /** * Class deals with LEVEL Token + * + * Last Editor: $Author$ + * Last Edited: $Date$ + * + * @version $Revision$ */ public class LevelToken implements PCTemplateLstToken { - + /* (non-Javadoc) + * @see pcgen.persistence.lst.LstToken#getTokenName() + */ public String getTokenName() { return "LEVEL"; } + /* (non-Javadoc) + * @see pcgen.persistence.lst.PCTemplateLstToken#parse(pcgen.core.PCTemplate, java.lang.String) + */ public boolean parse(PCTemplate template, String value) { if (".CLEAR".equals(value)) @@ -38,7 +54,27 @@ } final String typeStr = tok.nextToken(); - template.addLevelAbility(level, typeStr, tok.nextToken()); + Map<String, LstToken> tokenMap = + TokenStore.inst().getTokenMap(PCTemplateLstToken.class); + PCTemplateLstToken token = (PCTemplateLstToken) tokenMap.get(typeStr); + + if (token != null) + { + template.addLevelAbility(level, typeStr, tok.nextToken()); + } + else + { + String tagValue = value.substring(levelStr.length() + 1); + try + { + return PObjectLoader.parseTagLevel(template, tagValue, level); + } + catch (PersistenceLayerException e) + { + Logging.errorPrint("Failed to parse " + value + ".", e); + return false; + } + } return true; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |