void ms_tick(void) { DrawScene(); draw_banner(); if (ms.state == MS_EXPANDING) { ms.expandframe++; if (ms.expandframe > EXPAND_LENGTH) ms.state = MS_DISPLAYED; else draw_expand(); } if (ms.state == MS_DISPLAYED) { // scan down effect if (ms.current_row < map.ysize) { draw_row(ms.current_row++); if (ms.current_row < map.ysize) draw_row(ms.current_row++); } // draw map DrawRect(ms.x - 1, ms.y - 1, ms.x + ms.w, ms.y + ms.h, DK_BLUE); DrawSurface(ms.sfc, ms.x, ms.y); // you-are-here dot if (++ms.timer & 8) draw_sprite(ms.px, ms.py, SPR_MAP_PIXELS, 4); // dismissal if (ms.lastbuttondown) { if (!buttondown()) ms.lastbuttondown = false; } else if (buttondown()) { ms.state = MS_CONTRACTING; } } else if (ms.state == MS_CONTRACTING) { ms.expandframe--; if (ms.expandframe <= 0) { int param = (ms.return_gm == GM_INVENTORY) ? 1 : 0; game.setmode(ms.return_gm, param); } else { draw_expand(); } } }
void TB_StageSelect::HandleInput() { bool button_down = false; if (textbox.YesNoPrompt.IsVisible() || fMadeSelection) return; #ifdef CONFIG_USE_TAPS // taps control { int nslots = CountActiveSlots(); int total_spacing = ((nslots - 1) * LOCS_SPACING); int total_width = total_spacing + (nslots * sprites[SPR_STAGEIMAGE].w); int x = (Graphics::SCREEN_WIDTH / 2) - (total_width / 2); for (int i = 0; i < nslots; ++i) { RectI rect = Sprites::get_sprite_rect(x, LOCS_Y, SPR_STAGEIMAGE); if (VJoy::ModeAware::wasTap(rect)) { if (fSelectionIndex == i) { button_down = true; fLastButtonDown = false; VJoy::ModeAware::specScreenChanged(VJoy::ModeAware::EStageSelect1, false); VJoy::ModeAware::specScreenChanged(VJoy::ModeAware::EStageSelect2, true); } else { fSelectionIndex = i; sound(SND_MENU_MOVE); UpdateText(); } break; } x += (sprites[SPR_STAGEIMAGE].w + LOCS_SPACING); } } #endif // pad control { if (justpushed(LEFTKEY)) { MoveSelection(LEFT); } else if (justpushed(RIGHTKEY)) { MoveSelection(RIGHT); } // when user picks a location return the new script to execute button_down = button_down || buttondown(); } if (button_down && !fLastButtonDown) { int scriptno; if (!GetSlotByIndex(fSelectionIndex, NULL, &scriptno)) { stat("StageSelect: starting activation script %d", scriptno); JumpScript(scriptno, SP_MAP); } else { // dismiss "no permission to teleport" StopScripts(); } fMadeSelection = true; } fLastButtonDown = button_down; }