mirror of https://github.com/OpenTTD/OpenTTD
Add: Draw roadbits in road depots.
parent
63afc96d2a
commit
cf955bc24b
|
@ -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()) {
|
||||||
|
|
Loading…
Reference in New Issue