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;
if (IsTileType(ti->tile, MP_ROAD)) {
if (IsNormalRoad(ti->tile)) {
switch (GetRoadTileType(ti->tile)) {
case ROAD_TILE_NORMAL:
road = GetRoadBits(ti->tile, RTT_ROAD);
tram = GetRoadBits(ti->tile, RTT_TRAM);
} else if (IsLevelCrossing(ti->tile)) {
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)) {
if (IsAnyRoadStop(ti->tile)) {
@ -1835,17 +1845,28 @@ static void DrawTile_Road(TileInfo *ti)
case ROAD_TILE_DEPOT: {
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED);
PaletteID palette = COMPANY_SPRITE_COLOUR(GetTileOwner(ti->tile));
RoadType road_rt = GetRoadTypeRoad(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;
if (default_gfx) {
if (HasBit(rti->flags, ROTF_CATENARY)) {
if (_loaded_newgrf_features.tram == TRAMWAY_REPLACE_DEPOT_WITH_TRACK && road_rt == INVALID_ROADTYPE && !rti->UsesOverlay()) {
if (HasBit(main_rti->flags, ROTF_CATENARY)) {
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 */
relocation = SPR_TRAMWAY_DEPOT_WITH_TRACK - SPR_ROAD_DEPOT;
default_gfx = false;
@ -1858,21 +1879,11 @@ static void DrawTile_Road(TileInfo *ti)
relocation -= SPR_ROAD_DEPOT;
}
DiagDirection dir = GetRoadDepotDirection(ti->tile);
const DrawTileSprites *dts = &_road_depot[dir];
DrawGroundSprite(dts->ground.sprite, PAL_NONE);
/* Draw road, tram catenary */
DrawRoadCatenary(ti);
if (default_gfx) {
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, COMPANY_SPRITE_COLOUR(GetTileOwner(ti->tile)));
DrawRailTileSeq(ti, dts, TO_BUILDINGS, relocation, 0, palette);
break;
}
}
@ -1890,7 +1901,9 @@ void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt)
{
PaletteID palette = COMPANY_SPRITE_COLOUR(_local_company);
RoadTramType rtt = GetRoadTramType(rt);
const RoadTypeInfo *rti = GetRoadTypeInfo(rt);
uint road_offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(dir));
int relocation = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_DEPOT);
bool default_gfx = relocation == 0;
if (default_gfx) {
@ -1911,6 +1924,16 @@ void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt)
const DrawTileSprites *dts = &_road_depot[dir];
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) {
uint offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(dir));
if (rti->UsesOverlay()) {