@Override public boolean setLocation(StateInfo stateInfo, Location location, StringBuffer sb) { if (testLocation(stateInfo, location, sb)) { currentLocNum++; src = new Location(location.getProvince(), location.getCoast()); power = stateInfo.getPosition().getSupplyCenterOwner(location.getProvince()); // srcUnitType: already defined assert (srcUnitType != null); sb.setLength(0); sb.append(Utils.getLocalString(GUIOrder.COMPLETE, getFullName())); return true; } return false; } // setLocation()
@Override public boolean testLocation(StateInfo stateInfo, Location location, StringBuffer sb) { sb.setLength(0); if (isComplete()) { sb.append(Utils.getLocalString(GUIOrder.COMPLETE, getFullName())); return false; } Position position = stateInfo.getPosition(); Province province = location.getProvince(); if (province.hasSupplyCenter()) { Power SCOwner = position.getSupplyCenterOwner(province); // general screening, applicable to all build options // if (SCOwner == null) { sb.append(Utils.getLocalString(NOBUILD_UNOWNED_SC)); return false; } if (position.hasUnit(province)) { sb.append(Utils.getLocalString(NOBUILD_UNIT_PRESENT)); return false; } if (!stateInfo.canIssueOrder(SCOwner)) { sb.append(Utils.getLocalString(NOBUILD_SC_NOT_CONTROLLED)); return false; } // indicate if we have no builds available // Adjustment.AdjustmentInfo adjInfo = stateInfo.getAdjustmenInfoMap().get(SCOwner); if (adjInfo.getAdjustmentAmount() <= 0) { sb.append(Utils.getLocalString(NOBUILD_NO_BUILDS_AVAILABLE, SCOwner.getName())); return false; } // build-option-specific, based upon RuleOptions // RuleOptions ruleOpts = stateInfo.getRuleOptions(); if (ruleOpts.getOptionValue(RuleOptions.OPTION_BUILDS) == RuleOptions.VALUE_BUILDS_ANY_OWNED) { return checkBuildUnit(stateInfo, province, location, sb); } else if (ruleOpts.getOptionValue(RuleOptions.OPTION_BUILDS) == RuleOptions.VALUE_BUILDS_ANY_IF_HOME_OWNED) { // check if we have ONE owned home supply center before buidling // in a non-home supply center. // if (SCOwner != position.getSupplyCenterHomePower(province) && !position.hasAnOwnedHomeSC(SCOwner)) { sb.append(Utils.getLocalString(NOBUILD_NEED_ONE_OWNED_SC)); return false; // failed } // we (probably) can build here return checkBuildUnit(stateInfo, province, location, sb); } else { // build only in owned HOME supply centers // if (SCOwner == position.getSupplyCenterHomePower(province)) { // we (probably) can build here return checkBuildUnit(stateInfo, province, location, sb); } // build failure. sb.append(Utils.getLocalString(NOBUILD_NOT_OWNED_HOME_SC)); return false; } } else { sb.append(Utils.getLocalString(NOBUILD_MUST_BE_AN_OWNED_SC)); return false; } // NO return here: thus we must appropriately exit within an if/else block above. } // testLocation()