1
0
Fork 0

Add: Draw roadbits in road depots.

pull/8480/head
J0anJosep 2021-04-02 15:11:02 +02:00
parent 63afc96d2a
commit cf955bc24b
1 changed files with 47 additions and 24 deletions

View File

@ -1468,11 +1468,21 @@ void DrawRoadCatenary(const TileInfo *ti)
RoadBits tram = ROAD_NONE; RoadBits tram = ROAD_NONE;
if (IsTileType(ti->tile, MP_ROAD)) { if (IsTileType(ti->tile, MP_ROAD)) {
if (IsNormalRoad(ti->tile)) { switch (GetRoadTileType(ti->tile)) {
road = GetRoadBits(ti->tile, RTT_ROAD); case ROAD_TILE_NORMAL:
tram = GetRoadBits(ti->tile, RTT_TRAM); road = GetRoadBits(ti->tile, RTT_ROAD);
} else if (IsLevelCrossing(ti->tile)) { tram = GetRoadBits(ti->tile, RTT_TRAM);
tram = road = (GetCrossingRailAxis(ti->tile) == AXIS_Y ? ROAD_X : ROAD_Y); break;
case ROAD_TILE_CROSSING:
tram = road = (GetCrossingRailAxis(ti->tile) == AXIS_Y ? ROAD_X : ROAD_Y);
break;
case ROAD_TILE_DEPOT: {
DiagDirection dir = GetRoadDepotDirection(ti->tile);
road = DiagDirToRoadBits(dir);
tram = DiagDirToRoadBits(dir);
break;
}
default: NOT_REACHED();
} }
} else if (IsTileType(ti->tile, MP_STATION)) { } else if (IsTileType(ti->tile, MP_STATION)) {
if (IsAnyRoadStop(ti->tile)) { if (IsAnyRoadStop(ti->tile)) {
@ -1835,17 +1845,28 @@ static void DrawTile_Road(TileInfo *ti)
case ROAD_TILE_DEPOT: { case ROAD_TILE_DEPOT: {
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED); if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED);
PaletteID palette = COMPANY_SPRITE_COLOUR(GetTileOwner(ti->tile));
RoadType road_rt = GetRoadTypeRoad(ti->tile); RoadType road_rt = GetRoadTypeRoad(ti->tile);
RoadType tram_rt = GetRoadTypeTram(ti->tile); RoadType tram_rt = GetRoadTypeTram(ti->tile);
const RoadTypeInfo *rti = GetRoadTypeInfo(road_rt == INVALID_ROADTYPE ? tram_rt : road_rt); assert(road_rt != INVALID_ROADTYPE || tram_rt != INVALID_ROADTYPE);
const RoadTypeInfo *road_rti = road_rt != INVALID_ROADTYPE ? GetRoadTypeInfo(road_rt) : nullptr;
const RoadTypeInfo *tram_rti = tram_rt != INVALID_ROADTYPE ? GetRoadTypeInfo(tram_rt) : nullptr;
const RoadTypeInfo *main_rti = tram_rti != nullptr ? tram_rti : road_rti;
int relocation = GetCustomRoadSprite(rti, ti->tile, ROTSG_DEPOT); DiagDirection dir = GetRoadDepotDirection(ti->tile);
uint road_offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(dir));
uint tram_offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(dir));
PaletteID pal = PAL_NONE;
const DrawTileSprites *dts = &_road_depot[dir];
DrawGroundSprite(dts->ground.sprite, pal);
DrawRoadOverlays(ti, pal, road_rti, tram_rti, road_offset, tram_offset);
int relocation = GetCustomRoadSprite(main_rti, ti->tile, ROTSG_DEPOT);
bool default_gfx = relocation == 0; bool default_gfx = relocation == 0;
if (default_gfx) { if (default_gfx) {
if (HasBit(rti->flags, ROTF_CATENARY)) { if (HasBit(main_rti->flags, ROTF_CATENARY)) {
if (_loaded_newgrf_features.tram == TRAMWAY_REPLACE_DEPOT_WITH_TRACK && road_rt == INVALID_ROADTYPE && !rti->UsesOverlay()) { if (_loaded_newgrf_features.tram == TRAMWAY_REPLACE_DEPOT_WITH_TRACK && road_rt == INVALID_ROADTYPE && !main_rti->UsesOverlay()) {
/* Sprites with track only work for default tram */ /* Sprites with track only work for default tram */
relocation = SPR_TRAMWAY_DEPOT_WITH_TRACK - SPR_ROAD_DEPOT; relocation = SPR_TRAMWAY_DEPOT_WITH_TRACK - SPR_ROAD_DEPOT;
default_gfx = false; default_gfx = false;
@ -1858,21 +1879,11 @@ static void DrawTile_Road(TileInfo *ti)
relocation -= SPR_ROAD_DEPOT; relocation -= SPR_ROAD_DEPOT;
} }
DiagDirection dir = GetRoadDepotDirection(ti->tile); /* Draw road, tram catenary */
const DrawTileSprites *dts = &_road_depot[dir]; DrawRoadCatenary(ti);
DrawGroundSprite(dts->ground.sprite, PAL_NONE);
if (default_gfx) { DrawRailTileSeq(ti, dts, TO_BUILDINGS, relocation, 0, COMPANY_SPRITE_COLOUR(GetTileOwner(ti->tile)));
uint offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(dir));
if (rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(rti, ti->tile, ROTSG_OVERLAY);
if (ground != 0) DrawGroundSprite(ground + offset, PAL_NONE);
} else if (road_rt == INVALID_ROADTYPE) {
DrawGroundSprite(SPR_TRAMWAY_OVERLAY + offset, PAL_NONE);
}
}
DrawRailTileSeq(ti, dts, TO_BUILDINGS, relocation, 0, palette);
break; break;
} }
} }
@ -1890,7 +1901,9 @@ void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt)
{ {
PaletteID palette = COMPANY_SPRITE_COLOUR(_local_company); PaletteID palette = COMPANY_SPRITE_COLOUR(_local_company);
RoadTramType rtt = GetRoadTramType(rt);
const RoadTypeInfo *rti = GetRoadTypeInfo(rt); const RoadTypeInfo *rti = GetRoadTypeInfo(rt);
uint road_offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(dir));
int relocation = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_DEPOT); int relocation = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_DEPOT);
bool default_gfx = relocation == 0; bool default_gfx = relocation == 0;
if (default_gfx) { if (default_gfx) {
@ -1911,6 +1924,16 @@ void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt)
const DrawTileSprites *dts = &_road_depot[dir]; const DrawTileSprites *dts = &_road_depot[dir];
DrawSprite(dts->ground.sprite, PAL_NONE, x, y); DrawSprite(dts->ground.sprite, PAL_NONE, x, y);
if (rti->UsesOverlay()) {
SpriteID ground = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_GROUND);
DrawSprite(ground + road_offset, PAL_NONE, x, y);
ground = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_OVERLAY);
if (ground != 0) DrawSprite(ground + road_offset, PAL_NONE, x, y);
} else if (rtt == RTT_TRAM) {
DrawSprite(SPR_TRAMWAY_TRAM + road_offset, PAL_NONE, x, y);
DrawSprite(SPR_TRAMWAY_OVERLAY + road_offset, PAL_NONE, x, y);
}
if (default_gfx) { if (default_gfx) {
uint offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(dir)); uint offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(dir));
if (rti->UsesOverlay()) { if (rti->UsesOverlay()) {