From: Stian G. <sti...@us...> - 2006-04-09 13:41:39
|
Update of /cvsroot/freecol/freecol/src/net/sf/freecol/common/model In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22767/src/net/sf/freecol/common/model Modified Files: Unit.java Log Message: Fixes an AI-related bug which caused some carriers to remain in America when they really should be going to Europe. The AI now gets some extras when playing in singleplayer mode. Index: Unit.java =================================================================== RCS file: /cvsroot/freecol/freecol/src/net/sf/freecol/common/model/Unit.java,v retrieving revision 1.134 retrieving revision 1.135 diff -C2 -d -r1.134 -r1.135 *** Unit.java 7 Apr 2006 10:14:59 -0000 1.134 --- Unit.java 9 Apr 2006 13:41:32 -0000 1.135 *************** *** 2231,2234 **** --- 2231,2260 ---- } + /** + * Checks if this <code>Unit</code> can be moved to Europe. + * @return <code>true</code> if this unit is adjacent to + * a <code>Tile</code> of type {@link Tile#HIGH_SEAS}. + */ + public boolean canMoveToEurope() { + if (getLocation() instanceof Europe) { + return true; + } + if (!getOwner().canMoveToEurope()) { + return false; + } + + Vector surroundingTiles = getGame().getMap().getSurroundingTiles(getTile(), 1); + if (surroundingTiles.size() != 8) { + return true; + } else { + for (int i=0; i<surroundingTiles.size(); i++) { + Tile tile = (Tile) surroundingTiles.get(i); + if (tile == null || tile.getType() == Tile.HIGH_SEAS) { + return true; + } + } + } + return false; + } /** *************** *** 2237,2262 **** */ public void moveToEurope() { - // Check if this move is illegal or not: ! if (!(getLocation() instanceof Europe)) { ! boolean ok = false; ! ! Vector surroundingTiles = getGame().getMap().getSurroundingTiles(getTile(), 1); ! if (surroundingTiles.size() != 8) { ! ok = true; ! } else { ! for (int i=0; i<surroundingTiles.size(); i++) { ! Tile tile = (Tile) surroundingTiles.get(i); ! if (tile == null || tile.getType() == Tile.HIGH_SEAS) { ! ok = true; ! break; ! } ! } ! } ! ! if (!ok) { ! throw new IllegalStateException("It is not allowed to move units to europe from the tile where this unit is located."); ! } ! setEntryLocation(getLocation()); } --- 2263,2270 ---- */ public void moveToEurope() { // Check if this move is illegal or not: ! if (!canMoveToEurope()) { ! throw new IllegalStateException("It is not allowed to move units to europe from the tile where this unit is located."); ! } else { setEntryLocation(getLocation()); } |