(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.

This commit is contained in:
rubidium
2007-05-25 22:07:40 +00:00
parent 9e7798c42e
commit 17390241e6
18 changed files with 730 additions and 36 deletions

View File

@@ -814,6 +814,42 @@ static bool AlwaysDrawUnpavedRoads(TileIndex tile, Roadside roadside)
roadside != ROADSIDE_BARREN && roadside != ROADSIDE_GRASS && roadside != ROADSIDE_GRASS_ROAD_WORKS));
}
/**
* Draws the catenary for the given tile
* @param ti information about the tile (slopes, height etc)
* @param tram the roadbits for the tram
*/
void DrawTramCatenary(TileInfo *ti, RoadBits tram)
{
/* Don't draw the catenary under a low bridge */
if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile) && !HASBIT(_transparent_opt, TO_BUILDINGS)) {
uint height = GetBridgeHeight(GetNorthernBridgeEnd(ti->tile));
if (height <= TilePixelHeight(ti->tile) + TILE_HEIGHT) return;
}
SpriteID front;
SpriteID back;
if (ti->tileh != SLOPE_FLAT) {
back = SPR_TRAMWAY_BACK_WIRES_SLOPED + _road_sloped_sprites[ti->tileh - 1];
front = SPR_TRAMWAY_FRONT_WIRES_SLOPED + _road_sloped_sprites[ti->tileh - 1];
} else {
back = SPR_TRAMWAY_BASE + _road_backpole_sprites_1[tram];
front = SPR_TRAMWAY_BASE + _road_frontwire_sprites_1[tram];
}
SpriteID pal = PAL_NONE;
if (HASBIT(_transparent_opt, TO_BUILDINGS)) {
SETBIT(front, PALETTE_MODIFIER_TRANSPARENT);
SETBIT(back, PALETTE_MODIFIER_TRANSPARENT);
pal = PALETTE_TO_TRANSPARENT;
}
AddSortableSpriteToDraw(back, pal, ti->x, ti->y, 16, 16, 0x20, ti->z);
AddSortableSpriteToDraw(front, pal, ti->x, ti->y, 16, 16, 0, ti->z);
}
/**
* Draw ground sprite and road pieces
* @param ti TileInfo
@@ -821,13 +857,15 @@ static bool AlwaysDrawUnpavedRoads(TileIndex tile, Roadside roadside)
static void DrawRoadBits(TileInfo* ti)
{
RoadBits road = GetRoadBits(ti->tile, ROADTYPE_ROAD);
RoadBits tram = GetRoadBits(ti->tile, ROADTYPE_TRAM);
const DrawRoadTileStruct *drts;
SpriteID image = 0;
SpriteID pal = PAL_NONE;
Roadside roadside;
if (ti->tileh != SLOPE_FLAT) {
int foundation = GetRoadFoundation(ti->tileh, road);
int foundation = GetRoadFoundation(ti->tileh, road | tram);
if (foundation != 0) DrawFoundation(ti, foundation);
@@ -836,7 +874,7 @@ static void DrawRoadBits(TileInfo* ti)
if (ti->tileh != SLOPE_FLAT) image = _road_sloped_sprites[ti->tileh - 1] + 0x53F;
}
if (image == 0) image = _road_tile_sprites_1[road];
if (image == 0) image = _road_tile_sprites_1[road != ROAD_NONE ? road : tram];
roadside = GetRoadside(ti->tile);
@@ -853,12 +891,27 @@ static void DrawRoadBits(TileInfo* ti)
DrawGroundSprite(image, pal);
/* For tram we overlay the road graphics with either tram tracks only
* (when there is actual road beneath the trams) or with tram tracks
* and some dirts which hides the road graphics */
if (tram != ROAD_NONE) {
if (ti->tileh != SLOPE_FLAT) {
image = _road_sloped_sprites[ti->tileh - 1] + SPR_TRAMWAY_SLOPED_OFFSET;
} else {
image = _road_tile_sprites_1[tram] - SPR_ROAD_Y;
}
image += (road == ROAD_NONE) ? SPR_TRAMWAY_TRAM : SPR_TRAMWAY_OVERLAY;
DrawGroundSprite(image, pal);
}
if (HasRoadWorks(ti->tile)) {
/* Road works */
DrawGroundSprite(road & ROAD_X ? SPR_EXCAVATION_X : SPR_EXCAVATION_Y, PAL_NONE);
DrawGroundSprite((road | tram) & ROAD_X ? SPR_EXCAVATION_X : SPR_EXCAVATION_Y, PAL_NONE);
return;
}
if (tram != ROAD_NONE) DrawTramCatenary(ti, tram);
/* Return if full detail is disabled, or we are zoomed fully out. */
if (!HASBIT(_display_opt, DO_FULL_DETAIL) || _cur_dpi->zoom > ZOOM_LVL_DETAIL) return;
@@ -916,7 +969,12 @@ static void DrawTile_Road(TileInfo *ti)
palette = PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile));
dts = &_road_depot[GetRoadDepotDirection(ti->tile)];
if (HASBIT(GetRoadTypes(ti->tile), ROADTYPE_TRAM)) {
dts = &_tram_depot[GetRoadDepotDirection(ti->tile)];
} else {
dts = &_road_depot[GetRoadDepotDirection(ti->tile)];
}
DrawGroundSprite(dts->ground_sprite, PAL_NONE);
for (dtss = dts->seq; dtss->image != 0; dtss++) {
@@ -948,7 +1006,7 @@ static void DrawTile_Road(TileInfo *ti)
void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt)
{
SpriteID palette = PLAYER_SPRITE_COLOR(_local_player);
const DrawTileSprites* dts = &_road_depot[dir];
const DrawTileSprites* dts = (rt == ROADTYPE_TRAM) ? &_tram_depot[dir] : &_road_depot[dir];
const DrawTileSeqStruct* dtss;
x += 33;