void DreamWebEngine::talk() { _talkPos = 0; _inMapArea = 0; _character = _command; createPanel(); showPanel(); showMan(); showExit(); underTextLine(); convIcons(); startTalk(); _commandType = 255; readMouse(); showPointer(); workToScreen(); RectWithCallback<DreamWebEngine> talkList[] = { { 273,320,157,198,&DreamWebEngine::getBack1 }, { 240,290,2,44,&DreamWebEngine::moreTalk }, { 0,320,0,200,&DreamWebEngine::blank }, { 0xFFFF,0,0,0,0 } }; do { delPointer(); readMouse(); animPointer(); showPointer(); vSync(); dumpPointer(); dumpTextLine(); _getBack = 0; checkCoords(talkList); if (_quitRequested) break; } while (!_getBack); if (_talkPos >= 4) _personData->b7 |= 128; redrawMainScrn(); workToScreenM(); if (_speechLoaded) { cancelCh1(); _volumeDirection = -1; _volumeTo = 0; } }
bool DreamWebEngine::hangOnPQ() { _getBack = 0; RectWithCallback<DreamWebEngine> quitList[] = { { 273,320,157,198,&DreamWebEngine::getBack1 }, { 0,320,0,200,&DreamWebEngine::blank }, { 0xFFFF,0,0,0,0 } }; uint16 speechFlag = 0; do { delPointer(); readMouse(); animPointer(); showPointer(); vSync(); dumpPointer(); dumpTextLine(); checkCoords(quitList); if (_getBack == 1 || _quitRequested) { // Quit conversation delPointer(); _pointerMode = 0; cancelCh1(); return true; } if (_speechLoaded && _channel1Playing == 255) { speechFlag++; if (speechFlag == 40) break; } } while (!_mouseButton || _oldButton); delPointer(); _pointerMode = 0; return false; }
void createWindow() override { Uint32 wnd_flags = 0; for(auto rh : renderer_hint_) { setDisplayDevice(DisplayDevice::factory(rh, shared_from_this())); current_display_device() = getDisplayDevice(); if(getDisplayDevice() != nullptr) { break; } } ASSERT_LOG(getDisplayDevice() != nullptr, "No display driver was created."); if(getDisplayDevice()->ID() == DisplayDevice::DISPLAY_DEVICE_OPENGL) { // We need to do extra SDL set-up for an OpenGL context. // Since these parameter's need to be set-up before context // creation. int err; err = SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, request_major_version_); if(err) { LOG_ERROR("Setting major OpenGL context version to " << request_major_version_ << ": " << SDL_GetError()); } err = SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, request_minor_version_); if(err) { LOG_ERROR("Setting minor OpenGL context version to " << request_minor_version_ << ": " << SDL_GetError()); } SDL_GLprofile prof; switch(profile_) { case ProfileValue::COMPAT: prof = SDL_GL_CONTEXT_PROFILE_COMPATIBILITY; break; case ProfileValue::CORE: prof = SDL_GL_CONTEXT_PROFILE_CORE; break; case ProfileValue::ES: prof = SDL_GL_CONTEXT_PROFILE_ES; break; default: prof = SDL_GL_CONTEXT_PROFILE_COMPATIBILITY; } err = SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, prof); if(err) { LOG_ERROR("Setting major OpenGL profile mask to " << prof << ": " << SDL_GetError()); } err = SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); if(err) { LOG_ERROR("Setting major OpenGL depth to 24: " << SDL_GetError()); } err = SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); if(err) { LOG_ERROR("Setting major OpenGL stencil size to 8: " << SDL_GetError()); } if(use16bpp()) { SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 1); } else { SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); } if(useMultiSampling()) { if(SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1) != 0) { LOG_WARN("MSAA(" << multiSamples() << ") requested but mutlisample buffer couldn't be allocated."); } else { int msaa = next_pow2(multiSamples()); if(SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, msaa) != 0) { LOG_INFO("Requested MSAA of " << msaa << " but couldn't allocate"); } } } wnd_flags |= SDL_WINDOW_OPENGL; } else if(getDisplayDevice()->ID() == DisplayDevice::DISPLAY_DEVICE_OPENGLES) { // We need to do extra SDL set-up for an OpenGL context. // Since these parameter's need to be set-up before context // creation. SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); if(use16bpp()) { SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 1); } else { SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); } if(useMultiSampling()) { if(SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1) != 0) { LOG_WARN("MSAA(" << multiSamples() << ") requested but mutlisample buffer couldn't be allocated."); } else { int msaa = next_pow2(multiSamples()); if(SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, msaa) != 0) { LOG_INFO("Requested MSAA of " << msaa << " but couldn't allocate"); } } } wnd_flags |= SDL_WINDOW_OPENGL; } if(resizeable()) { wnd_flags |= SDL_WINDOW_RESIZABLE; } if(borderless()) { wnd_flags |= SDL_WINDOW_BORDERLESS; } int x = SDL_WINDOWPOS_CENTERED; int y = SDL_WINDOWPOS_CENTERED; int w = width(); int h = height(); switch(fullscreenMode()) { case FullScreenMode::WINDOWED: break; case FullScreenMode::FULLSCREEN_WINDOWED: x = y = SDL_WINDOWPOS_UNDEFINED; //w = h = 0; wnd_flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; break; case FullScreenMode::FULLSCREEN_EXCLUSIVE: x = y = SDL_WINDOWPOS_UNDEFINED; wnd_flags |= SDL_WINDOW_FULLSCREEN; break; } window_.reset(SDL_CreateWindow(getTitle().c_str(), x, y, w, h, wnd_flags), [&](SDL_Window* wnd){ #ifdef USE_IMGUI ImGui_ImplSdlGL3_Shutdown(); #endif if(getDisplayDevice()->ID() != DisplayDevice::DISPLAY_DEVICE_SDL) { SDL_DestroyRenderer(renderer_); } getDisplayDevice().reset(); if(context_) { SDL_GL_DeleteContext(context_); context_ = nullptr; } SDL_DestroyWindow(wnd); }); #ifdef USE_IMGUI ImGui_ImplSdlGL3_Init(window_.get()); #endif if(getDisplayDevice()->ID() != DisplayDevice::DISPLAY_DEVICE_SDL) { Uint32 rnd_flags = SDL_RENDERER_ACCELERATED; if(vSync()) { rnd_flags |= SDL_RENDERER_PRESENTVSYNC; } renderer_ = SDL_CreateRenderer(window_.get(), -1, rnd_flags); ASSERT_LOG(renderer_ != nullptr, "Failed to create renderer: " << SDL_GetError()); } ASSERT_LOG(window_ != nullptr, "Failed to create window: " << SDL_GetError()); if(getDisplayDevice()->ID() == DisplayDevice::DISPLAY_DEVICE_OPENGL ||getDisplayDevice()->ID() == DisplayDevice::DISPLAY_DEVICE_OPENGLES) { context_ = SDL_GL_CreateContext(window_.get()); ASSERT_LOG(context_ != nullptr, "Failed to GL Context: " << SDL_GetError()); } getDisplayDevice()->init(width(), height()); getDisplayDevice()->printDeviceInfo(); clear(ClearFlags::ALL); //getDisplayDevice()->setClearColor(clear_color_); //getDisplayDevice()->clear(ClearFlags::ALL); swap(); }