mirror of https://github.com/OpenRCT2/OpenRCT2.git
add footpath window
This commit is contained in:
parent
999429071e
commit
1246a14fe3
|
@ -86,6 +86,7 @@
|
|||
<ClCompile Include="..\src\window_dropdown.c" />
|
||||
<ClCompile Include="..\src\window_land.c" />
|
||||
<ClCompile Include="..\src\window_park.c" />
|
||||
<ClCompile Include="..\src\window_footpath.c" />
|
||||
<ClCompile Include="..\src\window_ride_list.c" />
|
||||
<ClCompile Include="..\src\window_title_exit.c" />
|
||||
<ClCompile Include="..\src\window_title_logo.c" />
|
||||
|
|
|
@ -254,6 +254,9 @@
|
|||
<ClCompile Include="..\src\window_about.c">
|
||||
<Filter>Windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\window_footpath.c">
|
||||
<Filter>Windows</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\openrct2.exe">
|
||||
|
|
18
src/gfx.c
18
src/gfx.c
|
@ -27,6 +27,10 @@
|
|||
#include "strings.h"
|
||||
#include "window.h"
|
||||
|
||||
// HACK These were originally passed back through registers
|
||||
int gLastDrawStringX;
|
||||
int gLastDrawStringY;
|
||||
|
||||
uint8 _screenDirtyBlocks[5120];
|
||||
|
||||
static void gfx_draw_dirty_blocks(int x, int y, int columns, int rows);
|
||||
|
@ -486,5 +490,17 @@ void gfx_draw_string_left(rct_drawpixelinfo *dpi, int format, void *args, int co
|
|||
*/
|
||||
void gfx_draw_string(rct_drawpixelinfo *dpi, char *format, int colour, int x, int y)
|
||||
{
|
||||
RCT2_CALLPROC_X(0x00682702, colour, 0, x, y, format, dpi, 0);
|
||||
int eax, ebx, ecx, edx, esi, edi, ebp;
|
||||
|
||||
eax = colour;
|
||||
ebx = 0;
|
||||
ecx = x;
|
||||
edx = y;
|
||||
esi = format;
|
||||
edi = dpi;
|
||||
ebp = 0;
|
||||
RCT2_CALLFUNC_X(0x00682702, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
|
||||
|
||||
gLastDrawStringX = ecx;
|
||||
gLastDrawStringY = edx;
|
||||
}
|
||||
|
|
|
@ -46,6 +46,9 @@ typedef struct {
|
|||
sint16 unused; // 0x0E
|
||||
} rct_g1_element;
|
||||
|
||||
extern int gLastDrawStringX;
|
||||
extern int gLastDrawStringY;
|
||||
|
||||
void gfx_load_g1();
|
||||
|
||||
void gfx_clear(rct_drawpixelinfo *dpi, int colour);
|
||||
|
|
|
@ -197,6 +197,17 @@ enum {
|
|||
|
||||
STR_BUILD_FOOTPATH_TIP = 1173,
|
||||
|
||||
STR_FOOTPATHS = 1181,
|
||||
STR_TYPE = 1182,
|
||||
STR_DIRECTION = 1183,
|
||||
STR_SLOPE = 1184,
|
||||
STR_DIRECTION_TIP = 1185,
|
||||
STR_SLOPE_DOWN_TIP = 1186,
|
||||
STR_LEVEL_TIP = 1187,
|
||||
STR_SLOPE_UP_TIP = 1188,
|
||||
STR_CONSTRUCT_THE_SELECTED_FOOTPATH_SECTION_TIP = 1189,
|
||||
STR_REMOVE_PREVIOUS_FOOTPATH_SECTION_TIP = 1190,
|
||||
|
||||
STR_CLOSED = 1194,
|
||||
STR_TEST_RUN = 1195,
|
||||
STR_OPEN = 1196,
|
||||
|
@ -212,10 +223,16 @@ enum {
|
|||
STR_NUMERIC_UP = 1218,
|
||||
STR_NUMERIC_DOWN = 1219,
|
||||
|
||||
STR_QUEUE_LINE_PATH_TIP = 1423,
|
||||
STR_FOOTPATH_TIP = 1424,
|
||||
|
||||
STR_FREE = 1430,
|
||||
|
||||
STR_GUESTS = 1463,
|
||||
|
||||
STR_CONSTRUCT_FOOTPATH_ON_LAND_TIP = 1655,
|
||||
STR_CONSTRUCT_BRIDGE_OR_TUNNEL_FOOTPATH_TIP = 1656,
|
||||
|
||||
STR_GUESTS_TIP = 1693,
|
||||
STR_STAFF_TIP = 1694,
|
||||
|
||||
|
|
68
src/widget.c
68
src/widget.c
|
@ -33,6 +33,7 @@ static void widget_text_button(rct_drawpixelinfo *dpi, rct_window *w, int widget
|
|||
static void widget_text_unknown(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex);
|
||||
static void widget_text(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex);
|
||||
static void widget_text_inset(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex);
|
||||
static void widget_groupbox_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex);
|
||||
static void widget_caption_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex);
|
||||
static void widget_closebox_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex);
|
||||
static void widget_scroll_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex);
|
||||
|
@ -94,6 +95,10 @@ void widget_scroll_update_thumbs(rct_window *w, int widget_index)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006EB2A8
|
||||
*/
|
||||
void widget_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex)
|
||||
{
|
||||
switch (w->widgets[widgetIndex].type) {
|
||||
|
@ -134,7 +139,8 @@ void widget_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex)
|
|||
break;
|
||||
case WWT_18:
|
||||
break;
|
||||
case WWT_19:
|
||||
case WWT_GROUPBOX:
|
||||
widget_groupbox_draw(dpi, w, widgetIndex);
|
||||
break;
|
||||
case WWT_CAPTION:
|
||||
widget_caption_draw(dpi, w, widgetIndex);
|
||||
|
@ -500,6 +506,66 @@ static void widget_text_inset(rct_drawpixelinfo *dpi, rct_window *w, int widgetI
|
|||
widget_text(dpi, w, widgetIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006EB535
|
||||
*/
|
||||
static void widget_groupbox_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex)
|
||||
{
|
||||
rct_widget* widget;
|
||||
int l, t, r, b, textRight;
|
||||
uint8 colour;
|
||||
|
||||
// Get the widget
|
||||
widget = &w->widgets[widgetIndex];
|
||||
|
||||
// Resolve the absolute ltrb
|
||||
l = w->x + widget->left + 5;
|
||||
t = w->y + widget->top;
|
||||
r = w->x + widget->right;
|
||||
b = w->y + widget->bottom;
|
||||
textRight = l;
|
||||
|
||||
// Text
|
||||
if (widget->image != (uint32)-1) {
|
||||
colour = w->colours[widget->colour] & 0x7F;
|
||||
if (colour & 1)
|
||||
colour |= 0x40;
|
||||
gfx_draw_string_left(dpi, widget->image, 0x013CE952, colour, l, t);
|
||||
textRight = gLastDrawStringX + 1;
|
||||
}
|
||||
|
||||
// Border
|
||||
// Resolve the absolute ltrb
|
||||
l = w->x + widget->left;
|
||||
t = w->y + widget->top + 4;
|
||||
r = w->x + widget->right;
|
||||
b = w->y + widget->bottom;
|
||||
|
||||
// Get the colour
|
||||
colour = w->colours[widget->colour] & 0x7F;
|
||||
|
||||
// Border left of text
|
||||
gfx_fill_rect(dpi, l, t, l + 4, t, RCT2_ADDRESS(0x0141FC47, uint8)[colour * 8]);
|
||||
gfx_fill_rect(dpi, l + 1, t + 1, l + 4, t + 1, RCT2_ADDRESS(0x0141FC4B, uint8)[colour * 8]);
|
||||
|
||||
// Border right of text
|
||||
gfx_fill_rect(dpi, textRight, t, r - 1, t, RCT2_ADDRESS(0x0141FC47, uint8)[colour * 8]);
|
||||
gfx_fill_rect(dpi, textRight, t + 1, r - 2, t + 1, RCT2_ADDRESS(0x0141FC4B, uint8)[colour * 8]);
|
||||
|
||||
// Border right
|
||||
gfx_fill_rect(dpi, r - 1, t + 1, r - 1, b - 1, RCT2_ADDRESS(0x0141FC47, uint8)[colour * 8]);
|
||||
gfx_fill_rect(dpi, r, t, r, b, RCT2_ADDRESS(0x0141FC4B, uint8)[colour * 8]);
|
||||
|
||||
// Border bottom
|
||||
gfx_fill_rect(dpi, l, b - 1, r - 2, b - 1, RCT2_ADDRESS(0x0141FC47, uint8)[colour * 8]);
|
||||
gfx_fill_rect(dpi, l, b, r - 1, b, RCT2_ADDRESS(0x0141FC4B, uint8)[colour * 8]);
|
||||
|
||||
// Border left
|
||||
gfx_fill_rect(dpi, l, t + 1, l, b - 2, RCT2_ADDRESS(0x0141FC47, uint8)[colour * 8]);
|
||||
gfx_fill_rect(dpi, l + 1, t + 2, l + 1, b - 2, RCT2_ADDRESS(0x0141FC4B, uint8)[colour * 8]);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006EB2F9
|
||||
|
|
|
@ -43,7 +43,7 @@ typedef enum {
|
|||
WWT_DROPDOWN = 16,
|
||||
WWT_VIEWPORT = 17,
|
||||
WWT_18,
|
||||
WWT_19,
|
||||
WWT_GROUPBOX = 19,
|
||||
WWT_CAPTION = 20,
|
||||
WWT_CLOSEBOX = 21,
|
||||
WWT_SCROLL = 22,
|
||||
|
|
|
@ -324,6 +324,7 @@ void window_main_open();
|
|||
void window_game_top_toolbar_open();
|
||||
void window_game_bottom_toolbar_open();
|
||||
void window_about_open();
|
||||
void window_footpath_open();
|
||||
void window_title_menu_open();
|
||||
void window_title_exit_open();
|
||||
void window_title_logo_open();
|
||||
|
|
|
@ -0,0 +1,210 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (c) 2014 Ted John
|
||||
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
||||
*
|
||||
* This file is part of OpenRCT2.
|
||||
*
|
||||
* OpenRCT2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*****************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
#include "addresses.h"
|
||||
#include "strings.h"
|
||||
#include "sprites.h"
|
||||
#include "viewport.h"
|
||||
#include "widget.h"
|
||||
#include "window.h"
|
||||
|
||||
static enum WINDOW_FOOTPATH_WIDGET_IDX {
|
||||
WIDX_BACKGROUND,
|
||||
WIDX_TITLE,
|
||||
WIDX_CLOSE,
|
||||
|
||||
WIDX_TYPE_GROUP,
|
||||
WIDX_FOOTPATH_TYPE,
|
||||
WIDX_QUEUELINE_TYPE,
|
||||
|
||||
WIDX_DIRECTION_GROUP,
|
||||
WIDX_DIRECTION_NW,
|
||||
WIDX_DIRECTION_NE,
|
||||
WIDX_DIRECTION_SW,
|
||||
WIDX_DIRECTION_SE,
|
||||
|
||||
WIDX_SLOPE_GROUP,
|
||||
WIDX_SLOPEDOWN,
|
||||
WIDX_LEVEL,
|
||||
WIDX_SLOPEUP,
|
||||
WIDX_CONSTRUCT,
|
||||
WIDX_REMOVE,
|
||||
|
||||
WIDX_MODE_GROUP,
|
||||
WIDX_CONSTRUCT_ON_LAND,
|
||||
WIDX_CONSTRUCT_BRIDGE_OR_TUNNEL,
|
||||
};
|
||||
|
||||
static rct_widget window_footpath_widgets[] = {
|
||||
{ WWT_FRAME, 0, 0, 105, 0, 380, 0x0FFFFFFFF, STR_NONE },
|
||||
{ WWT_CAPTION, 0, 1, 104, 1, 14, STR_FOOTPATHS, STR_WINDOW_TITLE_TIP },
|
||||
{ WWT_CLOSEBOX, 0, 93, 103, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP },
|
||||
|
||||
// Type group
|
||||
{ WWT_GROUPBOX, 0, 3, 102, 17, 71, STR_TYPE, STR_NONE },
|
||||
{ WWT_FLATBTN, 1, 6, 52, 30, 65, 0xFFFFFFFF, STR_FOOTPATH_TIP },
|
||||
{ WWT_FLATBTN, 1, 53, 99, 30, 65, 0xFFFFFFFF, STR_QUEUE_LINE_PATH_TIP },
|
||||
|
||||
// Direction group
|
||||
{ WWT_GROUPBOX, 0, 3, 102, 75, 151, STR_DIRECTION, STR_NONE },
|
||||
{ WWT_FLATBTN, 1, 53, 97, 87, 115, 5635, STR_DIRECTION_TIP },
|
||||
{ WWT_FLATBTN, 1, 53, 97, 116, 144, 5636, STR_DIRECTION_TIP },
|
||||
{ WWT_FLATBTN, 1, 8, 52, 116, 144, 5637, STR_DIRECTION_TIP },
|
||||
{ WWT_FLATBTN, 1, 8, 52, 87, 115, 5638, STR_DIRECTION_TIP },
|
||||
|
||||
// Slope group
|
||||
{ WWT_GROUPBOX, 0, 3, 102, 155, 195, STR_SLOPE, STR_NONE },
|
||||
{ WWT_FLATBTN, 1, 17, 40, 167, 190, 5145, STR_SLOPE_DOWN_TIP },
|
||||
{ WWT_FLATBTN, 1, 41, 64, 167, 190, 5146, STR_LEVEL_TIP },
|
||||
{ WWT_FLATBTN, 1, 65, 88, 167, 190, 5147, STR_SLOPE_UP_TIP },
|
||||
{ WWT_FLATBTN, 1, 8, 97, 202, 291, 0xFFFFFFFF, STR_CONSTRUCT_THE_SELECTED_FOOTPATH_SECTION_TIP },
|
||||
{ WWT_FLATBTN, 1, 30, 75, 295, 318, 5162, STR_REMOVE_PREVIOUS_FOOTPATH_SECTION_TIP },
|
||||
|
||||
// Mode group
|
||||
{ WWT_GROUPBOX, 0, 3, 102, 321, 374, 0xFFFFFFFF, STR_NONE },
|
||||
{ WWT_FLATBTN, 1, 13, 48, 332, 367, 5639, STR_CONSTRUCT_FOOTPATH_ON_LAND_TIP },
|
||||
{ WWT_FLATBTN, 1, 57, 92, 332, 367, 5640, STR_CONSTRUCT_BRIDGE_OR_TUNNEL_FOOTPATH_TIP },
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
static void window_footpath_emptysub() { }
|
||||
static void window_footpath_mouseup();
|
||||
static void window_footpath_paint();
|
||||
|
||||
static uint32 window_footpath_events[] = {
|
||||
window_footpath_emptysub,
|
||||
window_footpath_mouseup,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_emptysub,
|
||||
window_footpath_paint,
|
||||
window_footpath_emptysub
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006A7C43
|
||||
*/
|
||||
void window_footpath_open()
|
||||
{
|
||||
rct_window* window;
|
||||
|
||||
// Check if window is already open
|
||||
window = window_bring_to_front_by_id(WC_FOOTPATH, 0);
|
||||
if (window != NULL)
|
||||
return;
|
||||
|
||||
window = window_create(
|
||||
0,
|
||||
29,
|
||||
106,
|
||||
381,
|
||||
window_footpath_events,
|
||||
WC_FOOTPATH,
|
||||
0
|
||||
);
|
||||
window->widgets = window_footpath_widgets;
|
||||
window->enabled_widgets =
|
||||
(1 << WIDX_CLOSE) |
|
||||
(1 << WIDX_FOOTPATH_TYPE) |
|
||||
(1 << WIDX_QUEUELINE_TYPE) |
|
||||
(1 << WIDX_DIRECTION_NW) |
|
||||
(1 << WIDX_DIRECTION_NE) |
|
||||
(1 << WIDX_DIRECTION_SW) |
|
||||
(1 << WIDX_DIRECTION_SE) |
|
||||
(1 << WIDX_SLOPEDOWN) |
|
||||
(1 << WIDX_LEVEL) |
|
||||
(1 << WIDX_SLOPEUP) |
|
||||
(1 << WIDX_CONSTRUCT) |
|
||||
(1 << WIDX_REMOVE) |
|
||||
(1 << WIDX_CONSTRUCT_ON_LAND) |
|
||||
(1 << WIDX_CONSTRUCT_BRIDGE_OR_TUNNEL);
|
||||
|
||||
window_init_scroll_widgets(window);
|
||||
RCT2_CALLPROC_EBPSAFE(0x006EE65A);
|
||||
show_gridlines();
|
||||
window->colours[0] = 24;
|
||||
window->colours[1] = 24;
|
||||
window->colours[2] = 24;
|
||||
|
||||
RCT2_CALLPROC_EBPSAFE(0x006EE281);
|
||||
RCT2_GLOBAL(0x00F3EF99, uint8) = 0;
|
||||
RCT2_CALLPROC_X(0x006EE212, 17, 0, 0, 18, window, 0, 0);
|
||||
RCT2_GLOBAL(0x009DE518, uint32) |= (1 << 6);
|
||||
RCT2_GLOBAL(0x00F3EF9F, uint8) = 0;
|
||||
RCT2_CALLPROC_EBPSAFE(0x006A855C);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006A7E92
|
||||
*/
|
||||
static void window_footpath_mouseup()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w;
|
||||
|
||||
__asm mov widgetIndex, dx
|
||||
__asm mov w, esi
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_CLOSE:
|
||||
window_close(w);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006A7D8B
|
||||
*/
|
||||
static void window_footpath_paint()
|
||||
{
|
||||
int x, y;
|
||||
rct_window *w;
|
||||
rct_drawpixelinfo *dpi;
|
||||
|
||||
__asm mov w, esi
|
||||
__asm mov dpi, edi
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
}
|
|
@ -212,11 +212,11 @@ static void window_game_top_toolbar_mouseup()
|
|||
RCT2_CALLPROC_EBPSAFE(0x006E0FEF);
|
||||
break;
|
||||
case WIDX_PATH:
|
||||
if (window_find_by_id(20, 0) == NULL) {
|
||||
RCT2_CALLPROC_EBPSAFE(0x00006A7C43);
|
||||
if (window_find_by_id(WC_FOOTPATH, 0) == NULL) {
|
||||
window_footpath_open();
|
||||
} else {
|
||||
RCT2_CALLPROC_EBPSAFE(0x006EE281);
|
||||
window_close_by_id(0x80 | 20, 0);
|
||||
window_close_by_id(0x80 | WC_FOOTPATH, 0);
|
||||
}
|
||||
break;
|
||||
case WIDX_CONSTRUCT_RIDE:
|
||||
|
|
Loading…
Reference in New Issue