From: <nu...@us...> - 2006-03-31 18:48:33
|
Revision: 544 Author: nuance Date: 2006-03-31 10:48:13 -0800 (Fri, 31 Mar 2006) ViewCVS: http://svn.sourceforge.net/pcgen/?rev=544&view=rev Log Message: ----------- [ 1280838 ] VFEAT not applying feats with choices Fixed the broken syntax. The feat is now being added corrctly but is not applying it's benefits. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/utils/FeatParserTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java 2006-03-31 16:33:42 UTC (rev 543) +++ Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java 2006-03-31 18:48:13 UTC (rev 544) @@ -34,7 +34,6 @@ import pcgen.util.Logging; import java.util.ArrayList; -import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; @@ -248,20 +247,10 @@ final PCLevelInfo levelInfo, PlayerCharacter aPC) { - Ability anAbility = Globals.getAbilityNamed("FEAT", featName); - List choices = null; + ArrayList choices = new ArrayList(); + String abilityName = EquipmentUtilities.getUndecoratedName(featName, choices); + Ability anAbility = Globals.getAbilityNamed("FEAT", abilityName); - if (!anAbility.getName().equalsIgnoreCase(featName)) - { - final int i = featName.indexOf('('); - final int j = featName.indexOf(')'); - - if ((i >= 0) && (j >= 0)) - { - choices = Arrays.asList(featName.substring(i + 1, j).split(",")); - } - } - return addVirtualFeat(anAbility, choices, addList, aPC, levelInfo); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java 2006-03-31 16:33:42 UTC (rev 543) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java 2006-03-31 18:48:13 UTC (rev 544) @@ -29,6 +29,7 @@ package pcgen.persistence.lst.utils; import pcgen.core.Ability; +import pcgen.core.EquipmentUtilities; import pcgen.core.Globals; import pcgen.core.prereq.Prerequisite; import pcgen.persistence.PersistenceLayerException; @@ -73,8 +74,9 @@ } else { - // We have a feat name - Ability anAbility = Globals.getAbilityNamed("FEAT", aPart); + ArrayList choices = new ArrayList(); + String abilityName = EquipmentUtilities.getUndecoratedName(aPart, choices); + Ability anAbility = Globals.getAbilityNamed("FEAT", abilityName); if (anAbility != null) { @@ -82,31 +84,10 @@ anAbility.setFeatType(Ability.ABILITY_VIRTUAL); anAbility.clearPreReq(); - // - // Check for crazy things like: - // Weapon Finesse (Claw, Bite) - // Which means add the Weapon Finesse - // feat and apply to Claw and Bite - // - if (!anAbility.getName().equalsIgnoreCase(aPart)) - { - final int i = aPart.indexOf('('); - final int j = aPart.indexOf(')'); - - if ((i >= 0) && (j >= 0)) - { - final StringTokenizer bTok = new StringTokenizer(aPart.substring(i + 1, j), ","); - - while (bTok.hasMoreTokens()) - { - final String a = bTok.nextToken(); - - if (!anAbility.containsAssociated(a)) - { - anAbility.addAssociated(a); - } - } - } + Iterator choiceIt = choices.iterator(); + + while (choiceIt.hasNext()) { + anAbility.addAssociated((String) choiceIt.next()); } aList.add(anAbility); @@ -116,9 +97,9 @@ if ((preString.length() > 0) && !aList.isEmpty()) { - for (Iterator e = aList.iterator(); e.hasNext();) + for (Iterator abilityIt = aList.iterator(); abilityIt.hasNext();) { - Ability anAbility = (Ability) e.next(); + Ability anAbility = (Ability) abilityIt.next(); try { Modified: Trunk/pcgen/code/src/test/pcgen/persistence/lst/utils/FeatParserTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/persistence/lst/utils/FeatParserTest.java 2006-03-31 16:33:42 UTC (rev 543) +++ Trunk/pcgen/code/src/test/pcgen/persistence/lst/utils/FeatParserTest.java 2006-03-31 18:48:13 UTC (rev 544) @@ -27,6 +27,7 @@ import pcgen.core.Globals; import pcgen.core.prereq.Prerequisite; import pcgen.core.prereq.PrerequisiteOperator; +import pcgen.util.TestHelper; /** */ @@ -102,4 +103,22 @@ "", prereq.toString()); } + /** + * testParseVirtualFeatList3 + */ + public void testParseVirtualFeatList3() { + TestHelper.makeAbility("Two Weapon Fighting", "FEAT", "Fighter"); + TestHelper.makeAbility("Weapon Finesse", "FEAT", "Fighter"); + TestHelper.makeAbility("Random Ability 1", "FEAT", "Fighter"); + TestHelper.makeAbility("Random Ability 1", "FEAT", "Fighter"); + + List feats = FeatParser.parseVirtualFeatList("Two Weapon Fighting|Weapon Finesse (Bite, Claws)"); + is(new Integer(feats.size()), eq(2), "size of list"); + + is(((Ability)feats.get(0)).getName(), strEq("Two Weapon Fighting"), "First feat is correct"); + is(((Ability)feats.get(1)).getName(), strEq("Weapon Finesse"), "Second feat is correct"); + + is(((Ability)feats.get(1)).getAssociated(0), strEq("Bite"), "First choice is correct"); + is(((Ability)feats.get(1)).getAssociated(1), strEq("Claws"), "Second choice is correct"); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |