From: <jde...@us...> - 2010-12-27 22:41:12
|
Revision: 14252 http://pcgen.svn.sourceforge.net/pcgen/?rev=14252&view=rev Author: jdempsey Date: 2010-12-27 22:41:05 +0000 (Mon, 27 Dec 2010) Log Message: ----------- Fix bug: Conditional skills lose class skill status after reload of sources Issue#: CODE-186 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/cdom/facet/MasterSkillFacet.java Trunk/pcgen/code/src/java/pcgen/core/Globals.java Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillRankControl.java Modified: Trunk/pcgen/code/src/java/pcgen/cdom/facet/MasterSkillFacet.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/facet/MasterSkillFacet.java 2010-12-26 00:19:51 UTC (rev 14251) +++ Trunk/pcgen/code/src/java/pcgen/cdom/facet/MasterSkillFacet.java 2010-12-27 22:41:05 UTC (rev 14252) @@ -25,13 +25,30 @@ import pcgen.core.Globals; import pcgen.core.Skill; +/** + * The Class <code>MasterSkillFacet</code> caches a copy of all class skill + * lists. This allows faster checking of whether skills are class skills for + * a character class. + * + * <br/> + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author Tom Parker <th...@us...> + * @version $Revision: $ + */ public class MasterSkillFacet { private HashMapToList<ClassSkillList, Skill> hml; - private void initialize() + private synchronized void initialize() { + if (hml != null) + { + return; + } + hml = new HashMapToList<ClassSkillList, Skill>(); MasterListInterface masterLists = Globals.getMasterLists(); for (CDOMReference ref : masterLists.getActiveLists()) @@ -55,4 +72,12 @@ } return hml.containsInList(csl, sk); } + + /** + * Empty the stored master data. Used when reloading sources. + */ + public void emptyLists() + { + hml = null; + } } Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2010-12-26 00:19:51 UTC (rev 14251) +++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2010-12-27 22:41:05 UTC (rev 14252) @@ -69,6 +69,8 @@ import pcgen.cdom.enumeration.SourceFormat; import pcgen.cdom.enumeration.StringKey; import pcgen.cdom.enumeration.Type; +import pcgen.cdom.facet.FacetLibrary; +import pcgen.cdom.facet.MasterSkillFacet; import pcgen.cdom.list.CompanionList; import pcgen.core.analysis.SizeUtilities; import pcgen.core.character.CompanionMod; @@ -1730,6 +1732,8 @@ Equipment.clearEquipmentTypes(); PersistenceManager.getInstance().emptyLists(); SettingsHandler.getGame().clearLoadContext(); + FacetLibrary.getFacet(MasterSkillFacet.class).emptyLists(); + Pantheon.clearConstants(); RaceType.clearConstants(); Modified: Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillRankControl.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillRankControl.java 2010-12-26 00:19:51 UTC (rev 14251) +++ Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillRankControl.java 2010-12-27 22:41:05 UTC (rev 14252) @@ -81,8 +81,8 @@ if (!Globals.checkRule(RuleConstants.SKILLMAX) && pc.hasClass()) { /* - * TODO Why does this grab class #1 - doesn't that make this an - * error for multi-class characters? + * Note: The class grabbed doesn't matter - it is only used for calculating cross-class skill rank cost. + * All classes of a multi-class character are scanned to determine if the skill is a class skill. */ double maxRanks = pc.getMaxRank(sk, pc.getClassList().get(0)).doubleValue(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |