diff options
Diffstat (limited to 'src/ui.cpp')
-rw-r--r-- | src/ui.cpp | 243 |
1 files changed, 121 insertions, 122 deletions
@@ -534,8 +534,12 @@ namespace ui { void waitForCover(void) { auto& fi = fadeIntensity; fi = 0; - while (fi < 255) + + while (fi < 255) { + fadeUpdate(); std::this_thread::sleep_for(1ms); + } + fi = 255; } @@ -1168,148 +1172,143 @@ namespace ui { using namespace ui; -void InputSystem::update(entityx::EntityManager &en, entityx::EventManager &ev, entityx::TimeDelta dt) +void InputSystem::receive(const MainSDLEvent& event) { - (void)en; - (void)ev; - (void)dt; - if (currentMenu != nullptr) return; - - auto SCREEN_WIDTH = game::SCREEN_WIDTH; - auto SCREEN_HEIGHT = game::SCREEN_HEIGHT; - - SDL_Event e; - - // update mouse coords - mouse.x = premouse.x + offset.x - (SCREEN_WIDTH / 2); - mouse.y = (offset.y + SCREEN_HEIGHT / 2) - premouse.y; - - while(SDL_PollEvent(&e)) { - switch(e.type) { - - // escape - quit game - case SDL_QUIT: - game::endGame(); - break; - - // window events - used for resizing and stuff - case SDL_WINDOWEVENT: - switch (e.window.event) { - case SDL_WINDOWEVENT_RESIZED: - std::cout << "Window " << e.window.windowID << " resized to: " << e.window.data1 << ", " << e.window.data2 << std::endl; - auto w = e.window.data1; - auto h = e.window.data2; - ev.emit<WindowResizeEvent>(w,h); - break; - } + + const auto& e = event.event; + auto& ev = game::events; + + switch (e.type) { + // escape - quit game + case SDL_QUIT: + game::endGame(); + break; + + // window events - used for resizing and stuff + case SDL_WINDOWEVENT: + switch (e.window.event) { + case SDL_WINDOWEVENT_RESIZED: + std::cout << "Window " << e.window.windowID << " resized to: " << e.window.data1 << ", " << e.window.data2 << std::endl; + auto w = e.window.data1; + auto h = e.window.data2; + ev.emit<WindowResizeEvent>(w,h); break; + } + break; + // mouse movement - update mouse vector + case SDL_MOUSEMOTION: + premouse.x=e.motion.x; + premouse.y=e.motion.y; + break; - // mouse movement - update mouse vector - case SDL_MOUSEMOTION: - premouse.x=e.motion.x; - premouse.y=e.motion.y; + //case SDL_MOUSEBUTTONUP: + case SDL_MOUSEBUTTONDOWN: + if (currentMenu != nullptr) break; - //case SDL_MOUSEBUTTONUP: - - case SDL_MOUSEBUTTONDOWN: - if (currentMenu != nullptr) - break; - - ev.emit<MouseClickEvent>(mouse, e.button.button); + ev.emit<MouseClickEvent>(mouse, e.button.button); - // run actions? - //if ((action::make = e.button.button & SDL_BUTTON_RIGHT)) - // /*player->inv->invHover =*/ edown = false; + // run actions? + //if ((action::make = e.button.button & SDL_BUTTON_RIGHT)) + // /*player->inv->invHover =*/ edown = false; - textToDraw.clear(); + textToDraw.clear(); - if (dialogBoxExists || pageTexReady) { - // right click advances dialog - if ((e.button.button & SDL_BUTTON_RIGHT)) - dialogAdvance(); - } else { - // left click uses item - if (e.button.button & SDL_BUTTON_LEFT) { - /*if ((ent = currentWorld->getNearMob(*player)) != nullptr) { - player->inv->currentAddInteract(ent); - } - player->inv->useCurrent();*/ + if (dialogBoxExists || pageTexReady) { + // right click advances dialog + if ((e.button.button & SDL_BUTTON_RIGHT)) + dialogAdvance(); + } else { + // left click uses item + if (e.button.button & SDL_BUTTON_LEFT) { + /*if ((ent = currentWorld->getNearMob(*player)) != nullptr) { + player->inv->currentAddInteract(ent); } - + player->inv->useCurrent();*/ } - break; - case SDL_MOUSEWHEEL: - ev.emit<MouseScrollEvent>(e.wheel.y); + } + break; + + case SDL_MOUSEWHEEL: + ev.emit<MouseScrollEvent>(e.wheel.y); + break; + + // key presses + case SDL_KEYDOWN: + ev.emit<KeyDownEvent>(SDL_KEY); + switch(SDL_KEY){ + case SDLK_t: + game::time::tick(100); + break; + } + break; + + // key release + case SDL_KEYUP: + ev.emit<KeyUpEvent>(SDL_KEY); + + if (SDL_KEY == SDLK_ESCAPE) + ui::menu::toggle(); + + if (SDL_KEY == SDLK_q) { + /*auto item = player->inv->getCurrentItem(); + if (item != nullptr) { + if (player->inv->takeItem(item->name, 1) == 0) + currentWorld->addObject(item->name, "o shit waddup", + player->loc.x + player->width / 2, player->loc.y + player->height / 2); + }*/ + } else if (SDL_KEY == SDLK_h) { + quest::toggle(); + } else switch (SDL_KEY) { + case SDLK_F3: + debug ^= true; break; - - // key presses - case SDL_KEYDOWN: - ev.emit<KeyDownEvent>(SDL_KEY); - switch(SDL_KEY){ - case SDLK_t: - game::time::tick(100); - break; - } + case SDLK_BACKSLASH: + dialogBoxExists = false; break; - /* - * KEYUP - */ - - case SDL_KEYUP: - ev.emit<KeyUpEvent>(SDL_KEY); - - if (SDL_KEY == SDLK_ESCAPE) - ui::menu::toggle(); - - if (SDL_KEY == SDLK_q) { - /*auto item = player->inv->getCurrentItem(); - if (item != nullptr) { - if (player->inv->takeItem(item->name, 1) == 0) - currentWorld->addObject(item->name, "o shit waddup", - player->loc.x + player->width / 2, player->loc.y + player->height / 2); - }*/ - } else if (SDL_KEY == SDLK_h) { - quest::toggle(); - } else switch (SDL_KEY) { - case SDLK_F3: - debug ^= true; - break; - case SDLK_BACKSLASH: - dialogBoxExists = false; - break; - case SDLK_b: - if (debug) - posFlag ^= true; - break; - case SDLK_F12: - // Make the BYTE array, factor of 3 because it's RBG. - /*static GLubyte* pixels; - pixels = new GLubyte[ 3 * SCREEN_WIDTH * SCREEN_HEIGHT]; - glReadPixels(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, pixels); - takeScreenshot(pixels);*/ + case SDLK_b: + if (debug) + posFlag ^= true; + break; + case SDLK_F12: + // Make the BYTE array, factor of 3 because it's RBG. + /*static GLubyte* pixels; + pixels = new GLubyte[ 3 * SCREEN_WIDTH * SCREEN_HEIGHT]; + glReadPixels(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, pixels); + takeScreenshot(pixels);*/ - ev.emit<ScreenshotEvent>(game::SCREEN_WIDTH, game::SCREEN_HEIGHT); - - std::cout << "Took screenshot" << std::endl; - break; - case SDLK_UP: - //player->inv->setSelectionUp(); - break; - case SDLK_DOWN: - //player->inv->setSelectionDown(); - break; - default: - break; - } + ev.emit<ScreenshotEvent>(game::SCREEN_WIDTH, game::SCREEN_HEIGHT); + std::cout << "Took screenshot" << std::endl; + break; + case SDLK_UP: + //player->inv->setSelectionUp(); + break; + case SDLK_DOWN: + //player->inv->setSelectionDown(); break; default: break; } + break; + + default: + break; + } } + +void InputSystem::update(entityx::EntityManager &en, entityx::EventManager &ev, entityx::TimeDelta dt) +{ + (void)en; + (void)ev; + (void)dt; + + // update mouse coords + mouse.x = premouse.x + offset.x - (game::SCREEN_WIDTH / 2); + mouse.y = (offset.y + game::SCREEN_HEIGHT / 2) - premouse.y; +} |