mirror of https://github.com/OpenRCT2/OpenRCT2.git
Add scenery eyedropper button
This commit is contained in:
parent
809abe4fe0
commit
6e7c5b7031
|
@ -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 #
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ uint8 gWindowSceneryRotation;
|
|||
colour_t gWindowSceneryPrimaryColour;
|
||||
colour_t gWindowScenerySecondaryColour;
|
||||
colour_t gWindowSceneryTertiaryColour;
|
||||
bool gWindowSceneryEyedropperEnabled;
|
||||
|
||||
rct_map_element *gSceneryMapElement;
|
||||
uint8 gSceneryMapElementType;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue