tiles.rc: move CONDBIT knowledge from source code to tiles.rc

git-svn-id: https://micropolis.googlecode.com/svn/trunk/micropolis-java@746 d9718cc8-9f43-0410-858b-315f434eb58c
This commit is contained in:
jason@long.name 2013-07-20 21:10:50 +00:00
parent b65e83ec79
commit 68717e3ea6
8 changed files with 56 additions and 53 deletions

View file

@ -37,9 +37,6 @@ class Animate
static int [] AniTabB = { 0, 0, 36, 44, 0, 0, 52, 60 }; static int [] AniTabB = { 0, 0, 36, 44, 0, 0, 52, 60 };
static int [] AniTabC = { IND1, 0, IND2, IND4, 0, 0, IND6, IND8 }; static int [] AniTabC = { IND1, 0, IND2, IND4, 0, 0, IND6, IND8 };
static int [] AniTabD = { IND1, 0, IND3, IND5, 0, 0, IND7, IND9 }; static int [] AniTabD = { IND1, 0, IND3, IND5, 0, 0, IND7, IND9 };
static final int ASCBIT = (CONDBIT);
static final int REGBIT = (CONDBIT);
} }
} }

View file

@ -62,7 +62,7 @@ class MapScanner
cchr9 = (char) (cchr & LOMASK); cchr9 = (char) (cchr & LOMASK);
if (city.newPower && ((cchr & CONDBIT) != 0)) if (city.newPower && isConductive(cchr))
{ {
setZonePower(); setZonePower();
} }
@ -118,7 +118,7 @@ class MapScanner
// deteriorating roads // deteriorating roads
if (PRNG.nextInt(512) == 0) if (PRNG.nextInt(512) == 0)
{ {
if ((cchr & CONDBIT) == 0) if (!isConductive(cchr))
{ {
if (city.roadEffect < PRNG.nextInt(32)) if (city.roadEffect < PRNG.nextInt(32))
{ {
@ -251,7 +251,7 @@ class MapScanner
if (city.roadEffect < 30) { // deteriorating rail if (city.roadEffect < 30) { // deteriorating rail
if (PRNG.nextInt(512) == 0) { if (PRNG.nextInt(512) == 0) {
if ((cchr & CONDBIT) == 0) { if (!isConductive(cchr)) {
if (city.roadEffect < PRNG.nextInt(32)) { if (city.roadEffect < PRNG.nextInt(32)) {
if (isOverWater(cchr)) { if (isOverWater(cchr)) {
city.setTile(xpos,ypos,RIVER); city.setTile(xpos,ypos,RIVER);
@ -509,7 +509,7 @@ class MapScanner
{ {
for (int x = xpos-1; x <= xpos+1; x++) for (int x = xpos-1; x <= xpos+1; x++)
{ {
city.setTile(x, y, (char)(base | CONDBIT | (x == xpos && y == ypos ? BULLBIT : 0))); city.setTile(x, y, (char)(base | (x == xpos && y == ypos ? BULLBIT : 0)));
base++; base++;
} }
} }
@ -631,13 +631,13 @@ class MapScanner
{ {
if ((city.map[ypos-1][xpos+1] & LOMASK) == RADAR) { if ((city.map[ypos-1][xpos+1] & LOMASK) == RADAR) {
city.setTile(xpos+1,ypos-1, (char) city.setTile(xpos+1,ypos-1, (char)
(RADAR_ANIM + CONDBIT) (RADAR_ANIM)
); );
} }
} }
else else
{ {
city.setTile(xpos+1,ypos-1,(char)(RADAR + CONDBIT)); city.setTile(xpos+1,ypos-1,(char)(RADAR));
} }
if (powerOn) { if (powerOn) {
@ -759,7 +759,7 @@ class MapScanner
{ //not rubble, radiactive, on fire or flooded { //not rubble, radiactive, on fire or flooded
city.setTile(xx,yy,(char) city.setTile(xx,yy,(char)
(zoneBase+CONDBIT) (zoneBase)
); );
} }
} }
@ -849,12 +849,12 @@ class MapScanner
if (powerOn) { if (powerOn) {
if (t == Smoke.AniTabC[z]) //expected non-animated tile if (t == Smoke.AniTabC[z]) //expected non-animated tile
{ {
city.setTile(xx,yy,(char)(Smoke.ASCBIT | (SMOKEBASE + Smoke.AniTabA[z]))); city.setTile(xx,yy,(char)(SMOKEBASE + Smoke.AniTabA[z]));
} }
} }
else { else {
if (t > Smoke.AniTabC[z]) { if (t > Smoke.AniTabC[z]) {
city.setTile(xx,yy,(char)(Smoke.REGBIT | Smoke.AniTabC[z])); city.setTile(xx,yy,(char)(Smoke.AniTabC[z]));
} }
} }
} }
@ -866,12 +866,12 @@ class MapScanner
int t = city.map[yy][xx] & LOMASK; int t = city.map[yy][xx] & LOMASK;
if (powerOn) { if (powerOn) {
if (t == Smoke.AniTabD[z]) { if (t == Smoke.AniTabD[z]) {
city.setTile(xx,yy,(char)(Smoke.ASCBIT | (SMOKEBASE + Smoke.AniTabB[z]))); city.setTile(xx,yy,(char)(SMOKEBASE + Smoke.AniTabB[z]));
} }
} }
else { else {
if (t > Smoke.AniTabD[z]) { if (t > Smoke.AniTabD[z]) {
city.setTile(xx,yy,(char)(Smoke.REGBIT | Smoke.AniTabD[z])); city.setTile(xx,yy,(char)(Smoke.AniTabD[z]));
} }
} }
} }
@ -1080,7 +1080,7 @@ class MapScanner
assert houseNumber >= 0 && houseNumber < 12; assert houseNumber >= 0 && houseNumber < 12;
assert city.testBounds(xx, yy); assert city.testBounds(xx, yy);
city.setTile(xx, yy, (char)((HOUSE + houseNumber) | BULLBIT | CONDBIT)); city.setTile(xx, yy, (char)((HOUSE + houseNumber) | BULLBIT));
} }
} }
@ -1207,7 +1207,7 @@ class MapScanner
{ {
// downgrade from full-size zone to 8 little houses // downgrade from full-size zone to 8 little houses
city.setTile(xpos, ypos, (char)(FREEZ | BULLBIT | CONDBIT)); city.setTile(xpos, ypos, (char)(FREEZ | BULLBIT));
for (int x = xpos-1; x <= xpos+1; x++) for (int x = xpos-1; x <= xpos+1; x++)
{ {
for (int y = ypos-1; y <= ypos+1; y++) for (int y = ypos-1; y <= ypos+1; y++)
@ -1218,7 +1218,7 @@ class MapScanner
{ {
// pick a random small house // pick a random small house
int houseNumber = value * 3 + PRNG.nextInt(3); int houseNumber = value * 3 + PRNG.nextInt(3);
city.setTile(x, y, (char) ((HOUSE + houseNumber) | BULLBIT | CONDBIT)); city.setTile(x, y, (char) ((HOUSE + houseNumber) | BULLBIT));
} }
} }
} }
@ -1243,7 +1243,7 @@ class MapScanner
int loc = city.map[y][x] & LOMASK; int loc = city.map[y][x] & LOMASK;
if (loc >= LHTHR && loc <= HHTHR) if (loc >= LHTHR && loc <= HHTHR)
{ //little house { //little house
city.setTile(x, y, (char)((Brdr[z] + FREEZ - 4) | BULLBIT | CONDBIT)); city.setTile(x, y, (char)((Brdr[z] + FREEZ - 4) | BULLBIT));
return; return;
} }
} }
@ -1342,7 +1342,7 @@ class MapScanner
int tile = city.getTile(xpos+dx[z], ypos+dy[z]) & LOMASK; int tile = city.getTile(xpos+dx[z], ypos+dy[z]) & LOMASK;
if (tile >= COALBASE && tile < COALBASE + 4*4) { if (tile >= COALBASE && tile < COALBASE + 4*4) {
city.setTile(xpos + dx[z], ypos + dy[z], city.setTile(xpos + dx[z], ypos + dy[z],
(char) (SmTb[z] | CONDBIT | PWRBIT) (char) (SmTb[z] | PWRBIT)
); );
} }
} }
@ -1374,7 +1374,7 @@ class MapScanner
for (int x = 0; x < 4; x++, zoneBase++) for (int x = 0; x < 4; x++, zoneBase++)
{ {
city.setTile(xpos - 1 + x, ypos - 1 + y, city.setTile(xpos - 1 + x, ypos - 1 + y,
(char) (zoneBase | CONDBIT | (x == 1 && y == 1 ? (PWRBIT) : 0))); (char) (zoneBase | (x == 1 && y == 1 ? (PWRBIT) : 0)));
} }
} }
} }

