|
From: <mp...@us...> - 2012-01-20 07:52:51
|
Revision: 9567
http://freecol.svn.sourceforge.net/freecol/?rev=9567&view=rev
Author: mpope
Date: 2012-01-20 07:52:43 +0000 (Fri, 20 Jan 2012)
Log Message:
-----------
Move role equipment code out of ColonyPlan, it will be needed.
Modified Paths:
--------------
freecol/trunk/src/net/sf/freecol/common/model/Unit.java
freecol/trunk/src/net/sf/freecol/server/ai/ColonyPlan.java
Modified: freecol/trunk/src/net/sf/freecol/common/model/Unit.java
===================================================================
--- freecol/trunk/src/net/sf/freecol/common/model/Unit.java 2012-01-20 07:50:33 UTC (rev 9566)
+++ freecol/trunk/src/net/sf/freecol/common/model/Unit.java 2012-01-20 07:52:43 UTC (rev 9567)
@@ -22,6 +22,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -100,6 +101,56 @@
public static enum Role {
DEFAULT, PIONEER, MISSIONARY, SOLDIER, SCOUT, DRAGOON;
+ // Equipment types needed for certain roles.
+ private static final HashMap<Role, List<EquipmentType>> roleEquipment
+ = new HashMap<Role, List<EquipmentType>>();
+
+ /**
+ * Initializes roleEquipment. How about that.
+ */
+ private void initializeRoleEquipment(Specification spec) {
+ if (!roleEquipment.isEmpty()) return;
+ UnitType defaultUnit = spec.getDefaultUnitType();
+ for (EquipmentType e : spec.getEquipmentTypeList()) {
+ Boolean b = e.getUnitAbilitiesRequired()
+ .get("model.ability.bornInIndianSettlement");
+ if (b != null && b.booleanValue()) continue;
+ Role r = e.getRole();
+ if (r != null) {
+ List<EquipmentType> eq = roleEquipment.get(r);
+ if (eq == null) eq = new ArrayList<EquipmentType>();
+ eq.add(e);
+ roleEquipment.put(r, eq);
+ }
+ }
+ // TODO: Not quite completely generic yet. There are more
+ // equipment types that are compatible with the soldier role.
+ // The spec expresses this with <compatible-equipment> but
+ // it does not express that while muskets and horses are compatible
+ // for a soldier, they are not for a scout.
+ for (EquipmentType e : spec.getEquipmentTypeList()) {
+ if (!e.isMilitaryEquipment()) continue;
+ Boolean b = e.getUnitAbilitiesRequired()
+ .get("model.ability.bornInIndianSettlement");
+ if (b != null && b.booleanValue()) continue;
+ List<EquipmentType> eq = roleEquipment.get(Role.SOLDIER);
+ if (!eq.contains(e)) eq.add(e);
+ }
+ }
+
+ /**
+ * Gets the equipment required for this role.
+ * TODO: passing the spec in is a wart.
+ *
+ * @param spec The <code>Specification</code> to extract requirements
+ * from.
+ * @return A list of required <code>EquipmentType</code>s.
+ */
+ public List<EquipmentType> getRoleEquipment(Specification spec) {
+ initializeRoleEquipment(spec);
+ return roleEquipment.get(this);
+ }
+
public boolean isCompatibleWith(Role oldRole) {
return (this == oldRole) ||
(this == SOLDIER && oldRole == DRAGOON) ||
Modified: freecol/trunk/src/net/sf/freecol/server/ai/ColonyPlan.java
===================================================================
--- freecol/trunk/src/net/sf/freecol/server/ai/ColonyPlan.java 2012-01-20 07:50:33 UTC (rev 9566)
+++ freecol/trunk/src/net/sf/freecol/server/ai/ColonyPlan.java 2012-01-20 07:52:43 UTC (rev 9567)
@@ -184,11 +184,7 @@
private final List<GoodsType> otherRawGoodsTypes
= new ArrayList<GoodsType>();
- // Equipment types needed for certain roles.
- private static final Map<Role, List<EquipmentType>> roleEquipment
- = new HashMap<Role, List<EquipmentType>>();
-
/**
* Creates a new <code>ColonyPlan</code>.
*
@@ -203,7 +199,6 @@
this.colony = colony;
this.profileType = ProfileType
.getProfileTypeFromSize(colony.getUnitCount());
- initializeRoleEquipment();
}
/**
@@ -216,43 +211,9 @@
public ColonyPlan(AIMain aiMain, Element element) {
this.aiMain = aiMain;
readFromXMLElement(element);
- initializeRoleEquipment();
}
/**
- * Initializes roleEquipment. How about that.
- */
- private void initializeRoleEquipment() {
- if (!roleEquipment.isEmpty()) return;
- UnitType defaultUnit = spec().getDefaultUnitType();
- for (EquipmentType e : spec().getEquipmentTypeList()) {
- Boolean b = e.getUnitAbilitiesRequired()
- .get("model.ability.bornInIndianSettlement");
- if (b != null && b.booleanValue()) continue;
- Role r = e.getRole();
- if (r != null) {
- List<EquipmentType> eq = roleEquipment.get(r);
- if (eq == null) eq = new ArrayList<EquipmentType>();
- eq.add(e);
- roleEquipment.put(r, eq);
- }
- }
- // TODO: Not quite completely generic yet. There are more
- // equipment types that are compatible with the soldier role.
- // The spec expresses this with <compatible-equipment> but
- // it does not express that while muskets and horses are compatible
- // for a soldier, they are not for a scout.
- for (EquipmentType e : spec().getEquipmentTypeList()) {
- if (!e.isMilitaryEquipment()) continue;
- Boolean b = e.getUnitAbilitiesRequired()
- .get("model.ability.bornInIndianSettlement");
- if (b != null && b.booleanValue()) continue;
- List<EquipmentType> eq = roleEquipment.get(Role.SOLDIER);
- if (!eq.contains(e)) eq.add(e);
- }
- }
-
- /**
* Gets the main AI-object.
*
* @return The main AI-object.
@@ -1113,7 +1074,7 @@
* @return True if the unit was equipped.
*/
private boolean equipUnit(Unit unit, Role role, Colony colony) {
- List<EquipmentType> equipment = roleEquipment.get(role);
+ List<EquipmentType> equipment = role.getRoleEquipment(spec());
if (equipment == null || equipment.isEmpty()) return false;
EquipmentType type = equipment.get(0);
if (!unit.isPerson()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|