toolstroke: convert fixSingle to use ToolEffect class

git-svn-id: https://micropolis.googlecode.com/svn/trunk/micropolis-java@633 d9718cc8-9f43-0410-858b-315f434eb58c
This commit is contained in:
jason@long.name 2013-05-16 23:42:30 +00:00
parent eb63e3817a
commit 00738461cb

View file

@ -446,12 +446,14 @@ public class ToolStroke
return eff.apply(); return eff.apply();
} }
static char neutralizeRoad(char tile) // checks whether the tile value represents road with traffic
// and if so converts it to the equivalent road without traffic.
static char neutralizeRoad(int tile)
{ {
tile &= LOMASK; tile &= LOMASK;
if (tile >= 64 && tile <= 207) if (tile >= 64 && tile <= 207)
tile = (char)( (tile & 0xf) + 64 ); tile = (char)( (tile & 0xf) + 64 );
return tile; return (char)tile;
} }
protected void fixZone(int xpos, int ypos) protected void fixZone(int xpos, int ypos)
@ -469,7 +471,9 @@ public class ToolStroke
private void fixSingle(int xpos, int ypos) private void fixSingle(int xpos, int ypos)
{ {
char tile = (char) (city.getTile(xpos, ypos) & LOMASK); ToolEffect eff = new ToolEffect(city, xpos, ypos);
int tile = (eff.getTile(0, 0) & LOMASK);
tile = neutralizeRoad(tile); tile = neutralizeRoad(tile);
if (tile >= TileConstants.ROADS && tile <= INTERSECTION) if (tile >= TileConstants.ROADS && tile <= INTERSECTION)
@ -477,9 +481,9 @@ public class ToolStroke
// cleanup road // cleanup road
int adjTile = 0; int adjTile = 0;
if (ypos > 0) // check road to north
{ {
tile = city.getTile(xpos, ypos - 1); tile = eff.getTile(0, -1);
tile = neutralizeRoad(tile); tile = neutralizeRoad(tile);
if (((tile == HRAILROAD) || if (((tile == HRAILROAD) ||
(tile >= ROADBASE && tile <= VROADPOWER) (tile >= ROADBASE && tile <= VROADPOWER)
@ -492,9 +496,9 @@ public class ToolStroke
} }
} }
if (xpos + 1 < city.getWidth()) // check road to east
{ {
tile = city.getTile(xpos + 1, ypos); tile = eff.getTile(1, 0);
tile = neutralizeRoad(tile); tile = neutralizeRoad(tile);
if (((tile == VRAILROAD) || if (((tile == VRAILROAD) ||
(tile >= ROADBASE && tile <= VROADPOWER) (tile >= ROADBASE && tile <= VROADPOWER)
@ -507,9 +511,9 @@ public class ToolStroke
} }
} }
if (ypos + 1 < city.getHeight()) // check road to south
{ {
tile = city.getTile(xpos, ypos + 1); tile = eff.getTile(0, 1);
tile = neutralizeRoad(tile); tile = neutralizeRoad(tile);
if (((tile == HRAILROAD) || if (((tile == HRAILROAD) ||
(tile >= ROADBASE && tile <= VROADPOWER) (tile >= ROADBASE && tile <= VROADPOWER)
@ -523,9 +527,9 @@ public class ToolStroke
} }
if (xpos > 0) // check road to west
{ {
tile = city.getTile(xpos - 1, ypos); tile = eff.getTile(-1, 0);
tile = neutralizeRoad(tile); tile = neutralizeRoad(tile);
if (((tile == VRAILROAD) || if (((tile == VRAILROAD) ||
(tile >= ROADBASE && tile <= VROADPOWER) (tile >= ROADBASE && tile <= VROADPOWER)
@ -538,18 +542,17 @@ public class ToolStroke
} }
} }
city.setTile(xpos, ypos, (char)(RoadTable[adjTile] | BULLBIT | BURNBIT)); eff.setTile(0, 0, (RoadTable[adjTile] | BULLBIT | BURNBIT));
return;
} //endif on a road tile } //endif on a road tile
if (tile >= LHRAIL && tile <= LVRAIL10) else if (tile >= LHRAIL && tile <= LVRAIL10)
{ {
// cleanup Rail // cleanup Rail
int adjTile = 0; int adjTile = 0;
if (ypos > 0) // check rail to north
{ {
tile = city.getTile(xpos, ypos - 1); tile = eff.getTile(0, -1);
tile = neutralizeRoad(tile); tile = neutralizeRoad(tile);
if (tile >= RAILHPOWERV && tile <= VRAILROAD && if (tile >= RAILHPOWERV && tile <= VRAILROAD &&
tile != RAILHPOWERV && tile != RAILHPOWERV &&
@ -560,9 +563,9 @@ public class ToolStroke
} }
} }
if (xpos + 1 < city.getWidth()) // check rail to east
{ {
tile = city.getTile(xpos + 1, ypos); tile = eff.getTile(1, 0);
tile = neutralizeRoad(tile); tile = neutralizeRoad(tile);
if (tile >= RAILHPOWERV && tile <= VRAILROAD && if (tile >= RAILHPOWERV && tile <= VRAILROAD &&
tile != RAILVPOWERH && tile != RAILVPOWERH &&
@ -573,9 +576,9 @@ public class ToolStroke
} }
} }
if (ypos + 1 < city.getHeight()) // check rail to south
{ {
tile = city.getTile(xpos, ypos + 1); tile = eff.getTile(0, 1);
tile = neutralizeRoad(tile); tile = neutralizeRoad(tile);
if (tile >= RAILHPOWERV && tile <= VRAILROAD && if (tile >= RAILHPOWERV && tile <= VRAILROAD &&
tile != RAILHPOWERV && tile != RAILHPOWERV &&
@ -586,9 +589,9 @@ public class ToolStroke
} }
} }
if (xpos > 0) // check rail to west
{ {
tile = city.getTile(xpos - 1, ypos); tile = eff.getTile(-1, 0);
tile = neutralizeRoad(tile); tile = neutralizeRoad(tile);
if (tile >= RAILHPOWERV && tile <= VRAILROAD && if (tile >= RAILHPOWERV && tile <= VRAILROAD &&
tile != RAILVPOWERH && tile != RAILVPOWERH &&
@ -599,18 +602,17 @@ public class ToolStroke
} }
} }
city.setTile(xpos, ypos, (char)(RailTable[adjTile] | BULLBIT | BURNBIT)); eff.setTile(0, 0, (RailTable[adjTile] | BULLBIT | BURNBIT));
return;
} //end if on a rail tile } //end if on a rail tile
if (tile >= LHPOWER && tile <= LVPOWER10) else if (tile >= LHPOWER && tile <= LVPOWER10)
{ {
// Cleanup Wire // Cleanup Wire
int adjTile = 0; int adjTile = 0;
if (ypos > 0) // check wire to north
{ {
tile = city.getTile(xpos, ypos - 1); tile = eff.getTile(0, -1);
char ntile = neutralizeRoad(tile); char ntile = neutralizeRoad(tile);
if ((tile & CONDBIT) != 0 && if ((tile & CONDBIT) != 0 &&
ntile != VPOWER && ntile != VPOWER &&
@ -621,9 +623,9 @@ public class ToolStroke
} }
} }
if (xpos + 1 < city.getWidth()) // check wire to east
{ {
tile = city.getTile(xpos + 1, ypos); tile = eff.getTile(1, 0);
char ntile = neutralizeRoad(tile); char ntile = neutralizeRoad(tile);
if ((tile & CONDBIT) != 0 && if ((tile & CONDBIT) != 0 &&
ntile != HPOWER && ntile != HPOWER &&
@ -634,9 +636,9 @@ public class ToolStroke
} }
} }
if (ypos + 1 < city.getHeight()) // check wire to south
{ {
tile = city.getTile(xpos, ypos + 1); tile = eff.getTile(0, 1);
char ntile = neutralizeRoad(tile); char ntile = neutralizeRoad(tile);
if ((tile & CONDBIT) != 0 && if ((tile & CONDBIT) != 0 &&
ntile != VPOWER && ntile != VPOWER &&
@ -647,9 +649,9 @@ public class ToolStroke
} }
} }
if (xpos > 0) // check wire to west
{ {
tile = city.getTile(xpos - 1, ypos); tile = eff.getTile(-1, 0);
char ntile = neutralizeRoad(tile); char ntile = neutralizeRoad(tile);
if ((tile & CONDBIT) != 0 && if ((tile & CONDBIT) != 0 &&
ntile != HPOWER && ntile != HPOWER &&
@ -660,9 +662,11 @@ public class ToolStroke
} }
} }
city.setTile(xpos, ypos, (char)(WireTable[adjTile] | BULLBIT | BURNBIT | CONDBIT)); eff.setTile(0, 0, (WireTable[adjTile] | BULLBIT | BURNBIT | CONDBIT));
return;
} //end if on a rail tile } //end if on a rail tile
eff.apply();
return;
} }
void putRubble(int xpos, int ypos, int w, int h) void putRubble(int xpos, int ypos, int w, int h)