View file

@ -906,11 +906,6 @@ public class Micropolis
fireMapOverlayDataChanged(MapState.FIRE_OVERLAY); fireMapOverlayDataChanged(MapState.FIRE_OVERLAY);
} }
private boolean isConductive(int x, int y)
{
return (map[y][x] & CONDBIT) != 0;
}
private boolean testForCond(CityLocation loc, int dir) private boolean testForCond(CityLocation loc, int dir)
{ {
int xsave = loc.x; int xsave = loc.x;
@ -920,7 +915,7 @@ public class Micropolis
if (movePowerLocation(loc,dir)) if (movePowerLocation(loc,dir))
{ {
rv = ( rv = (
isConductive(loc.x, loc.y) && isConductive(map[loc.y][loc.x]) &&
map[loc.y][loc.x] != NUCLEAR && map[loc.y][loc.x] != NUCLEAR &&
map[loc.y][loc.x] != POWERPLANT && map[loc.y][loc.x] != POWERPLANT &&
!hasPower(loc.x, loc.y) !hasPower(loc.x, loc.y)
@ -1965,7 +1960,7 @@ public class Micropolis
for (int y = 0; y < DEFAULT_HEIGHT; y++) for (int y = 0; y < DEFAULT_HEIGHT; y++)
{ {
int z = dis.readShort(); int z = dis.readShort();
z &= ~(1024 | 2048 | 8192); // clear ZONEBIT,ANIMBIT,BURNBIT on import z &= ~(1024 | 2048 | 8192 | 16384); // clear ZONEBIT,ANIMBIT,BURNBIT,CONDBIT on import
map[y][x] = (char) z; map[y][x] = (char) z;
} }
} }
@ -1979,6 +1974,9 @@ public class Micropolis
for (int y = 0; y < DEFAULT_HEIGHT; y++) for (int y = 0; y < DEFAULT_HEIGHT; y++)
{ {
int z = map[y][x]; int z = map[y][x];
if (isConductive(z)) {
z |= 16384; //synthesize CONDBIT on export
}
if (isCombustible(z)) { if (isCombustible(z)) {
z |= 8192; //synthesize BURNBIT on export z |= 8192; //synthesize BURNBIT on export
} }
@ -2344,7 +2342,7 @@ public class Micropolis
(t & LOMASK) >= COALSMOKE1 && (t & LOMASK) >= COALSMOKE1 &&
(t & LOMASK) < COALSMOKE4+4) { (t & LOMASK) < COALSMOKE4+4) {
// animated coal smoke // animated coal smoke
setTile(xtem, ytem, (char)(zoneBase | CONDBIT | BULLBIT)); setTile(xtem, ytem, (char)(zoneBase | BULLBIT));
continue; continue;
} }

View file

@ -201,11 +201,11 @@ class RoadLikeTool extends ToolStroke
return false; return false;
case LHPOWER: // rail on power case LHPOWER: // rail on power
eff.setTile(0, 0, (char) (RAILVPOWERH | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (RAILVPOWERH | BULLBIT));
break; break;
case LVPOWER: // rail on power case LVPOWER: // rail on power
eff.setTile(0, 0, (char) (RAILHPOWERV | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (RAILHPOWERV | BULLBIT));
break; break;
case TileConstants.ROADS: // rail on road (case 1) case TileConstants.ROADS: // rail on road (case 1)
@ -304,11 +304,11 @@ class RoadLikeTool extends ToolStroke
return false; return false;
case LHPOWER: //road on power case LHPOWER: //road on power
eff.setTile(0, 0, (char) (VROADPOWER | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (VROADPOWER | BULLBIT));
break; break;
case LVPOWER: //road on power #2 case LVPOWER: //road on power #2
eff.setTile(0, 0, (char) (HROADPOWER | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (HROADPOWER | BULLBIT));
break; break;
case LHRAIL: //road on rail case LHRAIL: //road on rail
@ -363,12 +363,12 @@ class RoadLikeTool extends ToolStroke
int tmp = eff.getTile(1, 0); int tmp = eff.getTile(1, 0);
char tmpn = neutralizeRoad(tmp); char tmpn = neutralizeRoad(tmp);
if ((tmp & CONDBIT) != 0 && if (isConductive(tmp) &&
tmpn != HROADPOWER && tmpn != HROADPOWER &&
tmpn != RAILHPOWERV && tmpn != RAILHPOWERV &&
tmpn != HPOWER) tmpn != HPOWER)
{ {
eff.setTile(0, 0, (char) (VPOWER | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (VPOWER | BULLBIT));
break; break;
} }
} }
@ -378,12 +378,12 @@ class RoadLikeTool extends ToolStroke
int tmp = eff.getTile(-1, 0); int tmp = eff.getTile(-1, 0);
char tmpn = neutralizeRoad(tmp); char tmpn = neutralizeRoad(tmp);
if ((tmp & CONDBIT) != 0 && if (isConductive(tmp) &&
tmpn != HROADPOWER && tmpn != HROADPOWER &&
tmpn != RAILHPOWERV && tmpn != RAILHPOWERV &&
tmpn != HPOWER) tmpn != HPOWER)
{ {
eff.setTile(0, 0, (char) (VPOWER | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (VPOWER | BULLBIT));
break; break;
} }
} }
@ -393,12 +393,12 @@ class RoadLikeTool extends ToolStroke
int tmp = eff.getTile(0, 1); int tmp = eff.getTile(0, 1);
char tmpn = neutralizeRoad(tmp); char tmpn = neutralizeRoad(tmp);
if ((tmp & CONDBIT) != 0 && if (isConductive(tmp) &&
tmpn != VROADPOWER && tmpn != VROADPOWER &&
tmpn != RAILVPOWERH && tmpn != RAILVPOWERH &&
tmpn != VPOWER) tmpn != VPOWER)
{ {
eff.setTile(0, 0, (char) (HPOWER | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (HPOWER | BULLBIT));
break; break;
} }
} }
@ -408,12 +408,12 @@ class RoadLikeTool extends ToolStroke
int tmp = eff.getTile(0, -1); int tmp = eff.getTile(0, -1);
char tmpn = neutralizeRoad(tmp); char tmpn = neutralizeRoad(tmp);
if ((tmp & CONDBIT) != 0 && if (isConductive(tmp) &&
tmpn != VROADPOWER && tmpn != VROADPOWER &&
tmpn != RAILVPOWERH && tmpn != RAILVPOWERH &&
tmpn != VPOWER) tmpn != VPOWER)
{ {
eff.setTile(0, 0, (char) (HPOWER | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (HPOWER | BULLBIT));
break; break;
} }
} }
@ -422,19 +422,19 @@ class RoadLikeTool extends ToolStroke
return false; return false;
case TileConstants.ROADS: // wire on E/W road case TileConstants.ROADS: // wire on E/W road
eff.setTile(0, 0, (char) (HROADPOWER | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (HROADPOWER | BULLBIT));
break; break;
case ROADS2: // wire on N/S road case ROADS2: // wire on N/S road
eff.setTile(0, 0, (char) (VROADPOWER | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (VROADPOWER | BULLBIT));
break; break;
case LHRAIL: // wire on E/W railroad tracks case LHRAIL: // wire on E/W railroad tracks
eff.setTile(0, 0, (char) (RAILHPOWERV | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (RAILHPOWERV | BULLBIT));
break; break;
case LVRAIL: // wire on N/S railroad tracks case LVRAIL: // wire on N/S railroad tracks
eff.setTile(0, 0, (char) (RAILVPOWERH | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (RAILVPOWERH | BULLBIT));
break; break;
default: default:
@ -449,7 +449,7 @@ class RoadLikeTool extends ToolStroke
} }
//wire on dirt //wire on dirt
eff.setTile(0, 0, (char) (LHPOWER | CONDBIT | BULLBIT)); eff.setTile(0, 0, (char) (LHPOWER | BULLBIT));
break; break;
} }

View file

@ -209,7 +209,7 @@ public class TileConstants
// status bits // status bits
// //
public static final char PWRBIT = 32768; // bit 15 ... currently powered public static final char PWRBIT = 32768; // bit 15 ... currently powered
public static final char CONDBIT = 16384; // bit 14 ... can conduct power // bit 14 ... unused
// bit 13 ... unused // bit 13 ... unused
public static final char BULLBIT = 4096; // bit 12 ... is bulldozable public static final char BULLBIT = 4096; // bit 12 ... is bulldozable
// bit 11 ... unused // bit 11 ... unused
@ -304,6 +304,12 @@ public class TileConstants
return spec != null && spec.canBurn; return spec != null && spec.canBurn;
} }
public static boolean isConductive(int tile)
{
TileSpec spec = Tiles.get(tile & LOMASK);
return spec != null && spec.canConduct;
}
public static boolean isFire(int tile) public static boolean isFire(int tile)
{ {
int tmp = tile & LOMASK; int tmp = tile & LOMASK;

View file

@ -7,6 +7,7 @@ public class TileSpec
int tileNumber; int tileNumber;
TileSpec animNext; TileSpec animNext;
boolean canBurn; boolean canBurn;
boolean canConduct;
boolean zone; boolean zone;
Map<String,String> attributes; Map<String,String> attributes;
@ -71,6 +72,7 @@ public class TileSpec
} }
this.canBurn = !getBooleanAttribute("noburn"); this.canBurn = !getBooleanAttribute("noburn");
this.canConduct = getBooleanAttribute("conducts");
this.zone = getBooleanAttribute("zone"); this.zone = getBooleanAttribute("zone");
} }

