//------------------------------------------------------------------------------ void keyboard(unsigned char key, int x, int y) { switch( key ) { case 0x1b: #ifdef NOGLUT PostQuitMessage(0); #else shutdownBase(); shutdown(); exit(0); #endif break; case 'a': g_scale *= 0.5f; UPDATEUI(g_scale) break; case 'q': g_scale *= 2.0f; UPDATEUI(g_scale) break; case ' ': g_realtime.bNonStopRendering = g_realtime.bNonStopRendering ? false : true; UPDATEUI(g_realtime.bNonStopRendering); break; case '1': fx_TechScene = fx_EffectScene->findTechnique(0); LOGI("Using scene technique %s", fx_TechScene->getName()); #ifdef USESVCUI if(g_pComboTech) g_pComboTech->SetSelectedByIndex(0); #endif break; //case '2': // fx_TechScene = fx_EffectScene->findTechnique(1); // LOGI("Using scene technique %s", fx_TechScene->getName()); // #ifdef USESVCUI // if(g_pComboTech) g_pComboTech->SetSelectedByIndex(1); // #endif // break; //case '3': // fx_TechScene = fx_EffectScene->findTechnique(2); // LOGI("Using scene technique %s", fx_TechScene->getName()); // #ifdef USESVCUI // if(g_pComboTech) g_pComboTech->SetSelectedByIndex(2); // #endif // break; case 's': loadSceneEffect(); break; } }
Level::Level(string folder_p, string game_name) { folder = folder_p; terrain_info_file = "terrain"; direct_light_name = ""; spawn_yaw = 0.0f; spawn_dead_height = -3000.0f; spawn_camera_view = LIBGENS_LEVEL_CAMERA_VIEW_FORWARD; spawn_position = Vector3(0.0f, 0.0f, 0.0f); spawn_mode = "Stand"; spawn_speed = 0.0f; spawn_time = 0.0f; game_mode = LIBGENS_LEVEL_GAME_GENERATIONS; if (game_name == LIBGENS_LEVEL_GAME_STRING_UNLEASHED) { game_mode = LIBGENS_LEVEL_GAME_UNLEASHED; } loadStage(); loadSceneEffect(); loadSets(); loadTerrain(); }
//------------------------------------------------------------------------------ void initGL() { //-------------------------------------------------------------------------- #ifdef USESVCUI LOGI("adding more UI controls...\n"); class ControlsEvents : public IEventsWnd { void ScalarChanged(IControlScalar *pWin, float &v, float prev) { g_renderCnt++; }; void Button(IWindow *pWin, int pressed) { size_t tag; pWin->GetUserData(&tag); keyboard((unsigned char)tag, 0,0); }; void ToolbarChanged(IControlToolbar *pWin, int selecteditem, int prev) { int states; size_t tag; int ddsidx; pWin->GetItemInfos(selecteditem, states, tag, NULL, 0, NULL, 0, ddsidx); keyboard((unsigned char)tag, 0,0); } void CheckBoxChanged(IControlScalar *pWin, bool &value, bool prev) { g_renderCnt++; } void ComboSelectionChanged(IControlCombo *pWin, unsigned int selectedidx) { if(!strcmp(pWin->GetID(), "SCTECH")) { fx_TechScene = fx_EffectScene->findTechnique(selectedidx); } else if(!strcmp(pWin->GetID(), "MTECH")) { // ... } g_renderCnt++; }; }; static ControlsEvents controlsEvents; //--------------------------------------------------------------------------- if(g_pWinHandler) { g_pControls = g_pWinHandler->CreateWindowFolding("CTRLS", "Controls"); g_pComboTech = g_pWinHandler->CreateCtrlCombo("SCTECH", "Scene Tech", g_pControls); g_pWinHandler->CreateCtrlButton("LM", "Reload Materials", g_pControls)->SetUserData(NULL, 'm'); g_pWinHandler->CreateCtrlButton("LS", "Reload Scene Effect", g_pControls)->SetUserData(NULL, 's'); g_pWinHandler->VariableBind(g_pWinHandler->CreateCtrlCheck("RT", "Render Realtime", g_pControls), &g_realtime.bNonStopRendering); g_pControls->SetVisible(1)->SetLocation(g_winSz[0]+16,0)->SetSize(250,g_winSz[1]); // simplest solution: register the whole to one event manager g_pWinHandler->Register(&controlsEvents); } #endif //--------------------------------------------------------------------------- glewInit(); glClearColor(0.1f, 0.1f, 0.2f, 1.0f); // Bind only one vao glGenVertexArrays(1, &g_vao); glBindVertexArray(g_vao); // // Effects // nvFX::setErrorCallback(errorCallbackFunc); nvFX::setMessageCallback(errorCallbackFunc); nvFX::setIncludeCallback(includeCallbackFunc); loadSceneEffect(); loadModel(); LOGI("Pg Up/Down : zoom\n"); LOGI("Arrows: rotate the camera\n"); #ifdef NOGLUT LOGI("Ctrl + Arrows: pan the camera taget\n"); #endif LOGI("Mouse + left button: rotate the camera\n"); LOGI("Mouse + middle button: Pan the camera target\n"); LOGI("Mouse + right button: rotate Horizontally and change camera distance\n"); LOGI("space: toggle redraw on every frame\n"); LOGI("1,2,3 : switch between scene techniques\n"); LOGI("m/s : reload material/scene effect\n"); // // Timer Query // glGenQueries(4, timerQueries); // // Light... nothing special: it's a static light for this sample // perspective(g_lightProjection, 35.0f, 1.0f, 0.01f, 10.0f); look_at(g_lightView, g_lightPos, g_lightTarget, up); g_lightViewProj = g_lightProjection * g_lightView; mat4 offsetMat = mat4( 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f); g_lightViewProjScaleBias = offsetMat * g_lightViewProj; }