|
@@ -2,49 +2,48 @@
|
|
|
|
|
|
/*
|
|
|
* This file is part of OpenTTD.
|
|
|
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
|
|
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
|
|
*/
|
|
|
|
|
|
/** @file station_cmd.cpp Handling of station tiles. */
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
#include "aircraft.h"
|
|
|
#include "bridge_map.h"
|
|
|
#include "cmd_helper.h"
|
|
|
#include "landscape.h"
|
|
|
#include "viewport_func.h"
|
|
|
#include "command_func.h"
|
|
|
#include "town.h"
|
|
|
#include "news_func.h"
|
|
|
#include "train.h"
|
|
|
#include "roadveh.h"
|
|
|
#include "industry.h"
|
|
|
#include "newgrf_cargo.h"
|
|
|
#include "newgrf_station.h"
|
|
|
#include "newgrf_commons.h"
|
|
|
#include "pathfinder/yapf/yapf_cache.h"
|
|
|
#include "road_internal.h" /* For drawing catenary/checking road removal */
|
|
|
#include "variables.h"
|
|
|
#include "autoslope.h"
|
|
|
#include "water.h"
|
|
|
#include "station_gui.h"
|
|
|
#include "strings_func.h"
|
|
|
#include "functions.h"
|
|
|
#include "window_func.h"
|
|
|
#include "date_func.h"
|
|
|
#include "vehicle_func.h"
|
|
|
#include "string_func.h"
|
|
|
#include "animated_tile_func.h"
|
|
|
#include "elrail_func.h"
|
|
|
#include "station_base.h"
|
|
|
#include "roadstop_base.h"
|
|
|
#include "waypoint_base.h"
|
|
|
#include "waypoint_func.h"
|
|
|
#include "pbs.h"
|
|
|
#include "debug.h"
|
|
|
#include "core/random_func.hpp"
|
|
|
#include "company_base.h"
|
|
|
#include "newgrf.h"
|
|
|
|
|
@@ -2435,90 +2434,49 @@ static void DrawTile_Station(TileInfo *t
|
|
|
image += total_offset;
|
|
|
}
|
|
|
DrawGroundSprite(image, GroundSpritePaletteTransform(image, pal, palette));
|
|
|
|
|
|
/* PBS debugging, draw reserved tracks darker */
|
|
|
if (_game_mode != GM_MENU && _settings_client.gui.show_track_reservation && HasStationRail(ti->tile) && HasStationReservation(ti->tile)) {
|
|
|
const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
|
|
|
DrawGroundSprite(GetRailStationAxis(ti->tile) == AXIS_X ? rti->base_sprites.single_x : rti->base_sprites.single_y, PALETTE_CRASH);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (HasStationRail(ti->tile) && HasCatenaryDrawn(GetRailType(ti->tile)) && IsStationTileElectrifiable(ti->tile)) DrawCatenary(ti);
|
|
|
|
|
|
if (HasBit(roadtypes, ROADTYPE_TRAM)) {
|
|
|
Axis axis = GetRoadStopDir(ti->tile) == DIAGDIR_NE ? AXIS_X : AXIS_Y;
|
|
|
DrawGroundSprite((HasBit(roadtypes, ROADTYPE_ROAD) ? SPR_TRAMWAY_OVERLAY : SPR_TRAMWAY_TRAM) + (axis ^ 1), PAL_NONE);
|
|
|
DrawTramCatenary(ti, axis == AXIS_X ? ROAD_X : ROAD_Y);
|
|
|
}
|
|
|
|
|
|
if (IsRailWaypoint(ti->tile)) {
|
|
|
/* Don't offset the waypoint graphics; they're always the same. */
|
|
|
total_offset = 0;
|
|
|
}
|
|
|
|
|
|
DrawStationTileSeq(ti, t, TO_BUILDINGS, total_offset, relocation, palette);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Draws a station, waypoint or depot including all subsprites on a tile.
|
|
|
* @param ti The tile to draw on
|
|
|
* @param dts Sprite and subsprites to draw
|
|
|
* @param to The transparancy bit that toggles drawing of these sprites
|
|
|
* @param total_offset Sprite-Offset between the current railtype and normal rail
|
|
|
* @param relocation Sprite-Offset for NewGRF defined stations
|
|
|
* @param default_palette The default recolour sprite to use (typically company colour)
|
|
|
*/
|
|
|
void DrawStationTileSeq(const TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, int32 total_offset, uint32 relocation, SpriteID default_palette)
|
|
|
{
|
|
|
const DrawTileSeqStruct *dtss;
|
|
|
foreach_draw_tile_seq(dtss, dts->seq) {
|
|
|
SpriteID image = dtss->image.sprite;
|
|
|
|
|
|
/* Stop drawing sprite sequence once we meet a sprite that doesn't have to be opaque */
|
|
|
if (IsInvisibilitySet(to) && !HasBit(image, SPRITE_MODIFIER_OPAQUE)) return;
|
|
|
|
|
|
if (relocation == 0 || HasBit(image, SPRITE_MODIFIER_USE_OFFSET)) {
|
|
|
image += total_offset;
|
|
|
} else {
|
|
|
image += relocation;
|
|
|
}
|
|
|
|
|
|
SpriteID pal = SpriteLayoutPaletteTransform(image, dtss->image.pal, default_palette);
|
|
|
|
|
|
if ((byte)dtss->delta_z != 0x80) {
|
|
|
AddSortableSpriteToDraw(
|
|
|
image, pal,
|
|
|
ti->x + dtss->delta_x, ti->y + dtss->delta_y,
|
|
|
dtss->size_x, dtss->size_y,
|
|
|
dtss->size_z, ti->z + dtss->delta_z,
|
|
|
!HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to)
|
|
|
);
|
|
|
} else {
|
|
|
/* For stations and original spritelayouts delta_x and delta_y are signed */
|
|
|
AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y, !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to));
|
|
|
}
|
|
|
}
|
|
|
DrawCommonTileSeq(ti, t, TO_BUILDINGS, total_offset, relocation, palette);
|
|
|
}
|
|
|
|
|
|
void StationPickerDrawSprite(int x, int y, StationType st, RailType railtype, RoadType roadtype, int image)
|
|
|
{
|
|
|
int32 total_offset = 0;
|
|
|
SpriteID pal = COMPANY_SPRITE_COLOUR(_local_company);
|
|
|
const DrawTileSprites *t = &_station_display_datas[st][image];
|
|
|
|
|
|
if (railtype != INVALID_RAILTYPE) {
|
|
|
const RailtypeInfo *rti = GetRailTypeInfo(railtype);
|
|
|
total_offset = rti->total_offset;
|
|
|
}
|
|
|
|
|
|
SpriteID img = t->ground.sprite;
|
|
|
DrawSprite(img + total_offset, HasBit(img, PALETTE_MODIFIER_COLOUR) ? pal : PAL_NONE, x, y);
|
|
|
|
|
|
if (roadtype == ROADTYPE_TRAM) {
|
|
|
DrawSprite(SPR_TRAMWAY_TRAM + (t->ground.sprite == SPR_ROAD_PAVED_STRAIGHT_X ? 1 : 0), PAL_NONE, x, y);
|
|
|
}
|
|
|
|
|
|
const DrawTileSeqStruct *dtss;
|
|
|
foreach_draw_tile_seq(dtss, t->seq) {
|
|
|
Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z);
|
|
|
DrawSprite(dtss->image.sprite + total_offset, pal, x + pt.x, y + pt.y);
|