2013-09-28 20:23:22 +00:00
|
|
|
// This file is part of MicropolisJ.
|
|
|
|
// Copyright (C) 2013 Jason Long
|
|
|
|
// Portions Copyright (C) 1989-2007 Electronic Arts Inc.
|
|
|
|
//
|
|
|
|
// MicropolisJ is free software; you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU GPLv3, with additional terms.
|
|
|
|
// See the README file, included in this distribution, for details.
|
|
|
|
|
2013-05-16 23:41:49 +00:00
|
|
|
package micropolisj.engine;
|
|
|
|
|
|
|
|
import static micropolisj.engine.TileConstants.*;
|
|
|
|
|
|
|
|
class RoadLikeTool extends ToolStroke
|
|
|
|
{
|
|
|
|
RoadLikeTool(Micropolis city, MicropolisTool tool, int xpos, int ypos)
|
|
|
|
{
|
|
|
|
super(city, tool, xpos, ypos);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-05-16 23:45:35 +00:00
|
|
|
protected void applyArea(ToolEffectIfc eff)
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
|
|
|
for (;;) {
|
2013-05-16 23:44:28 +00:00
|
|
|
if (!applyForward(eff)) {
|
|
|
|
break;
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
2013-05-16 23:44:28 +00:00
|
|
|
if (!applyBackward(eff)) {
|
|
|
|
break;
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:28 +00:00
|
|
|
boolean applyBackward(ToolEffectIfc eff)
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
|
|
|
boolean anyChange = false;
|
|
|
|
|
2013-09-09 14:11:55 +00:00
|
|
|
CityRect b = getBounds();
|
2013-05-16 23:41:49 +00:00
|
|
|
for (int i = b.height - 1; i >= 0; i--) {
|
|
|
|
for (int j = b.width - 1; j >= 0; j--) {
|
2013-05-16 23:45:35 +00:00
|
|
|
TranslatedToolEffect tte = new TranslatedToolEffect(eff, b.x+j, b.y+i);
|
2013-05-16 23:44:28 +00:00
|
|
|
anyChange = anyChange || applySingle(tte);
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return anyChange;
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:28 +00:00
|
|
|
boolean applyForward(ToolEffectIfc eff)
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
|
|
|
boolean anyChange = false;
|
|
|
|
|
2013-09-09 14:11:55 +00:00
|
|
|
CityRect b = getBounds();
|
2013-05-16 23:41:49 +00:00
|
|
|
for (int i = 0; i < b.height; i++) {
|
|
|
|
for (int j = 0; j < b.width; j++) {
|
2013-05-16 23:45:35 +00:00
|
|
|
TranslatedToolEffect tte = new TranslatedToolEffect(eff, b.x+j, b.y+i);
|
2013-05-16 23:44:28 +00:00
|
|
|
anyChange = anyChange || applySingle(tte);
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return anyChange;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-09-09 14:11:55 +00:00
|
|
|
public CityRect getBounds()
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
|
|
|
// constrain bounds to be a rectangle with
|
|
|
|
// either width or height equal to one.
|
|
|
|
|
|
|
|
assert tool.getWidth() == 1;
|
|
|
|
assert tool.getHeight() == 1;
|
|
|
|
|
|
|
|
if (Math.abs(xdest-xpos) >= Math.abs(ydest-ypos)) {
|
|
|
|
// horizontal line
|
2013-09-09 14:11:55 +00:00
|
|
|
CityRect r = new CityRect();
|
2013-05-16 23:41:49 +00:00
|
|
|
r.x = Math.min(xpos, xdest);
|
|
|
|
r.width = Math.abs(xdest-xpos) + 1;
|
|
|
|
r.y = ypos;
|
|
|
|
r.height = 1;
|
|
|
|
return r;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// vertical line
|
2013-09-09 14:11:55 +00:00
|
|
|
CityRect r = new CityRect();
|
2013-05-16 23:41:49 +00:00
|
|
|
r.x = xpos;
|
|
|
|
r.width = 1;
|
|
|
|
r.y = Math.min(ypos, ydest);
|
|
|
|
r.height = Math.abs(ydest-ypos) + 1;
|
|
|
|
return r;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:28 +00:00
|
|
|
boolean applySingle(ToolEffectIfc eff)
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
|
|
|
switch (tool)
|
|
|
|
{
|
|
|
|
case RAIL:
|
2013-05-16 23:44:28 +00:00
|
|
|
return applyRailTool(eff);
|
2013-05-16 23:41:49 +00:00
|
|
|
|
|
|
|
case ROADS:
|
2013-05-16 23:44:28 +00:00
|
|
|
return applyRoadTool(eff);
|
2013-05-16 23:41:49 +00:00
|
|
|
|
|
|
|
case WIRE:
|
2013-05-16 23:44:28 +00:00
|
|
|
return applyWireTool(eff);
|
2013-05-16 23:41:49 +00:00
|
|
|
|
|
|
|
default:
|
|
|
|
throw new Error("Unexpected tool: " + tool);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:28 +00:00
|
|
|
boolean applyRailTool(ToolEffectIfc eff)
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:28 +00:00
|
|
|
if (layRail(eff)) {
|
|
|
|
fixZone(eff);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:28 +00:00
|
|
|
boolean applyRoadTool(ToolEffectIfc eff)
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:28 +00:00
|
|
|
if (layRoad(eff)) {
|
|
|
|
fixZone(eff);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:28 +00:00
|
|
|
boolean applyWireTool(ToolEffectIfc eff)
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:28 +00:00
|
|
|
if (layWire(eff)) {
|
|
|
|
fixZone(eff);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:28 +00:00
|
|
|
private boolean layRail(ToolEffectIfc eff)
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
|
|
|
final int RAIL_COST = 20;
|
|
|
|
final int TUNNEL_COST = 100;
|
|
|
|
|
|
|
|
int cost = RAIL_COST;
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
char tile = (char) (eff.getTile(0, 0) & LOMASK);
|
2013-05-22 11:33:09 +00:00
|
|
|
tile = neutralizeRoad(tile);
|
|
|
|
|
2013-05-16 23:41:49 +00:00
|
|
|
switch (tile)
|
|
|
|
{
|
|
|
|
case RIVER: // rail on water
|
|
|
|
case REDGE:
|
|
|
|
case CHANNEL:
|
|
|
|
|
|
|
|
cost = TUNNEL_COST;
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
// check east
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:20 +00:00
|
|
|
char eTile = neutralizeRoad(eff.getTile(1, 0));
|
2013-05-16 23:41:49 +00:00
|
|
|
if (eTile == RAILHPOWERV ||
|
|
|
|
eTile == HRAIL ||
|
|
|
|
(eTile >= LHRAIL && eTile <= HRAILROAD))
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, HRAIL);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
// check west
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:20 +00:00
|
|
|
char wTile = neutralizeRoad(eff.getTile(-1, 0));
|
2013-05-16 23:41:49 +00:00
|
|
|
if (wTile == RAILHPOWERV ||
|
|
|
|
wTile == HRAIL ||
|
|
|
|
(wTile > VRAIL && wTile < VRAILROAD))
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, HRAIL);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
// check south
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:20 +00:00
|
|
|
char sTile = neutralizeRoad(eff.getTile(0, 1));
|
2013-05-16 23:41:49 +00:00
|
|
|
if (sTile == RAILVPOWERH ||
|
|
|
|
sTile == VRAILROAD ||
|
|
|
|
(sTile > HRAIL && sTile < HRAILROAD))
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, VRAIL);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
// check north
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:20 +00:00
|
|
|
char nTile = neutralizeRoad(eff.getTile(0, -1));
|
2013-05-16 23:41:49 +00:00
|
|
|
if (nTile == RAILVPOWERH ||
|
|
|
|
nTile == VRAILROAD ||
|
|
|
|
(nTile > HRAIL && nTile < HRAILROAD))
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, VRAIL);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// cannot do road here
|
2013-05-16 23:44:28 +00:00
|
|
|
return false;
|
2013-05-16 23:41:49 +00:00
|
|
|
|
|
|
|
case LHPOWER: // rail on power
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, RAILVPOWERH);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LVPOWER: // rail on power
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, RAILHPOWERV);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case TileConstants.ROADS: // rail on road (case 1)
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, VRAILROAD);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case ROADS2: // rail on road (case 2)
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, HRAILROAD);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
if (tile != DIRT) {
|
|
|
|
if (city.autoBulldoze && canAutoBulldozeRRW(tile)) {
|
|
|
|
cost += 1; //autodoze cost
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// cannot do rail here
|
2013-05-16 23:44:28 +00:00
|
|
|
return false;
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//rail on dirt
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, LHRAIL);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
eff.spend(cost);
|
2013-05-16 23:44:28 +00:00
|
|
|
return true;
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:28 +00:00
|
|
|
private boolean layRoad(ToolEffectIfc eff)
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
|
|
|
final int ROAD_COST = 10;
|
|
|
|
final int BRIDGE_COST = 50;
|
|
|
|
|
|
|
|
int cost = ROAD_COST;
|
|
|
|
|
2013-05-16 23:44:12 +00:00
|
|
|
char tile = (char) (eff.getTile(0, 0) & LOMASK);
|
2013-05-16 23:41:49 +00:00
|
|
|
switch (tile)
|
|
|
|
{
|
|
|
|
case RIVER: // road on water
|
|
|
|
case REDGE:
|
|
|
|
case CHANNEL: // check how to build bridges, if possible.
|
|
|
|
|
|
|
|
cost = BRIDGE_COST;
|
|
|
|
|
2013-05-16 23:44:12 +00:00
|
|
|
// check east
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:12 +00:00
|
|
|
char eTile = neutralizeRoad(eff.getTile(1, 0));
|
2013-05-16 23:41:49 +00:00
|
|
|
if (eTile == VRAILROAD ||
|
|
|
|
eTile == HBRIDGE ||
|
|
|
|
(eTile >= TileConstants.ROADS && eTile <= HROADPOWER))
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, HBRIDGE);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:12 +00:00
|
|
|
// check west
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:12 +00:00
|
|
|
char wTile = neutralizeRoad(eff.getTile(-1, 0));
|
2013-05-16 23:41:49 +00:00
|
|
|
if (wTile == VRAILROAD ||
|
|
|
|
wTile == HBRIDGE ||
|
|
|
|
(wTile >= TileConstants.ROADS && wTile <= INTERSECTION))
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, HBRIDGE);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:12 +00:00
|
|
|
// check south
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:12 +00:00
|
|
|
char sTile = neutralizeRoad(eff.getTile(0, 1));
|
2013-05-16 23:41:49 +00:00
|
|
|
if (sTile == HRAILROAD ||
|
|
|
|
sTile == VROADPOWER ||
|
|
|
|
(sTile >= VBRIDGE && sTile <= INTERSECTION))
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, VBRIDGE);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:12 +00:00
|
|
|
// check north
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:12 +00:00
|
|
|
char nTile = neutralizeRoad(eff.getTile(0, -1));
|
2013-05-16 23:41:49 +00:00
|
|
|
if (nTile == HRAILROAD ||
|
|
|
|
nTile == VROADPOWER ||
|
|
|
|
(nTile >= VBRIDGE && nTile <= INTERSECTION))
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, VBRIDGE);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// cannot do road here
|
2013-05-16 23:44:28 +00:00
|
|
|
return false;
|
2013-05-16 23:41:49 +00:00
|
|
|
|
|
|
|
case LHPOWER: //road on power
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, VROADPOWER);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LVPOWER: //road on power #2
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, HROADPOWER);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LHRAIL: //road on rail
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, HRAILROAD);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LVRAIL: //road on rail #2
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, VRAILROAD);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
if (tile != DIRT) {
|
|
|
|
if (city.autoBulldoze && canAutoBulldozeRRW(tile)) {
|
|
|
|
cost += 1; //autodoze cost
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// cannot do road here
|
2013-05-16 23:44:28 +00:00
|
|
|
return false;
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:12 +00:00
|
|
|
// road on dirt;
|
|
|
|
// just build a plain road, fixZone will fix it.
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, TileConstants.ROADS);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:12 +00:00
|
|
|
eff.spend(cost);
|
2013-05-16 23:44:28 +00:00
|
|
|
return true;
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:28 +00:00
|
|
|
private boolean layWire(ToolEffectIfc eff)
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
|
|
|
final int WIRE_COST = 5;
|
|
|
|
final int UNDERWATER_WIRE_COST = 25;
|
|
|
|
|
|
|
|
int cost = WIRE_COST;
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
char tile = (char) (eff.getTile(0, 0) & LOMASK);
|
2013-05-16 23:41:49 +00:00
|
|
|
tile = neutralizeRoad(tile);
|
|
|
|
|
|
|
|
switch (tile)
|
|
|
|
{
|
|
|
|
case RIVER: // wire on water
|
|
|
|
case REDGE:
|
|
|
|
case CHANNEL:
|
|
|
|
|
|
|
|
cost = UNDERWATER_WIRE_COST;
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
// check east
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:20 +00:00
|
|
|
int tmp = eff.getTile(1, 0);
|
2013-05-16 23:41:49 +00:00
|
|
|
char tmpn = neutralizeRoad(tmp);
|
|
|
|
|
2013-07-20 21:10:50 +00:00
|
|
|
if (isConductive(tmp) &&
|
2013-05-16 23:41:49 +00:00
|
|
|
tmpn != HROADPOWER &&
|
|
|
|
tmpn != RAILHPOWERV &&
|
|
|
|
tmpn != HPOWER)
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, VPOWER);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
// check west
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:20 +00:00
|
|
|
int tmp = eff.getTile(-1, 0);
|
2013-05-16 23:41:49 +00:00
|
|
|
char tmpn = neutralizeRoad(tmp);
|
|
|
|
|
2013-07-20 21:10:50 +00:00
|
|
|
if (isConductive(tmp) &&
|
2013-05-16 23:41:49 +00:00
|
|
|
tmpn != HROADPOWER &&
|
|
|
|
tmpn != RAILHPOWERV &&
|
|
|
|
tmpn != HPOWER)
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, VPOWER);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
// check south
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:20 +00:00
|
|
|
int tmp = eff.getTile(0, 1);
|
2013-05-16 23:41:49 +00:00
|
|
|
char tmpn = neutralizeRoad(tmp);
|
|
|
|
|
2013-07-20 21:10:50 +00:00
|
|
|
if (isConductive(tmp) &&
|
2013-05-16 23:41:49 +00:00
|
|
|
tmpn != VROADPOWER &&
|
|
|
|
tmpn != RAILVPOWERH &&
|
|
|
|
tmpn != VPOWER)
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, HPOWER);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
// check north
|
2013-05-16 23:41:49 +00:00
|
|
|
{
|
2013-05-16 23:44:20 +00:00
|
|
|
int tmp = eff.getTile(0, -1);
|
2013-05-16 23:41:49 +00:00
|
|
|
char tmpn = neutralizeRoad(tmp);
|
|
|
|
|
2013-07-20 21:10:50 +00:00
|
|
|
if (isConductive(tmp) &&
|
2013-05-16 23:41:49 +00:00
|
|
|
tmpn != VROADPOWER &&
|
|
|
|
tmpn != RAILVPOWERH &&
|
|
|
|
tmpn != VPOWER)
|
|
|
|
{
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, HPOWER);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// cannot do wire here
|
2013-05-16 23:44:28 +00:00
|
|
|
return false;
|
2013-05-16 23:41:49 +00:00
|
|
|
|
|
|
|
case TileConstants.ROADS: // wire on E/W road
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, HROADPOWER);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case ROADS2: // wire on N/S road
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, VROADPOWER);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LHRAIL: // wire on E/W railroad tracks
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, RAILHPOWERV);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LVRAIL: // wire on N/S railroad tracks
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, RAILVPOWERH);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
if (tile != DIRT) {
|
|
|
|
if (city.autoBulldoze && canAutoBulldozeRRW(tile)) {
|
|
|
|
cost += 1; //autodoze cost
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
//cannot do wire here
|
2013-05-16 23:44:28 +00:00
|
|
|
return false;
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//wire on dirt
|
2013-12-06 16:01:48 +00:00
|
|
|
eff.setTile(0, 0, LHPOWER);
|
2013-05-16 23:41:49 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2013-05-16 23:44:20 +00:00
|
|
|
eff.spend(cost);
|
2013-05-16 23:44:28 +00:00
|
|
|
return true;
|
2013-05-16 23:41:49 +00:00
|
|
|
}
|
|
|
|
}
|