mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-11 13:10:45 +00:00
Port of old vehicles visible in tunnels patch
from http://dev.openttdcoop.org/projects/clientpatches/repository/changes/VehicelsInTunnels.diffhttp://dev.openttdcoop.org/projects/clientpatches/repository/changes/VehicelsInTunnels.diff
This commit is contained in:
parent
67366cf03d
commit
5e7638a6d0
@ -2275,6 +2275,7 @@ STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Toggle t
|
||||
STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Toggle transparency for structures like lighthouses and antennas. Ctrl+Click to lock
|
||||
STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Toggle transparency for catenary. Ctrl+Click to lock
|
||||
STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Toggle transparency for loading indicators. Ctrl+Click to lock
|
||||
STR_TRANSPARENT_TUNNELS_TOOLTIP :{BLACK}Toggle transparency for vehicles in tunnels. Ctrl+Click to lock.
|
||||
STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Set objects invisible instead of transparent
|
||||
|
||||
# Linkgraph legend window
|
||||
|
@ -1160,7 +1160,7 @@ bool IndividualRoadVehicleController(RoadVehicle *v, const RoadVehicle *prev)
|
||||
v->x_pos = gp.x;
|
||||
v->y_pos = gp.y;
|
||||
v->UpdatePosition();
|
||||
if ((v->vehstatus & VS_HIDDEN) == 0) v->Vehicle::UpdateViewport(true);
|
||||
if (v->IsDrawn()) v->Vehicle::UpdateViewport(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1568,7 +1568,7 @@ static bool RoadVehController(RoadVehicle *v)
|
||||
v->SetLastSpeed();
|
||||
|
||||
for (RoadVehicle *u = v; u != NULL; u = u->Next()) {
|
||||
if ((u->vehstatus & VS_HIDDEN) != 0) continue;
|
||||
if (!(u->IsDrawn())) continue;
|
||||
|
||||
u->UpdateViewport(false, false);
|
||||
}
|
||||
|
@ -255,7 +255,7 @@ type = SLE_UINT
|
||||
var = _transparency_opt
|
||||
def = 0
|
||||
min = 0
|
||||
max = 0x1FF
|
||||
max = 0x3FF
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTG_VAR]
|
||||
@ -264,7 +264,7 @@ type = SLE_UINT
|
||||
var = _transparency_lock
|
||||
def = 0
|
||||
min = 0
|
||||
max = 0x1FF
|
||||
max = 0x3FF
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTG_VAR]
|
||||
|
@ -3343,7 +3343,7 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
|
||||
v->x_pos = gp.x;
|
||||
v->y_pos = gp.y;
|
||||
v->UpdatePosition();
|
||||
if ((v->vehstatus & VS_HIDDEN) == 0) v->Vehicle::UpdateViewport(true);
|
||||
if (v->IsDrawn()) v->Vehicle::UpdateViewport(true);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -3870,7 +3870,7 @@ static bool TrainLocoHandler(Train *v, bool mode)
|
||||
}
|
||||
|
||||
for (Train *u = v; u != NULL; u = u->Next()) {
|
||||
if ((u->vehstatus & VS_HIDDEN) != 0) continue;
|
||||
if (!(u->IsDrawn())) continue;
|
||||
|
||||
u->UpdateViewport(false, false);
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ enum TransparencyOption {
|
||||
TO_STRUCTURES, ///< other objects such as transmitters and lighthouses
|
||||
TO_CATENARY, ///< catenary
|
||||
TO_LOADING, ///< loading indicators
|
||||
TO_TUNNELS, ///< vehicles in tunnels
|
||||
TO_END,
|
||||
TO_INVALID, ///< Invalid transparency option
|
||||
};
|
||||
|
@ -52,14 +52,15 @@ public:
|
||||
case WID_TT_BRIDGES:
|
||||
case WID_TT_STRUCTURES:
|
||||
case WID_TT_CATENARY:
|
||||
case WID_TT_LOADING: {
|
||||
case WID_TT_LOADING:
|
||||
case WIT_TT_TUNNELS: {
|
||||
uint i = widget - WID_TT_BEGIN;
|
||||
if (HasBit(_transparency_lock, i)) DrawSprite(SPR_LOCK, PAL_NONE, r.left + 1, r.top + 1);
|
||||
break;
|
||||
}
|
||||
case WID_TT_BUTTONS:
|
||||
for (uint i = WID_TT_BEGIN; i < WID_TT_END; i++) {
|
||||
if (i == WID_TT_LOADING) continue; // Do not draw button for invisible loading indicators.
|
||||
if (i == WID_TT_LOADING || i == WIT_TT_TUNNELS) continue; // Do not draw button for invisible loading indicators.
|
||||
|
||||
const NWidgetBase *wi = this->GetWidget<NWidgetBase>(i);
|
||||
DrawFrameRect(wi->pos_x + 1, r.top + 2, wi->pos_x + wi->current_x - 2, r.bottom - 2, COLOUR_PALE_GREEN,
|
||||
@ -141,6 +142,7 @@ static const NWidgetPart _nested_transparency_widgets[] = {
|
||||
NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_TT_STRUCTURES), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_TRANSMITTER, STR_TRANSPARENT_STRUCTURES_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_TT_CATENARY), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_BUILD_X_ELRAIL, STR_TRANSPARENT_CATENARY_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_TT_LOADING), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_TRAINLIST, STR_TRANSPARENT_LOADING_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WIT_TT_TUNNELS), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_ROAD_TUNNEL, STR_TRANSPARENT_TUNNELS_TOOLTIP),
|
||||
NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetFill(1, 1), EndContainer(),
|
||||
EndContainer(),
|
||||
/* Panel with 'invisibility' buttons. */
|
||||
|
@ -221,6 +221,17 @@ uint Vehicle::Crash(bool flooded)
|
||||
return RandomRange(pass + 1); // Randomise deceased passengers.
|
||||
}
|
||||
|
||||
/**
|
||||
* Get whether a the vehicle should be drawn (i.e. if it isn't hidden, or it is in a tunnel but being shown transparently)
|
||||
* @return whether to show vehicle
|
||||
*/
|
||||
bool Vehicle::IsDrawn() const
|
||||
{
|
||||
return !(this->vehstatus & VS_HIDDEN) ||
|
||||
(IsTransparencySet(TO_TUNNELS) &&
|
||||
((this->type == VEH_TRAIN && Train::From(this)->track == TRACK_BIT_WORMHOLE) ||
|
||||
(this->type == VEH_ROAD && RoadVehicle::From(this)->state == RVSB_WORMHOLE)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a "NewGrf Bug" error message for a engine, and pauses the game if not networking.
|
||||
@ -809,7 +820,7 @@ Vehicle::~Vehicle()
|
||||
|
||||
/* sometimes, eg. for disaster vehicles, when company bankrupts, when removing crashed/flooded vehicles,
|
||||
* it may happen that vehicle chain is deleted when visible */
|
||||
if (!(this->vehstatus & VS_HIDDEN)) this->MarkAllViewportsDirty();
|
||||
if (this->IsDrawn()) this->MarkAllViewportsDirty();
|
||||
|
||||
Vehicle *v = this->Next();
|
||||
this->SetNext(NULL);
|
||||
@ -1013,7 +1024,7 @@ static void DoDrawVehicle(const Vehicle *v)
|
||||
if (v->vehstatus & VS_DEFPAL) pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
|
||||
|
||||
/* Check whether the vehicle shall be transparent due to the game state */
|
||||
bool shadowed = (v->vehstatus & VS_SHADOW) != 0;
|
||||
bool shadowed = (v->vehstatus & (VS_SHADOW | VS_HIDDEN)) != 0;
|
||||
|
||||
if (v->type == VEH_EFFECT) {
|
||||
/* Check whether the vehicle shall be transparent/invisible due to GUI settings.
|
||||
@ -1064,7 +1075,7 @@ void ViewportAddVehicles(DrawPixelInfo *dpi)
|
||||
const Vehicle *v = _vehicle_viewport_hash[x + y]; // already masked & 0xFFF
|
||||
|
||||
while (v != NULL) {
|
||||
if (!(v->vehstatus & VS_HIDDEN) &&
|
||||
if (v->IsDrawn() &&
|
||||
l <= v->coord.right &&
|
||||
t <= v->coord.bottom &&
|
||||
r >= v->coord.left &&
|
||||
@ -1099,7 +1110,7 @@ Vehicle *CheckClickOnVehicle(const ViewPort *vp, int x, int y)
|
||||
y = ScaleByZoom(y, vp->zoom) + vp->virtual_top;
|
||||
|
||||
FOR_ALL_VEHICLES(v) {
|
||||
if ((v->vehstatus & (VS_HIDDEN | VS_UNCLICKABLE)) == 0 &&
|
||||
if (((v->vehstatus & VS_UNCLICKABLE) == 0) && v->IsDrawn() &&
|
||||
x >= v->coord.left && x <= v->coord.right &&
|
||||
y >= v->coord.top && y <= v->coord.bottom) {
|
||||
|
||||
|
@ -911,6 +911,8 @@ public:
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
bool IsDrawn() const;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -25,6 +25,7 @@ enum TransparencyToolbarWidgets {
|
||||
WID_TT_STRUCTURES, ///< Object structure transparency toggle button.
|
||||
WID_TT_CATENARY, ///< Catenary transparency toggle button.
|
||||
WID_TT_LOADING, ///< Loading indicators transparency toggle button.
|
||||
WIT_TT_TUNNELS, ///< Vehicles in tunnels toggle button.
|
||||
WID_TT_END, ///< End of toggle buttons.
|
||||
|
||||
/* Panel with buttons for invisibility */
|
||||
|
Loading…
Reference in New Issue
Block a user