toolstroke: layRoad: convert to use ToolEffect
git-svn-id: https://micropolis.googlecode.com/svn/trunk/micropolis-java@637 d9718cc8-9f43-0410-858b-315f434eb58c
This commit is contained in:
parent
5c85cd0a64
commit
81bc4319b3
1 changed files with 29 additions and 31 deletions
|
@ -114,9 +114,10 @@ class RoadLikeTool extends ToolStroke
|
||||||
{
|
{
|
||||||
assert city.testBounds(xpos, ypos);
|
assert city.testBounds(xpos, ypos);
|
||||||
|
|
||||||
ToolResult result = layRoad(xpos, ypos);
|
ToolEffect eff = new ToolEffect(city, xpos, ypos);
|
||||||
fixZone(xpos, ypos);
|
layRoad(eff);
|
||||||
return result == ToolResult.SUCCESS;
|
fixZone(eff);
|
||||||
|
return eff.apply() == ToolResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean applyWireTool(int xpos, int ypos)
|
boolean applyWireTool(int xpos, int ypos)
|
||||||
|
@ -235,16 +236,14 @@ class RoadLikeTool extends ToolStroke
|
||||||
return ToolResult.SUCCESS;
|
return ToolResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ToolResult layRoad(int xpos, int ypos)
|
private void layRoad(ToolEffectIfc eff)
|
||||||
{
|
{
|
||||||
final int ROAD_COST = 10;
|
final int ROAD_COST = 10;
|
||||||
final int BRIDGE_COST = 50;
|
final int BRIDGE_COST = 50;
|
||||||
|
|
||||||
int cost = ROAD_COST;
|
int cost = ROAD_COST;
|
||||||
if (city.budget.totalFunds < cost)
|
|
||||||
return ToolResult.INSUFFICIENT_FUNDS;
|
|
||||||
|
|
||||||
char tile = (char) (city.getTile(xpos, ypos) & LOMASK);
|
char tile = (char) (eff.getTile(0, 0) & LOMASK);
|
||||||
switch (tile)
|
switch (tile)
|
||||||
{
|
{
|
||||||
case RIVER: // road on water
|
case RIVER: // road on water
|
||||||
|
@ -252,74 +251,72 @@ class RoadLikeTool extends ToolStroke
|
||||||
case CHANNEL: // check how to build bridges, if possible.
|
case CHANNEL: // check how to build bridges, if possible.
|
||||||
|
|
||||||
cost = BRIDGE_COST;
|
cost = BRIDGE_COST;
|
||||||
if (city.budget.totalFunds < cost)
|
|
||||||
return ToolResult.INSUFFICIENT_FUNDS;
|
|
||||||
|
|
||||||
if (xpos + 1 < city.getWidth())
|
// check east
|
||||||
{
|
{
|
||||||
char eTile = neutralizeRoad(city.getTile(xpos + 1, ypos));
|
char eTile = neutralizeRoad(eff.getTile(1, 0));
|
||||||
if (eTile == VRAILROAD ||
|
if (eTile == VRAILROAD ||
|
||||||
eTile == HBRIDGE ||
|
eTile == HBRIDGE ||
|
||||||
(eTile >= TileConstants.ROADS && eTile <= HROADPOWER))
|
(eTile >= TileConstants.ROADS && eTile <= HROADPOWER))
|
||||||
{
|
{
|
||||||
city.setTile(xpos, ypos, (char) (HBRIDGE | BULLBIT));
|
eff.setTile(0, 0, (char) (HBRIDGE | BULLBIT));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xpos > 0)
|
// check west
|
||||||
{
|
{
|
||||||
char wTile = neutralizeRoad(city.getTile(xpos - 1, ypos));
|
char wTile = neutralizeRoad(eff.getTile(-1, 0));
|
||||||
if (wTile == VRAILROAD ||
|
if (wTile == VRAILROAD ||
|
||||||
wTile == HBRIDGE ||
|
wTile == HBRIDGE ||
|
||||||
(wTile >= TileConstants.ROADS && wTile <= INTERSECTION))
|
(wTile >= TileConstants.ROADS && wTile <= INTERSECTION))
|
||||||
{
|
{
|
||||||
city.setTile(xpos, ypos, (char) (HBRIDGE | BULLBIT));
|
eff.setTile(0, 0, (char) (HBRIDGE | BULLBIT));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ypos + 1 < city.getHeight())
|
// check south
|
||||||
{
|
{
|
||||||
char sTile = neutralizeRoad(city.getTile(xpos, ypos + 1));
|
char sTile = neutralizeRoad(eff.getTile(0, 1));
|
||||||
if (sTile == HRAILROAD ||
|
if (sTile == HRAILROAD ||
|
||||||
sTile == VROADPOWER ||
|
sTile == VROADPOWER ||
|
||||||
(sTile >= VBRIDGE && sTile <= INTERSECTION))
|
(sTile >= VBRIDGE && sTile <= INTERSECTION))
|
||||||
{
|
{
|
||||||
city.setTile(xpos, ypos, (char) (VBRIDGE | BULLBIT));
|
eff.setTile(0, 0, (char) (VBRIDGE | BULLBIT));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ypos > 0)
|
// check north
|
||||||
{
|
{
|
||||||
char nTile = neutralizeRoad(city.getTile(xpos, ypos - 1));
|
char nTile = neutralizeRoad(eff.getTile(0, -1));
|
||||||
if (nTile == HRAILROAD ||
|
if (nTile == HRAILROAD ||
|
||||||
nTile == VROADPOWER ||
|
nTile == VROADPOWER ||
|
||||||
(nTile >= VBRIDGE && nTile <= INTERSECTION))
|
(nTile >= VBRIDGE && nTile <= INTERSECTION))
|
||||||
{
|
{
|
||||||
city.setTile(xpos, ypos, (char) (VBRIDGE | BULLBIT));
|
eff.setTile(0, 0, (char) (VBRIDGE | BULLBIT));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// cannot do road here
|
// cannot do road here
|
||||||
return ToolResult.NONE;
|
return;
|
||||||
|
|
||||||
case LHPOWER: //road on power
|
case LHPOWER: //road on power
|
||||||
city.setTile(xpos, ypos, (char) (VROADPOWER | CONDBIT | BURNBIT | BULLBIT));
|
eff.setTile(0, 0, (char) (VROADPOWER | CONDBIT | BURNBIT | BULLBIT));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LVPOWER: //road on power #2
|
case LVPOWER: //road on power #2
|
||||||
city.setTile(xpos, ypos, (char) (HROADPOWER | CONDBIT | BURNBIT | BULLBIT));
|
eff.setTile(0, 0, (char) (HROADPOWER | CONDBIT | BURNBIT | BULLBIT));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LHRAIL: //road on rail
|
case LHRAIL: //road on rail
|
||||||
city.setTile(xpos, ypos, (char) (HRAILROAD | BURNBIT | BULLBIT));
|
eff.setTile(0, 0, (char) (HRAILROAD | BURNBIT | BULLBIT));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LVRAIL: //road on rail #2
|
case LVRAIL: //road on rail #2
|
||||||
city.setTile(xpos, ypos, (char) (VRAILROAD | BURNBIT | BULLBIT));
|
eff.setTile(0, 0, (char) (VRAILROAD | BURNBIT | BULLBIT));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -329,17 +326,18 @@ class RoadLikeTool extends ToolStroke
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// cannot do road here
|
// cannot do road here
|
||||||
return ToolResult.NONE;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// road on dirt
|
// road on dirt;
|
||||||
city.setTile(xpos, ypos, (char) (TileConstants.ROADS | BULLBIT | BURNBIT));
|
// just build a plain road, fixZone will fix it.
|
||||||
|
eff.setTile(0, 0, (char) (TileConstants.ROADS | BULLBIT | BURNBIT));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
city.spend(cost);
|
eff.spend(cost);
|
||||||
return ToolResult.SUCCESS;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ToolResult layWire(int xpos, int ypos)
|
private ToolResult layWire(int xpos, int ypos)
|
||||||
|
|
Reference in a new issue