View file

@ -182,7 +182,7 @@ public class ToolStroke
for (int columnNum = 0; columnNum < width; columnNum++) for (int columnNum = 0; columnNum < width; columnNum++)
{ {
eff.setTile(columnNum, rowNum, (char) ( eff.setTile(columnNum, rowNum, (char) (
tileBase | CONDBIT tileBase
)); ));
tileBase++; tileBase++;
} }
@ -412,7 +412,7 @@ public class ToolStroke
{ {
tile = eff.getTile(0, -1); tile = eff.getTile(0, -1);
char ntile = neutralizeRoad(tile); char ntile = neutralizeRoad(tile);
if ((tile & CONDBIT) != 0 && if (isConductive(tile) &&
ntile != VPOWER && ntile != VPOWER &&
ntile != VROADPOWER && ntile != VROADPOWER &&
ntile != RAILVPOWERH) ntile != RAILVPOWERH)
@ -425,7 +425,7 @@ public class ToolStroke
{ {
tile = eff.getTile(1, 0); tile = eff.getTile(1, 0);
char ntile = neutralizeRoad(tile); char ntile = neutralizeRoad(tile);
if ((tile & CONDBIT) != 0 && if (isConductive(tile) &&
ntile != HPOWER && ntile != HPOWER &&
ntile != HROADPOWER && ntile != HROADPOWER &&
ntile != RAILHPOWERV) ntile != RAILHPOWERV)
@ -438,7 +438,7 @@ public class ToolStroke
{ {
tile = eff.getTile(0, 1); tile = eff.getTile(0, 1);
char ntile = neutralizeRoad(tile); char ntile = neutralizeRoad(tile);
if ((tile & CONDBIT) != 0 && if (isConductive(tile) &&
ntile != VPOWER && ntile != VPOWER &&
ntile != VROADPOWER && ntile != VROADPOWER &&
ntile != RAILVPOWERH) ntile != RAILVPOWERH)
@ -451,7 +451,7 @@ public class ToolStroke
{ {
tile = eff.getTile(-1, 0); tile = eff.getTile(-1, 0);
char ntile = neutralizeRoad(tile); char ntile = neutralizeRoad(tile);
if ((tile & CONDBIT) != 0 && if (isConductive(tile) &&
ntile != HPOWER && ntile != HPOWER &&
ntile != HROADPOWER && ntile != HROADPOWER &&
ntile != RAILHPOWERV) ntile != RAILHPOWERV)
@ -460,7 +460,7 @@ public class ToolStroke
} }
} }
eff.setTile(0, 0, (WireTable[adjTile] | BULLBIT | CONDBIT)); eff.setTile(0, 0, (WireTable[adjTile] | BULLBIT));
} //end if on a rail tile } //end if on a rail tile
return; return;

View file

@ -260,7 +260,7 @@ public class OverlayMapView extends JComponent
// zone // zone
pix = ((rawTile & PWRBIT) != 0) ? POWERED : UNPOWERED; pix = ((rawTile & PWRBIT) != 0) ? POWERED : UNPOWERED;
} }
else if ((rawTile & CONDBIT) != 0) { else if (isConductive(rawTile)) {
pix = CONDUCTIVE; pix = CONDUCTIVE;
} }
else { else {