From: <ste...@us...> - 2010-08-28 16:58:06
|
Revision: 1407 http://rails.svn.sourceforge.net/rails/?rev=1407&view=rev Author: stefanfrey Date: 2010-08-28 16:57:59 +0000 (Sat, 28 Aug 2010) Log Message: ----------- - Fix of 18AL coalfield token bug: The bonus was not correctly removed at phase 6. - Also changed Set of revenue modifiers to stateful lists. Modified Paths: -------------- trunk/18xx/rails/algorithms/RevenueManager.java trunk/18xx/rails/game/Bonus.java trunk/18xx/rails/game/PublicCompany.java trunk/18xx/rails/game/move/RemoveFromList.java Added Paths: ----------- trunk/18xx/rails/game/state/HashSetState.java Modified: trunk/18xx/rails/algorithms/RevenueManager.java =================================================================== --- trunk/18xx/rails/algorithms/RevenueManager.java 2010-08-22 20:48:44 UTC (rev 1406) +++ trunk/18xx/rails/algorithms/RevenueManager.java 2010-08-28 16:57:59 UTC (rev 1407) @@ -10,6 +10,7 @@ import rails.game.ConfigurableComponentI; import rails.game.ConfigurationException; import rails.game.GameManagerI; +import rails.game.state.HashSetState; import rails.util.LocalText; import rails.util.Tag; @@ -29,15 +30,15 @@ Logger.getLogger(RevenueManager.class.getPackage().getName()); - private final Set<NetworkGraphModifier> graphModifiers; - private final Set<RevenueStaticModifier> staticModifiers; - private final Set<RevenueDynamicModifier> dynamicModifiers; - private final Set<ConfigurableComponentI> configurableModifiers; + private final HashSetState<NetworkGraphModifier> graphModifiers; + private final HashSetState<RevenueStaticModifier> staticModifiers; + private final HashSetState<RevenueDynamicModifier> dynamicModifiers; + private final HashSet<ConfigurableComponentI> configurableModifiers; public RevenueManager() { - graphModifiers = new HashSet<NetworkGraphModifier>(); - staticModifiers = new HashSet<RevenueStaticModifier>(); - dynamicModifiers = new HashSet<RevenueDynamicModifier>(); + graphModifiers = new HashSetState<NetworkGraphModifier>("NetworkGraphModifiers"); + staticModifiers = new HashSetState<RevenueStaticModifier>("RevenueStaticModifiers"); + dynamicModifiers = new HashSetState<RevenueDynamicModifier>("RevenueDynamicModifiers"); configurableModifiers = new HashSet<ConfigurableComponentI>(); } @@ -144,20 +145,20 @@ } void callGraphModifiers(NetworkGraphBuilder graphBuilder) { - for (NetworkGraphModifier modifier:graphModifiers) { + for (NetworkGraphModifier modifier:graphModifiers.viewSet()) { modifier.modifyGraph(graphBuilder); } } void callStaticModifiers(RevenueAdapter revenueAdapter) { - for (RevenueStaticModifier modifier:staticModifiers) { + for (RevenueStaticModifier modifier:staticModifiers.viewSet()) { modifier.modifyCalculator(revenueAdapter); } } Set<RevenueDynamicModifier> callDynamicModifiers(RevenueAdapter revenueAdapter) { Set<RevenueDynamicModifier> activeModifiers = new HashSet<RevenueDynamicModifier>(); - for (RevenueDynamicModifier modifier:dynamicModifiers) { + for (RevenueDynamicModifier modifier:dynamicModifiers.viewSet()) { if (modifier.prepareModifier(revenueAdapter)) activeModifiers.add(modifier); } Modified: trunk/18xx/rails/game/Bonus.java =================================================================== --- trunk/18xx/rails/game/Bonus.java 2010-08-22 20:48:44 UTC (rev 1406) +++ trunk/18xx/rails/game/Bonus.java 2010-08-28 16:57:59 UTC (rev 1407) @@ -40,8 +40,8 @@ // add them to the call list of the RevenueManager GameManager.getInstance().getRevenueManager().addStaticModifier(this); - } + } public boolean isExecutionable() { return false; } @@ -77,38 +77,15 @@ } /** - * Remove the token. + * Remove the bonus * This method can be called by a certain phase when it starts. * See prepareForRemovel(). */ public void close() { - owner.removeBonus(name); - // remove it from the call list of the RevenueManager GameManager.getInstance().getRevenueManager().removeStaticModifier(this); } - /** - * Prepare the bonus token for removal, if so configured. - * The only case currently implemented to trigger removal - * is the start of a given phase. - */ - public void prepareForRemoval (PhaseManager phaseManager) { - - if (removingObjectDesc == null) return; - - if (removingObject == null) { - String[] spec = removingObjectDesc.split(":"); - if (spec[0].equalsIgnoreCase("Phase")) { - removingObject = - phaseManager.getPhaseByName(spec[1]); - } - } - - if (removingObject instanceof Phase) { - ((Phase) removingObject).addObjectToClose(this); - } - } - + public boolean equals (Bonus b) { return (b.name.equals(name)) && b.value == value; Modified: trunk/18xx/rails/game/PublicCompany.java =================================================================== --- trunk/18xx/rails/game/PublicCompany.java 2010-08-22 20:48:44 UTC (rev 1406) +++ trunk/18xx/rails/game/PublicCompany.java 2010-08-28 16:57:59 UTC (rev 1407) @@ -1755,6 +1755,7 @@ } public boolean removeBonus(Bonus bonus) { + bonus.close(); // close the bonus new RemoveFromList<Bonus> (bonuses, bonus, name+"_Bonuses", bonusValue); return true; } Modified: trunk/18xx/rails/game/move/RemoveFromList.java =================================================================== --- trunk/18xx/rails/game/move/RemoveFromList.java 2010-08-22 20:48:44 UTC (rev 1406) +++ trunk/18xx/rails/game/move/RemoveFromList.java 2010-08-28 16:57:59 UTC (rev 1407) @@ -37,12 +37,14 @@ @Override public boolean execute() { list.remove(object); + updateModels(); return true; } @Override public boolean undo() { list.add(index, object); + updateModels(); return true; } Added: trunk/18xx/rails/game/state/HashSetState.java =================================================================== --- trunk/18xx/rails/game/state/HashSetState.java (rev 0) +++ trunk/18xx/rails/game/state/HashSetState.java 2010-08-28 16:57:59 UTC (rev 1407) @@ -0,0 +1,69 @@ +package rails.game.state; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import rails.game.move.SetChange; +/** + * State class that wraps a HashSet + * Generates according set moves + * + * Remark: Does not extend State or implements StateI do avoid additional overhead + * All state/move mechanisms already contained in Move objects + * + * TODO: Replace all stateful sets by this class and simplify according move objects + */ +public class HashSetState<E> { + + private final HashSet<E> set = new HashSet<E>(); + private final String setName; + + /** + * constructor for an empty set + * @param name + */ + public HashSetState(String setName) { + this.setName = setName; + } + /** + * constructor for a prefilled set + * @param element + */ + public HashSetState(String setName, Collection<E> collection) { + this(setName); + set.addAll(collection); + } + + public void add(E element) { + new SetChange<E>(set, element, true); + } + + public boolean remove(E element) { + if (set.contains(element)) { + new SetChange<E>(set, element, false); + return true; + } else { + return false; + } + } + + public void clear() { + for (E element:set) { + remove(element); + } + } + + /** + * returns unmodifiable view of set + */ + public Set<E> viewSet() { + return Collections.unmodifiableSet(set); + } + + public int size() { + return set.size(); + } + +} Property changes on: trunk/18xx/rails/game/state/HashSetState.java ___________________________________________________________________ Added: svn:mime-type + text/plain This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |