|
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.
|