1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-04 13:42:55 +01:00

Allow fine-tuning the virtual floor style (#7577)

The virtual floor by @JeroenDStout, introduced in the v0.1.2 release, has generally been well-received. However, some players find it too intrusive in its current appearance (cf. #7221). This PR gives them the option of a toned-down version, rather than having to turn it off completely.

![screenshot_20180528_221350](https://user-images.githubusercontent.com/604665/40628292-6e71358e-62c4-11e8-9293-e166e75d0da6.png)

The clear/transparent style, introduced by this PR, looks like the virtual floor as originally introduced in #6338:
![](https://user-images.githubusercontent.com/14242454/31050274-e3f0e62e-a645-11e7-9b10-ec26b733d631.gif)

The glassy/translucent style is the virtual floor as we've come to know it since the v0.1.2 release, and remains the default setting.
This commit is contained in:
Aaron van Geffen
2018-05-30 13:09:50 +02:00
committed by Hielke Morsink
parent 2127a0170e
commit bf44007197
10 changed files with 103 additions and 36 deletions

View File

@@ -4508,7 +4508,7 @@ STR_6198 :{BLACK}Day:
STR_6199 :Set date
STR_6200 :Reset date
STR_6201 :{MONTH}
STR_6202 :Enable virtual floor
STR_6202 :Virtual floor style:
STR_6203 :{SMALLFONT}{BLACK}When enabled, a virtual floor will be rendered when holding Ctrl or Shift to ease vertical placement of elements.
STR_6204 :Brick
STR_6205 :Iron
@@ -4562,6 +4562,10 @@ STR_6252 :Twitch API URL
STR_6253 :{SMALLFONT}{BLACK}Provide URL of Twitch integration API. Required in order to enable Twitch integration.
STR_6254 :URL of Twitch integration API:
STR_6255 :URL is not valid
STR_6256 :Rendering effects
STR_6257 :Glassy (translucent)
STR_6258 :Clear (transparent)
STR_6259 :Disabled
#############
# Scenarios #

View File

@@ -176,7 +176,7 @@ void input_handle_keyboard(bool isTitle)
}
}
if (gConfigGeneral.use_virtual_floor)
if (gConfigGeneral.virtual_floor_style != VIRTUAL_FLOOR_STYLE_OFF)
{
if (gInputPlaceObjectModifier & (PLACE_OBJECT_MODIFIER_COPY_Z | PLACE_OBJECT_MODIFIER_SHIFT_Z))
virtual_floor_enable();

View File

@@ -102,13 +102,16 @@ enum WINDOW_OPTIONS_WIDGET_IDX {
WIDX_RENDERING_GROUP = WIDX_PAGE_START,
WIDX_TILE_SMOOTHING_CHECKBOX,
WIDX_GRIDLINES_CHECKBOX,
WIDX_VIRTUAL_FLOOR_CHECKBOX,
WIDX_UPPER_CASE_BANNERS_CHECKBOX,
WIDX_SHOW_GUEST_PURCHASES_CHECKBOX,
WIDX_VIRTUAL_FLOOR_LABEL,
WIDX_VIRTUAL_FLOOR,
WIDX_VIRTUAL_FLOOR_DROPDOWN,
WIDX_EFFECTS_GROUP,
WIDX_DAY_NIGHT_CHECKBOX,
WIDX_ENABLE_LIGHT_FX_CHECKBOX,
WIDX_UPPER_CASE_BANNERS_CHECKBOX,
WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX,
WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX,
WIDX_SHOW_GUEST_PURCHASES_CHECKBOX,
// Culture / Units
WIDX_LANGUAGE = WIDX_PAGE_START,
@@ -253,17 +256,22 @@ static rct_widget window_options_display_widgets[] = {
static rct_widget window_options_rendering_widgets[] = {
MAIN_OPTIONS_WIDGETS,
#define FRAME_RENDERING_START 53
{ WWT_GROUPBOX, 1, 5, 304, FRAME_RENDERING_START + 0, FRAME_RENDERING_START + 151, STR_RENDERING_GROUP, STR_NONE }, // Rendering group
{ WWT_GROUPBOX, 1, 5, 304, FRAME_RENDERING_START + 0, FRAME_RENDERING_START + 92, STR_RENDERING_GROUP, STR_NONE }, // Rendering group
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 15, FRAME_RENDERING_START + 26, STR_TILE_SMOOTHING, STR_TILE_SMOOTHING_TIP }, // Landscape smoothing
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 30, FRAME_RENDERING_START + 41, STR_GRIDLINES, STR_GRIDLINES_TIP }, // Gridlines
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 45, FRAME_RENDERING_START + 56, STR_ENABLE_VIRTUAL_FLOOR, STR_ENABLE_VIRTUAL_FLOOR_TIP }, // Virtual floor
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 60, FRAME_RENDERING_START + 71, STR_CYCLE_DAY_NIGHT, STR_CYCLE_DAY_NIGHT_TIP }, // Cycle day-night
{ WWT_CHECKBOX, 1, 25, 290, FRAME_RENDERING_START + 75, FRAME_RENDERING_START + 86, STR_ENABLE_LIGHTING_EFFECTS, STR_ENABLE_LIGHTING_EFFECTS_TIP }, // Enable light fx
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 90, FRAME_RENDERING_START + 101, STR_UPPERCASE_BANNERS, STR_UPPERCASE_BANNERS_TIP }, // Uppercase banners
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 105, FRAME_RENDERING_START + 116, STR_RENDER_WEATHER_EFFECTS, STR_RENDER_WEATHER_EFFECTS_TIP }, // Render weather effects
{ WWT_CHECKBOX, 1, 25, 290, FRAME_RENDERING_START + 120, FRAME_RENDERING_START + 131, STR_DISABLE_LIGHTNING_EFFECT, STR_DISABLE_LIGHTNING_EFFECT_TIP }, // Disable lightning effect
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 135, FRAME_RENDERING_START + 146, STR_SHOW_GUEST_PURCHASES, STR_SHOW_GUEST_PURCHASES_TIP },
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 45, FRAME_RENDERING_START + 56, STR_UPPERCASE_BANNERS, STR_UPPERCASE_BANNERS_TIP }, // Uppercase banners
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 60, FRAME_RENDERING_START + 71, STR_SHOW_GUEST_PURCHASES, STR_SHOW_GUEST_PURCHASES_TIP }, // Guest purchases
{ WWT_LABEL, 1, 10, 290, FRAME_RENDERING_START + 75, FRAME_RENDERING_START + 86, STR_VIRTUAL_FLOOR_STYLE, STR_NONE }, // Virtual floor
{ WWT_DROPDOWN, 1, 155, 299, FRAME_RENDERING_START + 75, FRAME_RENDERING_START + 86, STR_NONE, STR_VIRTUAL_FLOOR_STYLE_TIP }, // Virtual floor dropdown
{ WWT_BUTTON, 1, 288, 298, FRAME_RENDERING_START + 76, FRAME_RENDERING_START + 85, STR_DROPDOWN_GLYPH, STR_VIRTUAL_FLOOR_STYLE_TIP }, // Virtual floor dropdown
#undef FRAME_RENDERING_START
#define FRAME_EFFECTS_START 148
{ WWT_GROUPBOX, 1, 5, 304, FRAME_EFFECTS_START + 0, FRAME_EFFECTS_START + 78, STR_EFFECTS_GROUP, STR_NONE }, // Rendering group
{ WWT_CHECKBOX, 1, 10, 290, FRAME_EFFECTS_START + 15, FRAME_EFFECTS_START + 26, STR_CYCLE_DAY_NIGHT, STR_CYCLE_DAY_NIGHT_TIP }, // Cycle day-night
{ WWT_CHECKBOX, 1, 25, 290, FRAME_EFFECTS_START + 30, FRAME_EFFECTS_START + 41, STR_ENABLE_LIGHTING_EFFECTS, STR_ENABLE_LIGHTING_EFFECTS_TIP }, // Enable light fx
{ WWT_CHECKBOX, 1, 10, 290, FRAME_EFFECTS_START + 45, FRAME_EFFECTS_START + 56, STR_RENDER_WEATHER_EFFECTS, STR_RENDER_WEATHER_EFFECTS_TIP }, // Render weather effects
{ WWT_CHECKBOX, 1, 25, 290, FRAME_EFFECTS_START + 60, FRAME_EFFECTS_START + 71, STR_DISABLE_LIGHTNING_EFFECT, STR_DISABLE_LIGHTNING_EFFECT_TIP }, // Disable lightning effect
#undef FRAME_EFFECTS_START
{ WIDGETS_END },
};
@@ -533,13 +541,14 @@ static uint64 window_options_page_enabled_widgets[] = {
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_TILE_SMOOTHING_CHECKBOX) |
(1 << WIDX_GRIDLINES_CHECKBOX) |
(1 << WIDX_VIRTUAL_FLOOR_CHECKBOX) |
(1 << WIDX_UPPER_CASE_BANNERS_CHECKBOX) |
(1 << WIDX_SHOW_GUEST_PURCHASES_CHECKBOX) |
(1 << WIDX_VIRTUAL_FLOOR) |
(1 << WIDX_VIRTUAL_FLOOR_DROPDOWN) |
(1 << WIDX_DAY_NIGHT_CHECKBOX) |
(1 << WIDX_ENABLE_LIGHT_FX_CHECKBOX) |
(1 << WIDX_UPPER_CASE_BANNERS_CHECKBOX) |
(1 << WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX) |
(1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX) |
(1 << WIDX_SHOW_GUEST_PURCHASES_CHECKBOX),
(1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX),
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_LANGUAGE) |
@@ -725,11 +734,6 @@ static void window_options_mouseup(rct_window *w, rct_widgetindex widgetIndex)
w->viewport->flags &= ~VIEWPORT_FLAG_GRIDLINES;
}
break;
case WIDX_VIRTUAL_FLOOR_CHECKBOX:
gConfigGeneral.use_virtual_floor ^= 1;
config_save_default();
window_invalidate(w);
break;
case WIDX_DAY_NIGHT_CHECKBOX:
gConfigGeneral.day_night_cycle ^= 1;
config_save_default();
@@ -1095,6 +1099,23 @@ static void window_options_mousedown(rct_window *w, rct_widgetindex widgetIndex,
}
break;
case WINDOW_OPTIONS_PAGE_RENDERING:
switch (widgetIndex) {
case WIDX_VIRTUAL_FLOOR_DROPDOWN:
gDropdownItemsFormat[0] = STR_DROPDOWN_MENU_LABEL;
gDropdownItemsFormat[1] = STR_DROPDOWN_MENU_LABEL;
gDropdownItemsFormat[2] = STR_DROPDOWN_MENU_LABEL;
gDropdownItemsArgs[0] = STR_VIRTUAL_FLOOR_STYLE_DISABLED;
gDropdownItemsArgs[1] = STR_VIRTUAL_FLOOR_STYLE_TRANSPARENT;
gDropdownItemsArgs[2] = STR_VIRTUAL_FLOOR_STYLE_GLASSY;
window_options_show_dropdown(w, widget, 3);
dropdown_set_checked(gConfigGeneral.virtual_floor_style, true);
break;
}
break;
case WINDOW_OPTIONS_PAGE_CULTURE:
switch (widgetIndex) {
case WIDX_HEIGHT_LABELS_DROPDOWN:
@@ -1363,6 +1384,16 @@ static void window_options_dropdown(rct_window *w, rct_widgetindex widgetIndex,
}
break;
case WINDOW_OPTIONS_PAGE_RENDERING:
switch (widgetIndex)
{
case WIDX_VIRTUAL_FLOOR_DROPDOWN:
gConfigGeneral.virtual_floor_style = dropdownIndex;
config_save_default();
break;
}
break;
case WINDOW_OPTIONS_PAGE_CULTURE:
switch (widgetIndex) {
case WIDX_HEIGHT_LABELS_DROPDOWN:
@@ -1614,8 +1645,18 @@ static void window_options_invalidate(rct_window *w)
{
widget_set_checkbox_value(w, WIDX_TILE_SMOOTHING_CHECKBOX, gConfigGeneral.landscape_smoothing);
widget_set_checkbox_value(w, WIDX_GRIDLINES_CHECKBOX, gConfigGeneral.always_show_gridlines);
widget_set_checkbox_value(w, WIDX_VIRTUAL_FLOOR_CHECKBOX, gConfigGeneral.use_virtual_floor);
widget_set_checkbox_value(w, WIDX_DAY_NIGHT_CHECKBOX, gConfigGeneral.day_night_cycle);
widget_set_checkbox_value(w, WIDX_SHOW_GUEST_PURCHASES_CHECKBOX, gConfigGeneral.show_guest_purchases);
widget_set_checkbox_value(w, WIDX_UPPER_CASE_BANNERS_CHECKBOX, gConfigGeneral.upper_case_banners);
rct_string_id VirtualFloorStyleStrings[] = {
STR_VIRTUAL_FLOOR_STYLE_DISABLED,
STR_VIRTUAL_FLOOR_STYLE_TRANSPARENT,
STR_VIRTUAL_FLOOR_STYLE_GLASSY
};
window_options_rendering_widgets[WIDX_VIRTUAL_FLOOR].text = VirtualFloorStyleStrings[gConfigGeneral.virtual_floor_style];
widget_set_checkbox_value(w, WIDX_ENABLE_LIGHT_FX_CHECKBOX, gConfigGeneral.enable_light_fx);
if (gConfigGeneral.day_night_cycle &&
gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY
@@ -1625,7 +1666,6 @@ static void window_options_invalidate(rct_window *w)
w->disabled_widgets |= (1 << WIDX_ENABLE_LIGHT_FX_CHECKBOX);
}
widget_set_checkbox_value(w, WIDX_UPPER_CASE_BANNERS_CHECKBOX, gConfigGeneral.upper_case_banners);
widget_set_checkbox_value(w, WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX, gConfigGeneral.render_weather_effects || gConfigGeneral.render_weather_gloom);
widget_set_checkbox_value(w, WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX, gConfigGeneral.disable_lightning_effect);
if (!gConfigGeneral.render_weather_effects && !gConfigGeneral.render_weather_gloom) {
@@ -1638,8 +1678,6 @@ static void window_options_invalidate(rct_window *w)
w->disabled_widgets &= ~(1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
}
widget_set_checkbox_value(w, WIDX_SHOW_GUEST_PURCHASES_CHECKBOX, gConfigGeneral.show_guest_purchases);
break;
}

View File

@@ -1299,7 +1299,7 @@ static void sub_6E1F34(sint16 x, sint16 y, uint16 selected_scenery, sint16* grid
*parameter_2 = (cl ^ (1 << 1)) | (gWindowSceneryPrimaryColour << 8);
*parameter_3 = rotation | (gWindowScenerySecondaryColour << 16);
if (gConfigGeneral.use_virtual_floor)
if (gConfigGeneral.virtual_floor_style != VIRTUAL_FLOOR_STYLE_OFF)
{
virtual_floor_set_height(gSceneryPlaceZ);
}
@@ -1556,7 +1556,7 @@ static void sub_6E1F34(sint16 x, sint16 y, uint16 selected_scenery, sint16* grid
}
}
if (gConfigGeneral.use_virtual_floor)
if (gConfigGeneral.virtual_floor_style != VIRTUAL_FLOOR_STYLE_OFF)
{
virtual_floor_set_height(gSceneryPlaceZ);
}
@@ -2465,7 +2465,7 @@ static void top_toolbar_tool_update_scenery(sint16 x, sint16 y){
map_invalidate_selection_rect();
map_invalidate_map_selection_tiles();
if (gConfigGeneral.use_virtual_floor)
if (gConfigGeneral.virtual_floor_style != VIRTUAL_FLOOR_STYLE_OFF)
{
virtual_floor_invalidate();
}

View File

@@ -35,6 +35,7 @@
#include "../localisation/Currency.h"
#include "../localisation/Date.h"
#include "../localisation/Language.h"
#include "../paint/VirtualFloor.h"
#include "../platform/platform.h"
#include "../scenario/Scenario.h"
@@ -107,6 +108,13 @@ namespace Config
ConfigEnumEntry<sint32>("SMOOTH_NEAREST_NEIGHBOUR", SCALE_QUALITY_SMOOTH_NN),
});
static const auto Enum_VirtualFloorStyle = ConfigEnum<sint32>(
{
ConfigEnumEntry<sint32>("OFF", VIRTUAL_FLOOR_STYLE_OFF),
ConfigEnumEntry<sint32>("CLEAR", VIRTUAL_FLOOR_STYLE_CLEAR),
ConfigEnumEntry<sint32>("GLASSY", VIRTUAL_FLOOR_STYLE_GLASSY),
});
/**
* Config enum wrapping LanguagesDescriptors.
*/
@@ -169,7 +177,7 @@ namespace Config
model->drawing_engine = reader->GetEnum<sint32>("drawing_engine", DRAWING_ENGINE_SOFTWARE, Enum_DrawingEngine);
model->uncap_fps = reader->GetBoolean("uncap_fps", false);
model->use_vsync = reader->GetBoolean("use_vsync", true);
model->use_virtual_floor = reader->GetBoolean("use_virtual_floor", true);
model->virtual_floor_style = reader->GetEnum<sint32>("virtual_floor_style", VIRTUAL_FLOOR_STYLE_GLASSY, Enum_VirtualFloorStyle);
// Default config setting is false until ghost trains are implemented #4540
model->test_unfinished_tracks = reader->GetBoolean("test_unfinished_tracks", false);
@@ -281,8 +289,8 @@ namespace Config
writer->WriteBoolean("render_weather_gloom", model->render_weather_gloom);
writer->WriteBoolean("show_guest_purchases", model->show_guest_purchases);
writer->WriteBoolean("show_real_names_of_guests", model->show_real_names_of_guests);
writer->WriteBoolean("use_virtual_floor", model->use_virtual_floor);
writer->WriteBoolean("allow_early_completion", model->allow_early_completion);
writer->WriteEnum<sint32>("virtual_floor_style", model->virtual_floor_style, Enum_VirtualFloorStyle);
}
static void ReadInterface(IIniReader * reader)

View File

@@ -42,7 +42,7 @@ struct GeneralConfiguration
// Map rendering
bool landscape_smoothing;
bool always_show_gridlines;
bool use_virtual_floor;
sint32 virtual_floor_style;
bool day_night_cycle;
bool enable_light_fx;
bool upper_case_banners;

View File

@@ -3855,8 +3855,8 @@ enum {
STR_DATE_RESET = 6200,
STR_FORMAT_MONTH = 6201,
STR_ENABLE_VIRTUAL_FLOOR = 6202,
STR_ENABLE_VIRTUAL_FLOOR_TIP = 6203,
STR_VIRTUAL_FLOOR_STYLE = 6202,
STR_VIRTUAL_FLOOR_STYLE_TIP = 6203,
STR_TILE_INSPECTOR_TERRAIN_EDGE_BRICK = 6204,
STR_TILE_INSPECTOR_TERRAIN_EDGE_IRON = 6205,
@@ -3925,6 +3925,11 @@ enum {
STR_TWITCH_API_URL_DESC = 6254,
STR_INVALID_URL = 6255,
STR_EFFECTS_GROUP = 6256,
STR_VIRTUAL_FLOOR_STYLE_GLASSY = 6257,
STR_VIRTUAL_FLOOR_STYLE_TRANSPARENT = 6258,
STR_VIRTUAL_FLOOR_STYLE_DISABLED = 6259,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768
};

View File

@@ -14,7 +14,9 @@
*****************************************************************************/
#pragma endregion
#include "VirtualFloor.h"
#include "../Input.h"
#include "../config/Config.h"
#include "../interface/Viewport.h"
#include "../sprites.h"
#include "../world/Map.h"
@@ -396,6 +398,9 @@ void virtual_floor_paint(paint_session * session)
0, 0, 0, 1, _virtualFloorHeight, 5, 5, _virtualFloorHeight + ((dullEdges & 0x8) ? -2 : 0));
}
if (gConfigGeneral.virtual_floor_style != VIRTUAL_FLOOR_STYLE_GLASSY)
return;
if (!weAreOccupied && !weAreLit)
{
sint32 imageColourFlats = SPR_G2_SURFACE_GLASSY_RECOLOURABLE | IMAGE_TYPE_REMAP | IMAGE_TYPE_TRANSPARENT | PALETTE_WATER << 19;

View File

@@ -19,6 +19,13 @@
#include "../common.h"
enum VirtualFloorStyles
{
VIRTUAL_FLOOR_STYLE_OFF,
VIRTUAL_FLOOR_STYLE_CLEAR,
VIRTUAL_FLOOR_STYLE_GLASSY
};
struct paint_session;
uint16 virtual_floor_get_height();

View File

@@ -165,7 +165,7 @@ static void sub_68B3FB(paint_session * session, sint32 x, sint32 y)
bool partOfVirtualFloor = false;
#ifndef __TESTPAINT__
if (gConfigGeneral.use_virtual_floor)
if (gConfigGeneral.virtual_floor_style != VIRTUAL_FLOOR_STYLE_OFF)
{
partOfVirtualFloor = virtual_floor_tile_is_floor(session->MapPosition.x, session->MapPosition.y);
}
@@ -339,7 +339,7 @@ static void sub_68B3FB(paint_session * session, sint32 x, sint32 y)
} while (!(tile_element++)->IsLastForTile());
#ifndef __TESTPAINT__
if (gConfigGeneral.use_virtual_floor && partOfVirtualFloor)
if (gConfigGeneral.virtual_floor_style != VIRTUAL_FLOOR_STYLE_OFF && partOfVirtualFloor)
{
virtual_floor_paint(session);
}