Exemple #1
0
void rct2_quit() {
	if (gGeneral_config.confirmation_prompt) {
		RCT2_GLOBAL(RCT2_ADDRESS_SAVE_PROMPT_MODE, uint16) = PM_QUIT;
		window_save_prompt_open();
	} else
		rct2_finish();
}
Exemple #2
0
void osinterface_process_messages()
{
	SDL_Event e;

	gLastKeyPressed = 0;
	// gCursorState.wheel = 0;
	gCursorState.left &= ~CURSOR_CHANGED;
	gCursorState.middle &= ~CURSOR_CHANGED;
	gCursorState.right &= ~CURSOR_CHANGED;
	gCursorState.old = 0;

	while (SDL_PollEvent(&e)) {
		switch (e.type) {
		case SDL_QUIT:
			rct2_finish();
			break;
		case SDL_WINDOWEVENT:
			if (e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
				osinterface_resize(e.window.data1, e.window.data2);
			break;
		case SDL_MOUSEMOTION:
			RCT2_GLOBAL(0x0142406C, int) = e.motion.x;
			RCT2_GLOBAL(0x01424070, int) = e.motion.y;

			gCursorState.x = e.motion.x;
			gCursorState.y = e.motion.y;
			break;
		case SDL_MOUSEWHEEL:
			gCursorState.wheel += e.wheel.y * 128;
			break;
		case SDL_MOUSEBUTTONDOWN:
			RCT2_GLOBAL(0x01424318, int) = e.button.x;
			RCT2_GLOBAL(0x0142431C, int) = e.button.y;
			switch (e.button.button) {
			case SDL_BUTTON_LEFT:
				RCT2_CALLPROC_1(0x00406C96, int, 1);
				gCursorState.left = CURSOR_PRESSED;
				gCursorState.old = 1;
				break;
			case SDL_BUTTON_MIDDLE:
				gCursorState.middle = CURSOR_PRESSED;
				break;
			case SDL_BUTTON_RIGHT:
				RCT2_CALLPROC_1(0x00406C96, int, 3);
				gCursorState.right = CURSOR_PRESSED;
				gCursorState.old = 2;
				break;
			}
			break;
		case SDL_MOUSEBUTTONUP:
			*((int*)0x01424318) = e.button.x;
			*((int*)0x0142431C) = e.button.y;
			switch (e.button.button) {
			case SDL_BUTTON_LEFT:
				RCT2_CALLPROC_1(0x00406C96, int, 2);
				gCursorState.left = CURSOR_RELEASED;
				gCursorState.old = 3;
				break;
			case SDL_BUTTON_MIDDLE:
				gCursorState.middle = CURSOR_RELEASED;
				break;
			case SDL_BUTTON_RIGHT:
				RCT2_CALLPROC_1(0x00406C96, int, 4);
				gCursorState.right = CURSOR_RELEASED;
				gCursorState.old = 4;
				break;
			}
			break;
		case SDL_KEYDOWN:
			gLastKeyPressed = e.key.keysym.sym;
			gKeysPressed[e.key.keysym.scancode] = 1;
			break;
		default:
			break;
		}
	}

	gCursorState.any = gCursorState.left | gCursorState.middle | gCursorState.right;

	// Updates the state of the keys
	int numKeys = 256;
	gKeysState = SDL_GetKeyboardState(&numKeys);
}
Exemple #3
0
/**
 *
 *  rct2: 0x0066DDF2
 */
static void window_save_prompt_mouseup()
{
    short widgetIndex;
    rct_window *w;
    short prompt_mode;

    window_widget_get_registers(w, widgetIndex);

    prompt_mode = RCT2_GLOBAL(RCT2_ADDRESS_SAVE_PROMPT_MODE, uint16);

    if (prompt_mode == PM_QUIT) {
        switch (widgetIndex) {
        case WQIDX_OK:
            rct2_finish();
            break;
        case WQIDX_CLOSE:
        case WQIDX_CANCEL:
            window_close(w);
            break;
        }
        return;
    } else {
        switch (widgetIndex) {
        case WIDX_SAVE:
            if (!save_game()) {
                // user pressed cancel
                window_close(w);
                return;
            }
            break;
        case WIDX_DONT_SAVE:
            break;
        case WIDX_CLOSE:
        case WIDX_CANCEL:
            window_close(w);
            return;
        }
    }


    if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 0x0D) {
        game_load_or_quit_no_save_prompt();
        return;
    }

    if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) != 0) {
        if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) != 1) {
            RCT2_CALLPROC_EBPSAFE(0x0066EE54);
            game_load_or_quit_no_save_prompt();
            return;
        } else {
            tutorial_stop();
            game_load_or_quit_no_save_prompt();
            return;
        }
    }

    if (RCT2_GLOBAL(0x009DEA66, uint16) < 3840) {
        game_load_or_quit_no_save_prompt();
        return;
    }
}