mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-12 02:19:41 +00:00
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
This commit is contained in:
parent
83f9e141e0
commit
febc5150c9
@ -434,6 +434,9 @@ void DrawCatenary(const TileInfo *ti)
|
||||
{
|
||||
if (_patches.disable_elrails) return;
|
||||
|
||||
/* Do not draw catenary if it is invisible */
|
||||
if (IsInvisibilitySet(TO_CATENARY)) return;
|
||||
|
||||
if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile)) {
|
||||
TileIndex head = GetNorthernBridgeEnd(ti->tile);
|
||||
|
||||
|
@ -303,6 +303,9 @@ static void DrawTile_Industry(TileInfo *ti)
|
||||
|
||||
DrawGroundSprite(image, pal);
|
||||
|
||||
/* If industries are transparent and invisible, do not draw the upper part */
|
||||
if (IsInvisibilitySet(TO_INDUSTRIES)) return;
|
||||
|
||||
/* Add industry on top of the ground? */
|
||||
image = dits->building.sprite;
|
||||
if (image != 0) {
|
||||
|
@ -1068,7 +1068,6 @@ STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Autoren
|
||||
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Autorenew minimum needed money for renew: {ORANGE}{STRING1}
|
||||
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Duration of error message: {ORANGE}{STRING1}
|
||||
STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Show town population in the town name label: {ORANGE}{STRING1}
|
||||
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Invisible trees: {ORANGE}{STRING1}
|
||||
|
||||
STR_CONFIG_PATCHES_LAND_GENERATOR :{LTBLUE}Land generator: {ORANGE}{STRING1}
|
||||
STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL :Original
|
||||
@ -3373,6 +3372,7 @@ STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Toggle t
|
||||
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Toggle transparency for structures like lighthouses and antennas. CTRL+click to lock.
|
||||
STR_TRANSPARENT_CATENARY_DESC :{BLACK}Toggle transparency for catenary. CTRL+click to lock.
|
||||
STR_TRANSPARENT_LOADING_DESC :{BLACK}Toggle transparency for loading indicators. CTRL+click to lock.
|
||||
STR_TRANSPARENT_INVISIBLE_DESC :{BLACK}Set objects invisible instead of transparent
|
||||
|
||||
STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
|
||||
STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
|
||||
|
@ -1067,6 +1067,19 @@ static void MainWindowWndProc(Window *w, WindowEvent *e)
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
|
||||
case '1' | WKC_CTRL | WKC_SHIFT:
|
||||
case '2' | WKC_CTRL | WKC_SHIFT:
|
||||
case '3' | WKC_CTRL | WKC_SHIFT:
|
||||
case '4' | WKC_CTRL | WKC_SHIFT:
|
||||
case '5' | WKC_CTRL | WKC_SHIFT:
|
||||
case '6' | WKC_CTRL | WKC_SHIFT:
|
||||
case '7' | WKC_CTRL | WKC_SHIFT:
|
||||
case '8' | WKC_CTRL | WKC_SHIFT:
|
||||
/* Invisibility toggle hot keys */
|
||||
ToggleInvisibilityWithTransparency((TransparencyOption)(e->we.keypress.keycode - ('1' | WKC_CTRL | WKC_SHIFT)));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
|
||||
case 'X' | WKC_CTRL:
|
||||
ShowTransparencyToolbar();
|
||||
break;
|
||||
|
@ -322,6 +322,9 @@ void DrawTileLayout(const TileInfo *ti, const SpriteGroup *group, byte stage, Ho
|
||||
|
||||
if (GB(image, 0, SPRITE_WIDTH) != 0) DrawGroundSprite(image, pal);
|
||||
|
||||
/* End now, if houses are invisible */
|
||||
if (IsInvisibilitySet(TO_HOUSES)) return;
|
||||
|
||||
foreach_draw_tile_seq(dtss, dts->seq) {
|
||||
if (GB(dtss->image.sprite, 0, SPRITE_WIDTH) == 0) continue;
|
||||
|
||||
|
@ -185,6 +185,9 @@ void IndustryDrawTileLayout(const TileInfo *ti, const SpriteGroup *group, byte r
|
||||
|
||||
if (GB(image, 0, SPRITE_WIDTH) != 0) DrawGroundSprite(image, pal);
|
||||
|
||||
/* End now if industries are invisible */
|
||||
if (IsInvisibilitySet(TO_INDUSTRIES)) return;
|
||||
|
||||
foreach_draw_tile_seq(dtss, dts->seq) {
|
||||
if (GB(dtss->image.sprite, 0, SPRITE_WIDTH) == 0) continue;
|
||||
|
||||
|
@ -1772,7 +1772,12 @@ static void DrawTile_Track(TileInfo *ti)
|
||||
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED);
|
||||
|
||||
if (IsRailDepot(ti->tile)) {
|
||||
dts = &_depot_gfx_table[GetRailDepotDirection(ti->tile)];
|
||||
if (IsInvisibilitySet(TO_BUILDINGS)) {
|
||||
/* Draw rail instead of depot */
|
||||
dts = &_depot_invisible_gfx_table[GetRailDepotDirection(ti->tile)];
|
||||
} else {
|
||||
dts = &_depot_gfx_table[GetRailDepotDirection(ti->tile)];
|
||||
}
|
||||
|
||||
relocation = rti->total_offset;
|
||||
|
||||
@ -1836,6 +1841,9 @@ default_waypoint:
|
||||
|
||||
if (HasCatenary(GetRailType(ti->tile))) DrawCatenary(ti);
|
||||
|
||||
/* End now if buildings are invisible */
|
||||
if (IsInvisibilitySet(TO_BUILDINGS)) return;
|
||||
|
||||
foreach_draw_tile_seq(dtss, dts->seq) {
|
||||
SpriteID image = dtss->image.sprite;
|
||||
SpriteID pal;
|
||||
|
@ -970,6 +970,9 @@ static bool AlwaysDrawUnpavedRoads(TileIndex tile, Roadside roadside)
|
||||
*/
|
||||
void DrawTramCatenary(TileInfo *ti, RoadBits tram)
|
||||
{
|
||||
/* Do not draw catenary if it is invisible */
|
||||
if (IsInvisibilitySet(TO_CATENARY)) return;
|
||||
|
||||
/* Don't draw the catenary under a low bridge */
|
||||
if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile) && !IsTransparencySet(TO_CATENARY)) {
|
||||
uint height = GetBridgeHeight(GetNorthernBridgeEnd(ti->tile));
|
||||
@ -1154,6 +1157,9 @@ static void DrawTile_Road(TileInfo *ti)
|
||||
|
||||
DrawGroundSprite(dts->ground.sprite, PAL_NONE);
|
||||
|
||||
/* End now if buildings are invisible */
|
||||
if (IsInvisibilitySet(TO_BUILDINGS)) break;
|
||||
|
||||
for (dtss = dts->seq; dtss->image.sprite != 0; dtss++) {
|
||||
SpriteID image = dtss->image.sprite;
|
||||
SpriteID pal;
|
||||
|
@ -1296,6 +1296,7 @@ static const SettingDescGlobVarList _misc_settings[] = {
|
||||
SDTG_VAR("player_face", SLE_UINT32, S, 0, _player_face, 0,0,0xFFFFFFFF,0, STR_NULL, NULL),
|
||||
SDTG_VAR("transparency_options", SLE_UINT, S, 0, _transparency_opt, 0,0,0x1FF,0, STR_NULL, NULL),
|
||||
SDTG_VAR("transparency_locks", SLE_UINT, S, 0, _transparency_lock, 0,0,0x1FF,0, STR_NULL, NULL),
|
||||
SDTG_VAR("invisibility_options", SLE_UINT, S, 0, _invisibility_opt, 0,0, 0xFF,0, STR_NULL, NULL),
|
||||
SDTG_STR("keyboard", SLE_STRB, S, 0, _keyboard_opt[0], NULL, STR_NULL, NULL),
|
||||
SDTG_STR("keyboard_caps", SLE_STRB, S, 0, _keyboard_opt[1], NULL, STR_NULL, NULL),
|
||||
SDTG_END()
|
||||
@ -1379,7 +1380,6 @@ const SettingDesc _patch_settings[] = {
|
||||
SDT_VAR(Patches, errmsg_duration, SLE_UINT8, S, 0, 5, 0, 20, 0, STR_CONFIG_PATCHES_ERRMSG_DURATION, NULL),
|
||||
SDT_VAR(Patches, toolbar_pos, SLE_UINT8, S,MS, 0, 0, 2, 0, STR_CONFIG_PATCHES_TOOLBAR_POS, v_PositionMainToolbar),
|
||||
SDT_VAR(Patches, window_snap_radius, SLE_UINT8, S,D0, 10, 1, 32, 0, STR_CONFIG_PATCHES_SNAP_RADIUS, NULL),
|
||||
SDT_BOOL(Patches, invisible_trees, S, 0, false, STR_CONFIG_PATCHES_INVISIBLE_TREES, RedrawScreen),
|
||||
SDT_BOOL(Patches, population_in_label, S, 0, true, STR_CONFIG_PATCHES_POPULATION_IN_LABEL, PopulationInLabelActive),
|
||||
SDT_VAR(Patches, map_x, SLE_UINT8, S, 0, 8, 6, 11, 0, STR_CONFIG_PATCHES_MAP_X, NULL),
|
||||
SDT_VAR(Patches, map_y, SLE_UINT8, S, 0, 8, 6, 11, 0, STR_CONFIG_PATCHES_MAP_Y, NULL),
|
||||
|
@ -712,7 +712,6 @@ static const char *_patches_ui[] = {
|
||||
"toolbar_pos",
|
||||
"measure_tooltip",
|
||||
"window_snap_radius",
|
||||
"invisible_trees",
|
||||
"population_in_label",
|
||||
"link_terraform_toolbar",
|
||||
"liveries",
|
||||
|
@ -98,7 +98,6 @@ struct Patches {
|
||||
bool realistic_acceleration; ///< realistic acceleration for trains
|
||||
bool wagon_speed_limits; ///< enable wagon speed limits
|
||||
bool forbid_90_deg; ///< forbid trains to make 90 deg turns
|
||||
bool invisible_trees; ///< don't show trees when buildings are transparent
|
||||
bool no_servicing_if_no_breakdowns; ///< dont send vehicles to depot when breakdowns are disabled
|
||||
bool link_terraform_toolbar; ///< display terraform toolbar when displaying rail, road, water and airport toolbars
|
||||
bool reverse_scroll; ///< Right-Click-Scrolling scrolls in the opposite direction
|
||||
|
@ -2184,6 +2184,9 @@ static void DrawTile_Station(TileInfo *ti)
|
||||
DrawTramCatenary(ti, axis == AXIS_X ? ROAD_X : ROAD_Y);
|
||||
}
|
||||
|
||||
/* End now if buildings are invisible */
|
||||
if (IsInvisibilitySet(TO_BUILDINGS)) return;
|
||||
|
||||
const DrawTileSeqStruct *dtss;
|
||||
foreach_draw_tile_seq(dtss, t->seq) {
|
||||
SpriteID image = dtss->image.sprite;
|
||||
|
@ -33,6 +33,12 @@ static const DrawTileSprites _depot_gfx_table[] = {
|
||||
{ {SPR_FLAT_GRASS_TILE, PAL_NONE}, _depot_gfx_NW }
|
||||
};
|
||||
|
||||
static const DrawTileSprites _depot_invisible_gfx_table[] = {
|
||||
{ {SPR_RAIL_TRACK_X, PAL_NONE}, _depot_gfx_NE },
|
||||
{ {SPR_RAIL_TRACK_Y, PAL_NONE}, _depot_gfx_SE },
|
||||
{ {SPR_RAIL_TRACK_X, PAL_NONE}, _depot_gfx_SW },
|
||||
{ {SPR_RAIL_TRACK_Y, PAL_NONE}, _depot_gfx_NW }
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _waypoint_gfx_X[] = {
|
||||
TILE_SEQ_LINE((1 << PALETTE_MODIFIER_COLOR) | SPR_WAYPOINT_X_1, 0, 0, 16, 5)
|
||||
|
@ -189,6 +189,9 @@ static void DrawTile_Town(TileInfo *ti)
|
||||
pal = dcts->ground.pal;
|
||||
DrawGroundSprite(image, pal);
|
||||
|
||||
/* If houses are invisible, do not draw the upper part */
|
||||
if (IsInvisibilitySet(TO_HOUSES)) return;
|
||||
|
||||
/* Add a house on top of the ground? */
|
||||
image = dcts->building.sprite;
|
||||
if (image != 0) {
|
||||
|
@ -28,6 +28,7 @@ enum TransparencyOption {
|
||||
typedef uint TransparencyOptionBits; ///< transparency option bits
|
||||
extern TransparencyOptionBits _transparency_opt;
|
||||
extern TransparencyOptionBits _transparency_lock;
|
||||
extern TransparencyOptionBits _invisibility_opt;
|
||||
|
||||
/**
|
||||
* Check if the transparency option bit is set
|
||||
@ -40,6 +41,17 @@ static inline bool IsTransparencySet(TransparencyOption to)
|
||||
return (HasBit(_transparency_opt, to) && _game_mode != GM_MENU);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the invisibility option bit is set
|
||||
* and if we aren't in the game menu (there's never transparency)
|
||||
*
|
||||
* @param to the structure which invisibility option is ask for
|
||||
*/
|
||||
static inline bool IsInvisibilitySet(TransparencyOption to)
|
||||
{
|
||||
return (HasBit(_transparency_opt & _invisibility_opt, to) && _game_mode != GM_MENU);
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle the transparency option bit
|
||||
*
|
||||
@ -50,6 +62,34 @@ static inline void ToggleTransparency(TransparencyOption to)
|
||||
ToggleBit(_transparency_opt, to);
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle the invisibility option bit
|
||||
*
|
||||
* @param to the structure which invisibility option is toggle
|
||||
*/
|
||||
static inline void ToggleInvisibility(TransparencyOption to)
|
||||
{
|
||||
ToggleBit(_invisibility_opt, to);
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggles between invisible and solid state.
|
||||
* If object is transparent, then it is made invisible.
|
||||
* Used by the keyboard shortcuts.
|
||||
*
|
||||
* @param to the object type which invisibility option to toggle
|
||||
*/
|
||||
static inline void ToggleInvisibilityWithTransparency(TransparencyOption to)
|
||||
{
|
||||
if (IsInvisibilitySet(to)) {
|
||||
ClrBit(_invisibility_opt, to);
|
||||
ClrBit(_transparency_opt, to);
|
||||
} else {
|
||||
SetBit(_invisibility_opt, to);
|
||||
SetBit(_transparency_opt, to);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle the transparency lock bit
|
||||
*
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
TransparencyOptionBits _transparency_opt;
|
||||
TransparencyOptionBits _transparency_lock;
|
||||
TransparencyOptionBits _invisibility_opt;
|
||||
|
||||
enum TransparencyToolbarWidgets{
|
||||
TTW_WIDGET_SIGNS = 3, ///< Make signs background transparent
|
||||
@ -25,6 +26,9 @@ enum TransparencyToolbarWidgets{
|
||||
TTW_WIDGET_CATENARY, ///< Make catenary transparent
|
||||
TTW_WIDGET_LOADING, ///< Make loading indicators transparent
|
||||
TTW_WIDGET_END, ///< End of toggle buttons
|
||||
|
||||
/* Panel with buttons for invisibility */
|
||||
TTW_BUTTONS = 12, ///< Panel with 'invisibility' buttons
|
||||
};
|
||||
|
||||
static void TransparencyToolbWndProc(Window *w, WindowEvent *e)
|
||||
@ -41,6 +45,18 @@ static void TransparencyToolbWndProc(Window *w, WindowEvent *e)
|
||||
for (uint i = TO_SIGNS; i < TO_END; i++) {
|
||||
if (HasBit(_transparency_lock, i)) DrawSprite(SPR_LOCK, PAL_NONE, w->widget[TTW_WIDGET_SIGNS + i].left + 1, w->widget[TTW_WIDGET_SIGNS + i].top + 1);
|
||||
}
|
||||
|
||||
/* Do not draw button for invisible loading indicators */
|
||||
for (uint i = 0; i < 8; i++) {
|
||||
if (i < TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) {
|
||||
DrawFrameRect(i * 22, 38, i * 22 + 19, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE);
|
||||
} else if (i == TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) {
|
||||
DrawFrameRect(i * 22, 38, i * 22 + 41, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE);
|
||||
} else { // i > TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS
|
||||
DrawFrameRect((i + 1) * 22, 38, (i + 1) * 22 + 19, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case WE_CLICK:
|
||||
@ -55,7 +71,23 @@ static void TransparencyToolbWndProc(Window *w, WindowEvent *e)
|
||||
SndPlayFx(SND_15_BEEP);
|
||||
MarkWholeScreenDirty();
|
||||
}
|
||||
} else if (e->we.click.widget == TTW_BUTTONS) {
|
||||
uint x = e->we.click.pt.x / 22;
|
||||
|
||||
if (x > TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) x--;
|
||||
if (x > TTW_WIDGET_CATENARY - TTW_WIDGET_SIGNS) break;
|
||||
|
||||
ToggleInvisibility((TransparencyOption)x);
|
||||
SndPlayFx(SND_15_BEEP);
|
||||
|
||||
/* Redraw whole screen only if transparency is set */
|
||||
if (IsTransparencySet((TransparencyOption)x)) {
|
||||
MarkWholeScreenDirty();
|
||||
} else {
|
||||
w->InvalidateWidget(TTW_BUTTONS);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -77,11 +109,13 @@ static const Widget _transparency_widgets[] = {
|
||||
{ WWT_IMGBTN, RESIZE_NONE, 7, 175, 196, 14, 35, SPR_BUILD_X_ELRAIL, STR_TRANSPARENT_CATENARY_DESC},
|
||||
{ WWT_IMGBTN, RESIZE_NONE, 7, 197, 218, 14, 35, SPR_IMG_TRAINLIST, STR_TRANSPARENT_LOADING_DESC},
|
||||
|
||||
{ WWT_PANEL, RESIZE_NONE, 7, 0, 218, 36, 48, 0x0, STR_TRANSPARENT_INVISIBLE_DESC},
|
||||
|
||||
{ WIDGETS_END},
|
||||
};
|
||||
|
||||
static const WindowDesc _transparency_desc = {
|
||||
WDP_ALIGN_TBR, 58+36, 219, 36, 219, 36,
|
||||
WDP_ALIGN_TBR, 58+36, 219, 49, 219, 49,
|
||||
WC_TRANSPARENCY_TOOLBAR, WC_NONE,
|
||||
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
|
||||
_transparency_widgets,
|
||||
|
@ -445,7 +445,7 @@ static void DrawTile_Trees(TileInfo *ti)
|
||||
DrawClearLandFence(ti);
|
||||
|
||||
/* Do not draw trees when the invisible trees patch and transparency tree are set */
|
||||
if (IsTransparencySet(TO_TREES) && _patches.invisible_trees) return;
|
||||
if (IsInvisibilitySet(TO_TREES)) return;
|
||||
|
||||
uint16 tmp = ti->x;
|
||||
|
||||
|
@ -719,7 +719,11 @@ static CommandCost ClearTile_TunnelBridge(TileIndex tile, byte flags)
|
||||
*/
|
||||
static void DrawBridgePillars(const PalSpriteID *psid, const TileInfo* ti, Axis axis, BridgeType type, int x, int y, int z_bridge)
|
||||
{
|
||||
/* Do not draw bridge pillars if they are invisible */
|
||||
if (IsInvisibilitySet(TO_BRIDGES)) return;
|
||||
|
||||
SpriteID image = psid->sprite;
|
||||
|
||||
if (image != 0) {
|
||||
bool drawfarpillar = !HasBit(GetBridgeSpec(type)->flags, 0);
|
||||
|
||||
@ -771,8 +775,9 @@ static void DrawBridgePillars(const PalSpriteID *psid, const TileInfo* ti, Axis
|
||||
* @param z the z of the bridge
|
||||
* @param offset number representing whether to level or sloped and the direction
|
||||
* @param overlay do we want to still see the road?
|
||||
* @param head are we drawing bridge head?
|
||||
*/
|
||||
static void DrawBridgeTramBits(int x, int y, byte z, int offset, bool overlay)
|
||||
static void DrawBridgeTramBits(int x, int y, byte z, int offset, bool overlay, bool head)
|
||||
{
|
||||
static const SpriteID tram_offsets[2][6] = { { 107, 108, 109, 110, 111, 112 }, { 4, 5, 15, 16, 17, 18 } };
|
||||
static const SpriteID back_offsets[6] = { 95, 96, 99, 102, 100, 101 };
|
||||
@ -785,7 +790,12 @@ static void DrawBridgeTramBits(int x, int y, byte z, int offset, bool overlay)
|
||||
|
||||
/* The sprites under the vehicles are drawn as SpriteCombine. StartSpriteCombine() has already been called
|
||||
* The bounding boxes here are the same as for bridge front/roof */
|
||||
AddSortableSpriteToDraw(SPR_TRAMWAY_BASE + tram_offsets[overlay][offset], PAL_NONE, x, y, size_x[offset], size_y[offset], 0x28, z, IsTransparencySet(TO_BRIDGES));
|
||||
if (head || !IsInvisibilitySet(TO_BRIDGES)) {
|
||||
AddSortableSpriteToDraw(SPR_TRAMWAY_BASE + tram_offsets[overlay][offset], PAL_NONE, x, y, size_x[offset], size_y[offset], 0x28, z, !head && IsTransparencySet(TO_BRIDGES));
|
||||
}
|
||||
|
||||
/* Do not draw catenary if it is set invisible */
|
||||
if (IsInvisibilitySet(TO_CATENARY)) return;
|
||||
|
||||
AddSortableSpriteToDraw(SPR_TRAMWAY_BASE + back_offsets[offset], PAL_NONE, x, y, size_x[offset], size_y[offset], 0x28, z, IsTransparencySet(TO_CATENARY));
|
||||
|
||||
@ -856,11 +866,14 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
|
||||
|
||||
DrawGroundSprite(SPR_TRAMWAY_BASE + tunnel_sprites[rts - ROADTYPES_TRAM][tunnelbridge_direction], PAL_NONE);
|
||||
|
||||
catenary = true;
|
||||
StartSpriteCombine();
|
||||
AddSortableSpriteToDraw(SPR_TRAMWAY_TUNNEL_WIRES + tunnelbridge_direction, PAL_NONE, ti->x, ti->y, BB_data[10], BB_data[11], TILE_HEIGHT, ti->z, IsTransparencySet(TO_CATENARY), BB_data[8], BB_data[9], BB_Z_SEPARATOR);
|
||||
/* Do not draw wires if they are invisible */
|
||||
if (!IsInvisibilitySet(TO_CATENARY)) {
|
||||
catenary = true;
|
||||
StartSpriteCombine();
|
||||
AddSortableSpriteToDraw(SPR_TRAMWAY_TUNNEL_WIRES + tunnelbridge_direction, PAL_NONE, ti->x, ti->y, BB_data[10], BB_data[11], TILE_HEIGHT, ti->z, IsTransparencySet(TO_CATENARY), BB_data[8], BB_data[9], BB_Z_SEPARATOR);
|
||||
}
|
||||
}
|
||||
} else if (HasCatenary(GetRailType(ti->tile))) {
|
||||
} else if (!IsInvisibilitySet(TO_CATENARY) && HasCatenary(GetRailType(ti->tile))) {
|
||||
DrawCatenary(ti);
|
||||
|
||||
catenary = true;
|
||||
@ -916,9 +929,8 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
|
||||
/* HACK set the height of the BB of a sloped ramp to 1 so a vehicle on
|
||||
* it doesn't disappear behind it
|
||||
*/
|
||||
AddSortableSpriteToDraw(
|
||||
psid->sprite, psid->pal, ti->x, ti->y, 16, 16, ti->tileh == SLOPE_FLAT ? 0 : 8, ti->z, IsTransparencySet(TO_BRIDGES)
|
||||
);
|
||||
/* Bridge heads are drawn solid no matter how invisibility/transparency is set */
|
||||
AddSortableSpriteToDraw(psid->sprite, psid->pal, ti->x, ti->y, 16, 16, ti->tileh == SLOPE_FLAT ? 0 : 8, ti->z);
|
||||
|
||||
if (transport_type == TRANSPORT_ROAD) {
|
||||
RoadTypes rts = GetRoadTypes(ti->tile);
|
||||
@ -933,7 +945,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
|
||||
offset += 2;
|
||||
}
|
||||
/* DrawBridgeTramBits() calls EndSpriteCombine() and StartSpriteCombine() */
|
||||
DrawBridgeTramBits(ti->x, ti->y, z, offset, HasBit(rts, ROADTYPE_ROAD));
|
||||
DrawBridgeTramBits(ti->x, ti->y, z, offset, HasBit(rts, ROADTYPE_ROAD), true);
|
||||
}
|
||||
EndSpriteCombine();
|
||||
} else if (HasCatenary(GetRailType(ti->tile))) {
|
||||
@ -1044,10 +1056,12 @@ void DrawBridgeMiddle(const TileInfo* ti)
|
||||
if (transport_type == TRANSPORT_ROAD) StartSpriteCombine();
|
||||
|
||||
/* Draw floor and far part of bridge*/
|
||||
if (axis == AXIS_X) {
|
||||
AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 1, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 0, BRIDGE_Z_START);
|
||||
} else {
|
||||
AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 1, 16, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 0, BRIDGE_Z_START);
|
||||
if (!IsInvisibilitySet(TO_BRIDGES)) {
|
||||
if (axis == AXIS_X) {
|
||||
AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 1, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 0, BRIDGE_Z_START);
|
||||
} else {
|
||||
AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 1, 16, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 0, BRIDGE_Z_START);
|
||||
}
|
||||
}
|
||||
|
||||
psid++;
|
||||
@ -1057,7 +1071,7 @@ void DrawBridgeMiddle(const TileInfo* ti)
|
||||
|
||||
if (HasBit(rts, ROADTYPE_TRAM)) {
|
||||
/* DrawBridgeTramBits() calls EndSpriteCombine() and StartSpriteCombine() */
|
||||
DrawBridgeTramBits(x, y, bridge_z, axis ^ 1, HasBit(rts, ROADTYPE_ROAD));
|
||||
DrawBridgeTramBits(x, y, bridge_z, axis ^ 1, HasBit(rts, ROADTYPE_ROAD), false);
|
||||
} else {
|
||||
EndSpriteCombine();
|
||||
StartSpriteCombine();
|
||||
@ -1067,17 +1081,22 @@ void DrawBridgeMiddle(const TileInfo* ti)
|
||||
}
|
||||
|
||||
/* draw roof, the component of the bridge which is logically between the vehicle and the camera */
|
||||
if (axis == AXIS_X) {
|
||||
y += 12;
|
||||
if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 4, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 3, BRIDGE_Z_START);
|
||||
} else {
|
||||
x += 12;
|
||||
if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 4, 16, 0x28, z, IsTransparencySet(TO_BRIDGES), 3, 0, BRIDGE_Z_START);
|
||||
if (!IsInvisibilitySet(TO_BRIDGES)) {
|
||||
if (axis == AXIS_X) {
|
||||
y += 12;
|
||||
if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 4, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 3, BRIDGE_Z_START);
|
||||
} else {
|
||||
x += 12;
|
||||
if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 4, 16, 0x28, z, IsTransparencySet(TO_BRIDGES), 3, 0, BRIDGE_Z_START);
|
||||
}
|
||||
}
|
||||
|
||||
/* Draw TramFront as SpriteCombine */
|
||||
if (transport_type == TRANSPORT_ROAD) EndSpriteCombine();
|
||||
|
||||
/* Do not draw anything more if bridges are invisible */
|
||||
if (IsInvisibilitySet(TO_BRIDGES)) return;
|
||||
|
||||
psid++;
|
||||
if (ti->z + 5 == z) {
|
||||
/* draw poles below for small bridges */
|
||||
|
@ -171,6 +171,8 @@ static void DrawTile_Unmovable(TileInfo *ti)
|
||||
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED);
|
||||
DrawClearLandTile(ti, 2);
|
||||
|
||||
if (IsInvisibilitySet(TO_STRUCTURES)) break;
|
||||
|
||||
AddSortableSpriteToDraw(
|
||||
dtu->image.sprite, PAL_NONE, ti->x | dtu->delta_x, ti->y | dtu->delta_y,
|
||||
dtu->size_x, dtu->size_y, dtu->size_z, ti->z,
|
||||
@ -185,6 +187,8 @@ static void DrawTile_Unmovable(TileInfo *ti)
|
||||
|
||||
DrawGroundSprite(SPR_CONCRETE_GROUND, PAL_NONE);
|
||||
|
||||
if (IsInvisibilitySet(TO_STRUCTURES)) break;
|
||||
|
||||
AddSortableSpriteToDraw(SPR_STATUE_COMPANY, PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)), ti->x, ti->y, 16, 16, 25, ti->z, IsTransparencySet(TO_STRUCTURES));
|
||||
break;
|
||||
|
||||
@ -211,6 +215,8 @@ static void DrawTile_Unmovable(TileInfo *ti)
|
||||
t = &_unmovable_display_datas[GetCompanyHQSection(ti->tile)];
|
||||
DrawGroundSprite(t->ground.sprite, palette);
|
||||
|
||||
if (IsInvisibilitySet(TO_STRUCTURES)) break;
|
||||
|
||||
foreach_draw_tile_seq(dtss, t->seq) {
|
||||
AddSortableSpriteToDraw(
|
||||
dtss->image.sprite, palette,
|
||||
|
@ -1230,8 +1230,8 @@ static void ViewportAddSigns(DrawPixelInfo *dpi)
|
||||
const Sign *si;
|
||||
int left, top, right, bottom;
|
||||
|
||||
if (!HasBit(_display_opt, DO_SHOW_SIGNS))
|
||||
return;
|
||||
/* Signs are turned off or are invisible */
|
||||
if (!HasBit(_display_opt, DO_SHOW_SIGNS) || IsInvisibilitySet(TO_SIGNS)) return;
|
||||
|
||||
left = dpi->left;
|
||||
top = dpi->top;
|
||||
@ -1495,6 +1495,12 @@ static void ViewportDrawStrings(DrawPixelInfo *dpi, const StringSpriteToDraw *ss
|
||||
uint16 colour;
|
||||
|
||||
if (ss->width != 0) {
|
||||
/* Do not draw signs nor station names if they are set invisible */
|
||||
if (IsInvisibilitySet(TO_SIGNS) && ss->string != STR_2806) {
|
||||
ss = ss->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
int x = UnScaleByZoom(ss->x, zoom) - 1;
|
||||
int y = UnScaleByZoom(ss->y, zoom) - 1;
|
||||
int bottom = y + 11;
|
||||
@ -1958,7 +1964,8 @@ static bool CheckClickOnSign(const ViewPort *vp, int x, int y)
|
||||
{
|
||||
const Sign *si;
|
||||
|
||||
if (!HasBit(_display_opt, DO_SHOW_SIGNS) || _current_player == PLAYER_SPECTATOR) return false;
|
||||
/* Signs are turned off, or they are transparent and invisibility is ON, or player is a spectator */
|
||||
if (!HasBit(_display_opt, DO_SHOW_SIGNS) || IsInvisibilitySet(TO_SIGNS) || _current_player == PLAYER_SPECTATOR) return false;
|
||||
|
||||
switch (vp->zoom) {
|
||||
case ZOOM_LVL_NORMAL:
|
||||
|
@ -597,6 +597,9 @@ static void DrawWaterStuff(const TileInfo *ti, const WaterDrawTileStruct *wdts,
|
||||
if (image < 4) image += water_base;
|
||||
if (draw_ground) DrawGroundSprite(image, PAL_NONE);
|
||||
|
||||
/* End now if buildings are invisible */
|
||||
if (IsInvisibilitySet(TO_BUILDINGS)) return;
|
||||
|
||||
for (; wdts->delta_x != 0x80; wdts++) {
|
||||
AddSortableSpriteToDraw(wdts->image + base + ((wdts->image < 24) ? locks_base : 0), palette,
|
||||
ti->x + wdts->delta_x, ti->y + wdts->delta_y,
|
||||
|
Loading…
Reference in New Issue
Block a user