static void tilemap_handle_keys(running_machine &machine, ui_gfx_state &state, int viswidth, int visheight) { // handle tilemap selection (open bracket,close bracket) if (machine.ui_input().pressed(IPT_UI_PREV_GROUP) && state.tilemap.which > 0) { state.tilemap.which--; state.bitmap_dirty = true; } if (machine.ui_input().pressed(IPT_UI_NEXT_GROUP) && state.tilemap.which < machine.tilemap().count() - 1) { state.tilemap.which++; state.bitmap_dirty = true; } // cache some info in locals tilemap_t *tilemap = machine.tilemap().find(state.tilemap.which); uint32_t mapwidth = tilemap->width(); uint32_t mapheight = tilemap->height(); // handle zoom (minus,plus) if (machine.ui_input().pressed(IPT_UI_ZOOM_OUT) && state.tilemap.zoom > 0) { state.tilemap.zoom--; state.bitmap_dirty = true; if (state.tilemap.zoom != 0) machine.popmessage("Zoom = %d", state.tilemap.zoom); else machine.popmessage("Zoom Auto"); } if (machine.ui_input().pressed(IPT_UI_ZOOM_IN) && state.tilemap.zoom < 8) { state.tilemap.zoom++; state.bitmap_dirty = true; machine.popmessage("Zoom = %d", state.tilemap.zoom); } // handle rotation (R) if (machine.ui_input().pressed(IPT_UI_ROTATE)) { state.tilemap.rotate = orientation_add(ROT90, state.tilemap.rotate); state.bitmap_dirty = true; } // return to (0,0) (HOME) if( machine.ui_input().pressed(IPT_UI_HOME)) { state.tilemap.xoffs = 0; state.tilemap.yoffs = 0; state.bitmap_dirty = true; } // handle flags (category) if (machine.ui_input().pressed(IPT_UI_PAGE_UP) && state.tilemap.flags != TILEMAP_DRAW_ALL_CATEGORIES) { if (state.tilemap.flags > 0) { state.tilemap.flags--; machine.popmessage("Category = %d", state.tilemap.flags); } else { state.tilemap.flags = TILEMAP_DRAW_ALL_CATEGORIES; machine.popmessage("Category All"); } state.bitmap_dirty = true; } if (machine.ui_input().pressed(IPT_UI_PAGE_DOWN) && (state.tilemap.flags < TILEMAP_DRAW_CATEGORY_MASK || (state.tilemap.flags == TILEMAP_DRAW_ALL_CATEGORIES))) { if (state.tilemap.flags == TILEMAP_DRAW_ALL_CATEGORIES) state.tilemap.flags = 0; else state.tilemap.flags++; state.bitmap_dirty = true; machine.popmessage("Category = %d", state.tilemap.flags); } // handle navigation (up,down,left,right), taking orientation into account int step = 8; // this may be applied more than once if multiple directions are pressed if (machine.input().code_pressed(KEYCODE_LSHIFT)) step = 1; if (machine.input().code_pressed(KEYCODE_LCONTROL)) step = 64; if (machine.ui_input().pressed_repeat(IPT_UI_UP, 4)) { if (state.tilemap.rotate & ORIENTATION_SWAP_XY) state.tilemap.xoffs -= (state.tilemap.rotate & ORIENTATION_FLIP_Y) ? -step : step; else state.tilemap.yoffs -= (state.tilemap.rotate & ORIENTATION_FLIP_Y) ? -step : step; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_DOWN, 4)) { if (state.tilemap.rotate & ORIENTATION_SWAP_XY) state.tilemap.xoffs += (state.tilemap.rotate & ORIENTATION_FLIP_Y) ? -step : step; else state.tilemap.yoffs += (state.tilemap.rotate & ORIENTATION_FLIP_Y) ? -step : step; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_LEFT, 6)) { if (state.tilemap.rotate & ORIENTATION_SWAP_XY) state.tilemap.yoffs -= (state.tilemap.rotate & ORIENTATION_FLIP_X) ? -step : step; else state.tilemap.xoffs -= (state.tilemap.rotate & ORIENTATION_FLIP_X) ? -step : step; state.bitmap_dirty = true; } if (machine.ui_input().pressed_repeat(IPT_UI_RIGHT, 6)) { if (state.tilemap.rotate & ORIENTATION_SWAP_XY) state.tilemap.yoffs += (state.tilemap.rotate & ORIENTATION_FLIP_X) ? -step : step; else state.tilemap.xoffs += (state.tilemap.rotate & ORIENTATION_FLIP_X) ? -step : step; state.bitmap_dirty = true; } // clamp within range while (state.tilemap.xoffs < 0) state.tilemap.xoffs += mapwidth; while (state.tilemap.xoffs >= mapwidth) state.tilemap.xoffs -= mapwidth; while (state.tilemap.yoffs < 0) state.tilemap.yoffs += mapheight; while (state.tilemap.yoffs >= mapheight) state.tilemap.yoffs -= mapheight; }
static void tilemap_handle_keys(running_machine &machine, ui_gfx_state &state, int viswidth, int visheight) { UINT32 mapwidth, mapheight; int step; // handle tilemap selection (open bracket,close bracket) if (ui_input_pressed(machine, IPT_UI_PREV_GROUP) && state.tilemap.which > 0) { state.tilemap.which--; state.bitmap_dirty = true; } if (ui_input_pressed(machine, IPT_UI_NEXT_GROUP) && state.tilemap.which < machine.tilemap().count() - 1) { state.tilemap.which++; state.bitmap_dirty = true; } // cache some info in locals tilemap_t *tilemap = machine.tilemap().find(state.tilemap.which); mapwidth = tilemap->width(); mapheight = tilemap->height(); // handle zoom (minus,plus) if (ui_input_pressed(machine, IPT_UI_ZOOM_OUT) && state.tilemap.zoom > 0) { state.tilemap.zoom--; state.bitmap_dirty = true; if (state.tilemap.zoom != 0) machine.popmessage("Zoom = %d", state.tilemap.zoom); else machine.popmessage("Zoom Auto"); } if (ui_input_pressed(machine, IPT_UI_ZOOM_IN) && state.tilemap.zoom < 8) { state.tilemap.zoom++; state.bitmap_dirty = true; machine.popmessage("Zoom = %d", state.tilemap.zoom); } // handle rotation (R) if (ui_input_pressed(machine, IPT_UI_ROTATE)) { state.tilemap.rotate = orientation_add(ROT90, state.tilemap.rotate); state.bitmap_dirty = true; } // handle navigation (up,down,left,right) step = 8; if (machine.input().code_pressed(KEYCODE_LSHIFT)) step = 1; if (machine.input().code_pressed(KEYCODE_LCONTROL)) step = 64; if (ui_input_pressed_repeat(machine, IPT_UI_UP, 4)) { state.tilemap.yoffs -= step; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, IPT_UI_DOWN, 4)) { state.tilemap.yoffs += step; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, IPT_UI_LEFT, 6)) { state.tilemap.xoffs -= step; state.bitmap_dirty = true; } if (ui_input_pressed_repeat(machine, IPT_UI_RIGHT, 6)) { state.tilemap.xoffs += step; state.bitmap_dirty = true; } // clamp within range while (state.tilemap.xoffs < 0) state.tilemap.xoffs += mapwidth; while (state.tilemap.xoffs >= mapwidth) state.tilemap.xoffs -= mapwidth; while (state.tilemap.yoffs < 0) state.tilemap.yoffs += mapheight; while (state.tilemap.yoffs >= mapheight) state.tilemap.yoffs -= mapheight; }