toolstroke: convert apply1 method

git-svn-id: https://micropolis.googlecode.com/svn/trunk/micropolis-java@641 d9718cc8-9f43-0410-858b-315f434eb58c
This commit is contained in:
jason@long.name 2013-05-16 23:44:44 +00:00
parent 8c5d7c1ba8
commit 4d3649884d

View file

@ -98,45 +98,65 @@ public class ToolStroke
ToolResult apply1(int xpos, int ypos) ToolResult apply1(int xpos, int ypos)
{ {
ToolEffect eff = new ToolEffect(city, xpos, ypos);
ToolResult tr = ToolResult.SUCCESS;
switch (tool) switch (tool)
{ {
case PARK: case PARK:
return applyParkTool(xpos, ypos); tr = applyParkTool(eff);
break;
case RESIDENTIAL: case RESIDENTIAL:
return applyZone(xpos-1, ypos-1, 3, 3, RESBASE); tr = applyZone(new TranslatedToolEffect(eff, -1, -1), 3, 3, RESBASE);
break;
case COMMERCIAL: case COMMERCIAL:
return applyZone(xpos-1, ypos-1, 3, 3, COMBASE); tr = applyZone(new TranslatedToolEffect(eff, -1, -1), 3, 3, COMBASE);
break;
case INDUSTRIAL: case INDUSTRIAL:
return applyZone(xpos-1, ypos-1, 3, 3, INDBASE); tr = applyZone(new TranslatedToolEffect(eff, -1, -1), 3, 3, INDBASE);
break;
case FIRE: case FIRE:
return applyZone(xpos-1, ypos-1, 3, 3, FIRESTBASE); tr = applyZone(new TranslatedToolEffect(eff, -1, -1), 3, 3, FIRESTBASE);
break;
case POLICE: case POLICE:
return applyZone(xpos-1, ypos-1, 3, 3, POLICESTBASE); tr = applyZone(new TranslatedToolEffect(eff, -1, -1), 3, 3, POLICESTBASE);
break;
case POWERPLANT: case POWERPLANT:
return applyZone(xpos-1, ypos-1, 4, 4, COALBASE); tr = applyZone(new TranslatedToolEffect(eff, -1, -1), 4, 4, COALBASE);
break;
case STADIUM: case STADIUM:
return applyZone(xpos-1, ypos-1, 4, 4, STADIUMBASE); tr = applyZone(new TranslatedToolEffect(eff, -1, -1), 4, 4, STADIUMBASE);
break;
case SEAPORT: case SEAPORT:
return applyZone(xpos-1, ypos-1, 4, 4, PORTBASE); tr = applyZone(new TranslatedToolEffect(eff, -1, -1), 4, 4, PORTBASE);
break;
case NUCLEAR: case NUCLEAR:
return applyZone(xpos-1, ypos-1, 4, 4, NUCLEARBASE); tr = applyZone(new TranslatedToolEffect(eff, -1, -1), 4, 4, NUCLEARBASE);
break;
case AIRPORT: case AIRPORT:
return applyZone(xpos-1, ypos-1, 6, 6, AIRPORTBASE); tr = applyZone(new TranslatedToolEffect(eff, -1, -1), 6, 6, AIRPORTBASE);
break;
default: default:
// not expected // not expected
return ToolResult.UH_OH; throw new Error("unexpected tool: "+tool);
} }
if (tr != ToolResult.SUCCESS) {
return tr;
}
return eff.apply();
} }
public void dragTo(int xdest, int ydest) public void dragTo(int xdest, int ydest)
@ -208,10 +228,8 @@ public class ToolStroke
Integer.MAX_VALUE; Integer.MAX_VALUE;
} }
ToolResult applyZone(int xpos, int ypos, int width, int height, char tileBase) ToolResult applyZone(ToolEffectIfc eff, int width, int height, char tileBase)
{ {
ToolEffect eff = new ToolEffect(city, xpos, ypos);
int cost = tool.getToolCost(); int cost = tool.getToolCost();
boolean canBuild = true; boolean canBuild = true;
for (int rowNum = 0; rowNum < height; rowNum++) { for (int rowNum = 0; rowNum < height; rowNum++) {
@ -253,8 +271,7 @@ public class ToolStroke
} }
fixBorder(eff, width, height); fixBorder(eff, width, height);
return ToolResult.SUCCESS;
return eff.apply();
} }
//compatible function //compatible function
@ -279,10 +296,8 @@ public class ToolStroke
} }
} }
ToolResult applyParkTool(int xpos, int ypos) ToolResult applyParkTool(ToolEffectIfc eff)
{ {
ToolEffect eff = new ToolEffect(city, xpos, ypos);
int cost = tool.getToolCost(); int cost = tool.getToolCost();
if (eff.getTile(0, 0) != DIRT) { if (eff.getTile(0, 0) != DIRT) {
@ -313,7 +328,7 @@ public class ToolStroke
eff.spend(cost); eff.spend(cost);
eff.setTile(0, 0, tile); eff.setTile(0, 0, tile);
return eff.apply(); return ToolResult.SUCCESS;
} }
// checks whether the tile value represents road with traffic // checks whether the tile value represents road with traffic