Add scenery eyedropper button

This commit is contained in:
Ted John 2017-03-13 18:05:13 +00:00
parent 809abe4fe0
commit 6e7c5b7031
6 changed files with 49 additions and 8 deletions

View File

@ -4338,7 +4338,7 @@ STR_6026 :Ride construction - Previous track
STR_6027 :Ride construction - Next track
STR_6028 :Ride construction - Build current
STR_6029 :Ride construction - Demolish current
STR_6030 :{SMALLFONT}{BLACK}Scenery picker. Click any scenery on the map to select the same piece for construction.
#############
# Scenarios #

View File

@ -3682,6 +3682,8 @@ enum {
STR_SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT = 6028,
STR_SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT = 6029,
STR_SCENERY_EYEDROPPER_TIP = 6030,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768
};

View File

@ -34,7 +34,7 @@
#include "../sprites.h"
#define WINDOW_SCENERY_WIDTH 634
#define WINDOW_SCENERY_HEIGHT 142
#define WINDOW_SCENERY_HEIGHT 166
#define SCENERY_BUTTON_WIDTH 66
#define SCENERY_BUTTON_HEIGHT 80
@ -139,7 +139,8 @@ enum WINDOW_SCENERY_LIST_WIDGET_IDX {
WIDX_SCENERY_PRIMARY_COLOUR_BUTTON, // 8000000
WIDX_SCENERY_SECONDARY_COLOUR_BUTTON, // 10000000
WIDX_SCENERY_TERTIARY_COLOUR_BUTTON, // 20000000
WIDX_SCENERY_BUILD_CLUSTER_BUTTON, // 40000000
WIDX_SCENERY_EYEDROPPER_BUTTON, // 40000000
WIDX_SCENERY_BUILD_CLUSTER_BUTTON, // 80000000
};
static rct_widget window_scenery_widgets[] = {
@ -173,7 +174,8 @@ static rct_widget window_scenery_widgets[] = {
{ WWT_COLOURBTN, 1, 615, 626, 93, 104, 0xFFFFFFFF, STR_SELECT_COLOUR }, // 8000000 0x009DE448
{ WWT_COLOURBTN, 1, 615, 626, 105, 116, 0xFFFFFFFF, STR_SELECT_SECONDARY_COLOUR }, // 10000000 0x009DE458
{ WWT_COLOURBTN, 1, 615, 626, 117, 128, 0xFFFFFFFF, STR_SELECT_TERNARY_COLOUR }, // 20000000 0x009DE468
{ WWT_FLATBTN, 1, 609, 632, 117, 140, SPR_SCENERY_CLUSTER, STR_SCENERY_CLUSTER_TIP }, // 40000000 0x009DE478
{ WWT_FLATBTN, 1, 609, 632, 118, 141, SPR_PICKUP_BTN, STR_SCENERY_EYEDROPPER_TIP }, // 40000000 0x009DE478
{ WWT_FLATBTN, 1, 609, 632, 142, 165, SPR_SCENERY_CLUSTER, STR_SCENERY_CLUSTER_TIP }, // 40000000 0x009DE478
{ WIDGETS_END },
};
@ -456,6 +458,7 @@ void window_scenery_open()
(1 << WIDX_SCENERY_SECONDARY_COLOUR_BUTTON) |
(1 << WIDX_SCENERY_REPAINT_SCENERY_BUTTON) |
(1 << WIDX_SCENERY_TERTIARY_COLOUR_BUTTON) |
(1 << WIDX_SCENERY_EYEDROPPER_BUTTON) |
(1 << WIDX_SCENERY_BUILD_CLUSTER_BUTTON);
window_init_scroll_widgets(window);
@ -471,6 +474,7 @@ void window_scenery_open()
gSceneryPlaceCost = MONEY32_UNDEFINED;
gSceneryPlaceRotation = 0;
gWindowSceneryPaintEnabled = 0; // repaint coloured scenery tool state
gWindowSceneryEyedropperEnabled = false;
gWindowSceneryClusterEnabled = 0; // build cluster tool state
window->min_width = WINDOW_SCENERY_WIDTH;
@ -580,9 +584,19 @@ static void window_scenery_mouseup(rct_window *w, sint32 widgetIndex)
break;
case WIDX_SCENERY_REPAINT_SCENERY_BUTTON:
gWindowSceneryPaintEnabled ^= 1;
gWindowSceneryClusterEnabled = 0;
gWindowSceneryEyedropperEnabled = false;
window_invalidate(w);
break;
case WIDX_SCENERY_EYEDROPPER_BUTTON:
gWindowSceneryPaintEnabled = 0;
gWindowSceneryClusterEnabled = 0;
gWindowSceneryEyedropperEnabled = !gWindowSceneryEyedropperEnabled;
window_invalidate(w);
break;
case WIDX_SCENERY_BUILD_CLUSTER_BUTTON:
gWindowSceneryPaintEnabled = 0;
gWindowSceneryEyedropperEnabled = false;
if (gWindowSceneryClusterEnabled == 1) {
gWindowSceneryClusterEnabled = 0;
}
@ -774,7 +788,9 @@ static void window_scenery_update(rct_window *w)
return;
}
if (gWindowSceneryPaintEnabled == 1) { // the repaint scenery tool is active
if (gWindowSceneryEyedropperEnabled) {
gCurrentToolId = 7;
} else if (gWindowSceneryPaintEnabled == 1) { // the repaint scenery tool is active
gCurrentToolId = 0x17;
} else {
uint16 tabIndex = gWindowSceneryActiveTabIndex;
@ -838,6 +854,7 @@ void window_scenery_scrollmousedown(rct_window *w, sint32 scrollIndex, sint32 x,
gWindowSceneryTabSelections[tabIndex] = sceneryId;
gWindowSceneryPaintEnabled &= 0xFE;
gWindowSceneryEyedropperEnabled = false;
audio_play_sound_panned(4, (w->width >> 1) + w->x, 0, 0, 0);
w->scenery.hover_counter = -16;
gSceneryPlaceCost = MONEY32_UNDEFINED;
@ -913,18 +930,22 @@ void window_scenery_invalidate(rct_window *w)
if (gWindowSceneryPaintEnabled == 1)
w->pressed_widgets |= (1 << WIDX_SCENERY_REPAINT_SCENERY_BUTTON);
if (gWindowSceneryEyedropperEnabled)
w->pressed_widgets |= (1 << WIDX_SCENERY_EYEDROPPER_BUTTON);
if (gWindowSceneryClusterEnabled == 1)
w->pressed_widgets |= (1 << WIDX_SCENERY_BUILD_CLUSTER_BUTTON);
window_scenery_widgets[WIDX_SCENERY_ROTATE_OBJECTS_BUTTON].type = WWT_EMPTY;
window_scenery_widgets[WIDX_SCENERY_EYEDROPPER_BUTTON].type = WWT_EMPTY;
window_scenery_widgets[WIDX_SCENERY_BUILD_CLUSTER_BUTTON].type = WWT_EMPTY;
sint16 tabSelectedSceneryId = gWindowSceneryTabSelections[tabIndex];
if (tabSelectedSceneryId != -1) {
if (tabSelectedSceneryId < 0x100) {
if (!(gWindowSceneryPaintEnabled & 1))
if (!(gWindowSceneryPaintEnabled & 1)) {
window_scenery_widgets[WIDX_SCENERY_EYEDROPPER_BUTTON].type = WWT_FLATBTN;
window_scenery_widgets[WIDX_SCENERY_BUILD_CLUSTER_BUTTON].type = WWT_FLATBTN;
}
rct_scenery_entry* sceneryEntry = get_small_scenery_entry(tabSelectedSceneryId);
if (sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG4) {
@ -1005,9 +1026,11 @@ void window_scenery_invalidate(rct_window *w)
window_scenery_widgets[WIDX_SCENERY_ROTATE_OBJECTS_BUTTON].left = w->width - 25;
window_scenery_widgets[WIDX_SCENERY_REPAINT_SCENERY_BUTTON].left = w->width - 25;
window_scenery_widgets[WIDX_SCENERY_EYEDROPPER_BUTTON].left = w->width - 25;
window_scenery_widgets[WIDX_SCENERY_BUILD_CLUSTER_BUTTON].left = w->width - 25;
window_scenery_widgets[WIDX_SCENERY_ROTATE_OBJECTS_BUTTON].right = w->width - 2;
window_scenery_widgets[WIDX_SCENERY_REPAINT_SCENERY_BUTTON].right = w->width - 2;
window_scenery_widgets[WIDX_SCENERY_EYEDROPPER_BUTTON].right = w->width - 2;
window_scenery_widgets[WIDX_SCENERY_BUILD_CLUSTER_BUTTON].right = w->width - 2;
window_scenery_widgets[WIDX_SCENERY_PRIMARY_COLOUR_BUTTON].left = w->width - 19;
@ -1039,6 +1062,8 @@ void window_scenery_paint(rct_window *w, rct_drawpixelinfo *dpi)
if (selectedSceneryEntryId == -1) {
if (gWindowSceneryPaintEnabled & 1) // repaint coloured scenery tool is on
return;
if (gWindowSceneryEyedropperEnabled)
return;
selectedSceneryEntryId = gWindowSceneryTabSelections[tabIndex];
@ -1100,7 +1125,7 @@ void window_scenery_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, sint32 sc
while ((currentSceneryGlobalId = window_scenery_tab_entries[tabIndex][sceneryTabItemIndex]) != -1) {
uint16 tabSelectedSceneryId = gWindowSceneryTabSelections[tabIndex];
if (gWindowSceneryPaintEnabled == 1) {
if (gWindowSceneryPaintEnabled == 1 || gWindowSceneryEyedropperEnabled) {
if (w->scenery.selected_scenery_id == currentSceneryGlobalId) {
gfx_fill_rect_inset(dpi, left, top, left + SCENERY_BUTTON_WIDTH - 1,
top + SCENERY_BUTTON_HEIGHT - 1, w->colours[1], INSET_RECT_FLAG_FILL_MID_LIGHT);

View File

@ -1000,6 +1000,11 @@ static void repaint_scenery_tool_down(sint16 x, sint16 y, sint16 widgetIndex){
}
}
static void scenery_eyedropper_tool_down(sint16 x, sint16 y, sint16 widgetIndex)
{
}
/**
*
* rct2: 0x006E1F34
@ -1444,6 +1449,9 @@ static void window_top_toolbar_scenery_tool_down(sint16 x, sint16 y, rct_window
if (gWindowSceneryPaintEnabled & 1) {
repaint_scenery_tool_down(x, y, widgetIndex);
return;
} else if (gWindowSceneryEyedropperEnabled) {
scenery_eyedropper_tool_down(x, y, widgetIndex);
return;
}
sint32 selectedTab = gWindowSceneryTabSelections[gWindowSceneryActiveTabIndex];
@ -2270,6 +2278,8 @@ static void top_toolbar_tool_update_scenery(sint16 x, sint16 y){
if (gWindowSceneryPaintEnabled)
return;
if (gWindowSceneryEyedropperEnabled)
return;
sint16 selected_tab = gWindowSceneryTabSelections[gWindowSceneryActiveTabIndex];
@ -2806,6 +2816,8 @@ static void window_top_toolbar_tool_drag(rct_window* w, sint32 widgetIndex, sint
case WIDX_SCENERY:
if (gWindowSceneryPaintEnabled & 1)
window_top_toolbar_scenery_tool_down(x, y, w, widgetIndex);
if (gWindowSceneryEyedropperEnabled)
window_top_toolbar_scenery_tool_down(x, y, w, widgetIndex);
break;
}
}

View File

@ -35,6 +35,7 @@ uint8 gWindowSceneryRotation;
colour_t gWindowSceneryPrimaryColour;
colour_t gWindowScenerySecondaryColour;
colour_t gWindowSceneryTertiaryColour;
bool gWindowSceneryEyedropperEnabled;
rct_map_element *gSceneryMapElement;
uint8 gSceneryMapElementType;

View File

@ -235,6 +235,7 @@ extern uint8 gWindowSceneryRotation;
extern colour_t gWindowSceneryPrimaryColour;
extern colour_t gWindowScenerySecondaryColour;
extern colour_t gWindowSceneryTertiaryColour;
extern bool gWindowSceneryEyedropperEnabled;
extern rct_map_element *gSceneryMapElement;
extern uint8 gSceneryMapElementType;