void weak_shared( WP & first, SP & second ){ const char * testfile = boost::archive::tmpnam(NULL); BOOST_REQUIRE(NULL != testfile); int firstm = first.lock()->m_x; int secondm = second->m_x; save2(testfile, first, second); // Clear the pointers, thereby destroying the objects they contain first.reset(); second.reset(); load2(testfile, first, second); // Check data member BOOST_CHECK(firstm == first.lock()->m_x); BOOST_CHECK(secondm == second->m_x); // Check pointer to vtable BOOST_CHECK(::dynamic_pointer_cast<Sub>(first.lock())); BOOST_CHECK(::dynamic_pointer_cast<Sub>(second)); std::remove(testfile); }
void CGuiCom::doSizeGUI(EnumeratorWidgetPtr widgets) { while (widgets.next()) { WP wp = widgets.current(); std::string relativeTo = wp->getUserString("RelativeTo"); if (relativeTo != "") { // position & size relative to the widget specified in "RelativeTo" property (or full screen) IntSize relSize; if (relativeTo == "Screen") relSize = IntSize(app->mWindow->getWidth(), app->mWindow->getHeight()); else { WP window = fWP(relativeTo); relSize = window->getSize(); } // retrieve original size & pos IntPoint origPos; IntSize origSize; origPos.left = s2i(wp->getUserString("origPosX")); origPos.top = s2i(wp->getUserString("origPosY")); origSize.width = s2i(wp->getUserString("origSizeX")); origSize.height = s2i(wp->getUserString("origSizeY")); // calc & apply new size & pos float sx = relSize.width / 800.f, sy = relSize.height / 600.f; wp->setPosition(IntPoint( int(origPos.left * sx), int(origPos.top * sy) )); wp->setSize(IntSize( int(origSize.width * sx), int(origSize.height * sy) )); } doSizeGUI(wp->getEnumerator()); } }
TabPtr CGuiCom::FindSubTab(WP tab) { TabPtr sub = 0; // 0 for not found size_t s = tab->getChildCount(); for (size_t n = 0; n < s; ++n) { WP wp = tab->getChildAt(n); if (StringUtil::startsWith(wp->getName(), "SubTab")) sub = (TabPtr)wp; } return sub; }
void CGuiCom::notifyToolTip(WP wp, const ToolTipInfo &info) { if (!mToolTip) return; #ifndef SR_EDITOR if (!app->isFocGui) #else if (!app->bGuiFocus) #endif { mToolTip->setVisible(false); return; } if (info.type == ToolTipInfo::Show) { mToolTip->setSize(320, 128); // start size for wrap mToolTipTxt->setSize(320, 128); String s = TR(wp->getUserString("tip")); mToolTipTxt->setCaption(s); const IntSize &si = mToolTipTxt->getTextSize(); mToolTip->setSize(si.width +8, si.height +8); mToolTipTxt->setSize(si.width, si.height); mToolTip->setVisible(true); boundedMove(mToolTip, info.point); } else if (info.type == ToolTipInfo::Hide) mToolTip->setVisible(false); }
void CGuiCom::setOrigPos(WP wp, const char* relToWnd) { if (!wp) return; wp->setUserString("origPosX", toStr(wp->getPosition().left)); wp->setUserString("origPosY", toStr(wp->getPosition().top)); wp->setUserString("origSizeX", toStr(wp->getSize().width)); wp->setUserString("origSizeY", toStr(wp->getSize().height)); wp->setUserString("RelativeTo", relToWnd); }
// unfocus lists (would have double up/dn key input) void CGuiCom::UnfocusLists() { WP w = MyGUI::InputManager::getInstance().getKeyFocusWidget(); while (w) { //LogO(wg->getTypeName() +" "+ wg->getName()); w = w->getParent(); #ifdef SR_EDITOR if (w == (WP)trkList) #else if (w == (WP)trkList || (app && app->gui && ( w == (WP)app->gui->carList || w == (WP)app->gui->liChalls || w == (WP)app->gui->liChamps || w == (WP)app->gui->liStages || w == (WP)app->gui->rplList)) ) #endif { MyGUI::InputManager::getInstance().resetKeyFocusWidget(); return; } } }
void save_and_load3( SP & first, SP & second, WP & third ) { const char * testfile = boost::archive::tmpnam(NULL); BOOST_REQUIRE(NULL != testfile); save3(testfile, first, second, third); // Clear the pointers, thereby destroying the objects they contain first.reset(); second.reset(); third.reset(); load3(testfile, first, second, third); BOOST_CHECK(first == second); BOOST_CHECK(first == third.lock()); std::remove(testfile); }
void CGui::btnNpreset(WP wp) { int l = bRn2->getStateSelected() ? 1 : 0; String s = wp->getName(); //"TerLN_" int i = s2i(s.substr(6)); TerLayer& t = sc->td.layersAll[idTerLay]; t.nFreq[l] = ns[i][0]; t.nOct[l] = int(ns[i][1]); t.nPers[l] = ns[i][2]; t.nPow[l] = ns[i][3]; SldUpd_TerL(); app->scn->UpdBlendmap(); }
/// Color tool window //............................................................................... void CGui::btnClrSet(WP w) { SColor* v; // rgb if (w == clrAmb) v = &sc->lAmb; else if (w == clrDiff) v = &sc->lDiff; else if (w == clrSpec) v = &sc->lSpec; bool oth = wpClrSet != w; wpClrSet = w; svAlp.setVisible(false); svHue.UpdF(&v->h); svSat.UpdF(&v->s); svVal.UpdF(&v->v); svNeg.UpdF(&v->n); IntPoint p = w->getAbsolutePosition(); p.left += 100; p.top -= 50; wndColor->setPosition(p); if (!(wndColor->getVisible() && oth)) // dont hide if changed wndColor->setVisible(!wndColor->getVisible()); }
void CGui::btnClrSetA(WP w) { SColor* v; // rgba if (w == clrFog) v = &sc->fogClr; else if (w == clrFog2) v = &sc->fogClr2; else if (w == clrFogH) v = &sc->fogClrH; else if (w == clrTrail) { TerLayer* l = GetTerRdLay(); v = &l->tclr; } bool oth = wpClrSet != w; wpClrSet = w; svAlp.setVisible(true); svHue.UpdF(&v->h); svSat.UpdF(&v->s); svVal.UpdF(&v->v); svAlp.UpdF(&v->a); svNeg.UpdF(&v->n); IntPoint p = w->getAbsolutePosition(); p.left += 100; p.top -= 50; wndColor->setPosition(p); if (!(wndColor->getVisible() && oth)) wndColor->setVisible(!wndColor->getVisible()); }
void CGuiCom::setToolTips(EnumeratorWidgetPtr widgets) { while (widgets.next()) { WP wp = widgets.current(); wp->setAlign(Align::Default); IntPoint origPos = wp->getPosition(); IntSize origSize = wp->getSize(); wp->setUserString("origPosX", toStr(origPos.left)); wp->setUserString("origPosY", toStr(origPos.top)); wp->setUserString("origSizeX", toStr(origSize.width)); wp->setUserString("origSizeY", toStr(origSize.height)); // find parent window WP p = wp->getParent(); while (p) { if (p->getTypeName() == "Window") { if (p->getUserString("NotSized").empty()) wp->setUserString("RelativeTo", p->getName()); break; } p = p->getParent(); } bool tip = wp->isUserString("tip"); if (tip) // if has tooltip string { // needed for translation wp->setUserString("tip", LanguageManager::getInstance().replaceTags(wp->getUserString("tip"))); wp->setNeedToolTip(true); wp->eventToolTip += newDelegate(this, &CGuiCom::notifyToolTip); } //LogO(wp->getName() + (tip ? " *" : "")); setToolTips(wp->getEnumerator()); } }
void CGui::InitGui() { mGui = app->mGui; gcom->mGui = mGui; Check::pGUI = mGui; SliderValue::pGUI = mGui; Check::bGI = &bGI; SliderValue::bGI = &bGI; popup->mGui = mGui; popup->mPlatform = app->mPlatform; if (!mGui) return; Ogre::Timer ti; int i; // new widgets FactoryManager::getInstance().registerFactory<MultiList2>("Widget"); FactoryManager::getInstance().registerFactory<Slider>("Widget"); // load app->vwGui = LayoutManager::getInstance().loadLayout("Game.layout"); // wnds app->mWndMain = fWnd("MainMenuWnd"); app->mWndGame = fWnd("GameWnd"); app->mWndReplays = fWnd("ReplaysWnd"); app->mWndHelp = fWnd("HelpWnd"); app->mWndOpts = fWnd("OptionsWnd"); app->mWndChampStage = fWnd("WndChampStage"); app->mWndChampStage->setVisible(false); app->mWndChampEnd = fWnd("WndChampEnd"); app->mWndChampEnd->setVisible(false); app->mWndChallStage = fWnd("WndChallStage"); app->mWndChallStage->setVisible(false); app->mWndChallEnd = fWnd("WndChallEnd"); app->mWndChallEnd->setVisible(false); app->mWndNetEnd = fWnd("WndNetEnd"); app->mWndNetEnd->setVisible(false); app->mWndTweak = fWnd("WndTweak"); app->mWndTweak->setVisible(false); app->mWndTweak->setPosition(0,40); // for find defines Btn btn, bchk; Cmb cmb; Slider* sl; SV* sv; Ck* ck; // Tabs Tab tab,sub; fTabW("TabWndGame"); app->mWndTabsGame = tab; fTabW("TabWndReplays"); app->mWndTabsRpl = tab; fTabW("TabWndHelp"); app->mWndTabsHelp = tab; fTabW("TabWndOptions"); app->mWndTabsOpts = tab; // get sub tabs vSubTabsGame.clear(); for (i=0; i < app->mWndTabsGame->getItemCount(); ++i) { // todo: startsWith("SubTab").. sub = (Tab)app->mWndTabsGame->getItemAt(i)->findWidget( i==TAB_Champs ? "ChampType" : (i==TAB_Multi ? "tabsNet" : "tabPlayer") ); vSubTabsGame.push_back(sub); // 0 for not found } vSubTabsOpts.clear(); for (i=0; i < app->mWndTabsOpts->getItemCount(); ++i) { sub = (Tab)app->mWndTabsOpts->getItemAt(i)->findWidget( i==TABo_Input ? "InputTab" : "SubTab"); vSubTabsOpts.push_back(sub); } if (pSet->inMenu > MNU_Single && pSet->inMenu <= MNU_Challenge) app->mWndTabsGame->setIndexSelected(TAB_Champs); app->mWndRpl = fWnd("RplWnd"); /// Gui common init --- gcom->InitMainMenu(); gcom->GuiInitTooltip(); gcom->GuiInitLang(); gcom->GuiInitGraphics(); gcom->InitGuiScreenRes(); loadReadme = true; toggleGui(false); app->updMouse(); gcom->bnQuit->setVisible(app->isFocGui); /// Sliders //------------------------------------------------------------------------ // Hud view sizes ---- sv= &svSizeGaug; sv->Init("SizeGaug", &pSet->size_gauges, 0.1f, 0.3f, 1.f, 3,4); sv->DefaultF(0.19f); Sev(HudSize); sv= &svTypeGaug; sv->Init("TypeGaug", &pSet->gauges_type, 0, 5); sv->DefaultI(5); Sev(HudCreate); //sv= &svLayoutGaug; sv->Init("LayoutGaug", &pSet->gauges_layout, 0, 2); sv->DefaultI(1); Sev(HudCreate); sv= &svSizeMinimap; sv->Init("SizeMinimap", &pSet->size_minimap, 0.05f, 0.3f, 1.f, 3,4); sv->DefaultF(0.165f); Sev(HudSize); sv= &svZoomMinimap; sv->Init("ZoomMinimap", &pSet->zoom_minimap, 0.9f, 4.f, 1.f, 2,4); sv->DefaultF(1.6f); Sev(HudSize); sv= &svSizeArrow; sv->Init("SizeArrow", &pSet->size_arrow, 0.1f, 0.5f, 1.f, 3,4); sv->DefaultF(0.26f); Sev(SizeArrow); Slv(CountdownTime, pSet->gui.pre_time / 0.5f /10.f); sl->mfDefault = 4.f /10.f; // graphs valGraphsType = fTxt("GraphsTypeVal"); Cmb(cmb, "CmbGraphsType", comboGraphs); cmbGraphs = cmb; if (cmb) { cmb->removeAllItems(); for (i=0; i < Gh_ALL; ++i) cmb->addItem(csGraphNames[i]); cmb->setIndexSelected(pSet->graphs_type); } valGraphsType->setCaption(toStr(pSet->graphs_type)); // Options ---- sv= &svParticles; sv->Init("Particles", &pSet->particles_len, 0.f, 4.f, 2.f); sv->DefaultF(1.5f); sv= &svTrails; sv->Init("Trails", &pSet->trails_len, 0.f, 4.f, 2.f); sv->DefaultF(3.f); // reflection sv= &svReflSkip; sv->Init("ReflSkip", &pSet->refl_skip, 0,1000, 2.f); sv->DefaultI(0); sv= &svReflFaces; sv->Init("ReflFaces", &pSet->refl_faces, 1,6); sv->DefaultI(1); sv= &svReflSize; for (i=0; i < ciShadowSizesNum; ++i) sv->strMap[i] = toStr(ciShadowSizesA[i]); sv->Init("ReflSize", &pSet->refl_size, 0,ciShadowSizesNum-1); sv->DefaultI(1.5f); sv= &svReflDist; sv->Init("ReflDist", &pSet->refl_dist, 20.f,1500.f, 2.f, 0,4, 1.f," m"); Sev(ReflDist); sv->DefaultF(300.f); sv= &svReflMode; sv->strMap[0] = TR("#{ReflMode_static}"); sv->strMap[1] = TR("#{ReflMode_single}"); sv->strMap[2] = TR("#{ReflMode_full}"); sv->Init("ReflMode", &pSet->refl_mode, 0,2); Sev(ReflMode); sv->DefaultI(1); // Sound sv= &svVolMaster; sv->Init("VolMaster", &pSet->vol_master, 0.f, 1.6f); sv->DefaultF(0.80f); Sev(VolMaster); sv= &svVolEngine; sv->Init("VolEngine", &pSet->vol_engine, 0.f, 1.4f); sv->DefaultF(0.56f); sv= &svVolTires; sv->Init("VolTires", &pSet->vol_tires, 0.f, 1.4f); sv->DefaultF(0.80f); sv= &svVolSusp; sv->Init("VolSusp", &pSet->vol_susp, 0.f, 1.4f); sv->DefaultF(0.714f); sv= &svVolEnv; sv->Init("VolEnv", &pSet->vol_env, 0.f, 1.4f); sv->DefaultF(0.928f); sv= &svVolFlSplash; sv->Init("VolFlSplash", &pSet->vol_fl_splash, 0.f, 1.4f); sv->DefaultF(0.80f); sv= &svVolFlCont; sv->Init("VolFlCont", &pSet->vol_fl_cont, 0.f, 1.4f); sv->DefaultF(0.878f); sv= &svVolCarCrash; sv->Init("VolCarCrash", &pSet->vol_car_crash, 0.f, 1.4f); sv->DefaultF(0.703f); sv= &svVolCarScrap; sv->Init("VolCarScrap", &pSet->vol_car_scrap, 0.f, 1.4f); sv->DefaultF(1.00f); // car color float f; // temp sv= &svCarClrH; sv->Init("CarClrH", &f, 0.f,1.f); Sev(CarClr); sv= &svCarClrS; sv->Init("CarClrS", &f, 0.f,1.f); Sev(CarClr); sv= &svCarClrV; sv->Init("CarClrV", &f, 0.f,1.f); Sev(CarClr); sv= &svCarClrGloss; sv->Init("CarClrGloss", &f, 0.f,1.f, 1.6f); Sev(CarClr); sv= &svCarClrRefl; sv->Init("CarClrRefl", &f, 0.f,1.4f); Sev(CarClr); UpdCarClrSld(); /// Checks //------------------------------------------------------------------------ ck= &ckReverse; ck->Init("ReverseOn", &pSet->gui.trackreverse); Cev(Reverse); // Options ---- ck= &ckParticles; ck->Init("ParticlesOn", &pSet->particles); Cev(ParTrl); ck= &ckTrails; ck->Init("TrailsOn", &pSet->trails); Cev(ParTrl); // Hud ---- ck= &ckDigits; ck->Init("Digits", &pSet->show_digits); Cev(HudShow); ck= &ckGauges; ck->Init("Gauges", &pSet->show_gauges); Cev(HudShow); ck= &ckArrow; ck->Init("Arrow", &pSet->check_arrow); Cev(Arrow); ck= &ckBeam; ck->Init("ChkBeam", &pSet->check_beam); Cev(Beam); // minimap ck= &ckMinimap; ck->Init("Minimap", &pSet->trackmap); Cev(Minimap); ck= &ckMiniZoom; ck->Init("MiniZoom", &pSet->mini_zoomed); Cev(MiniUpd); ck= &ckMiniRot; ck->Init("MiniRot", &pSet->mini_rotated); ck= &ckMiniTer; ck->Init("MiniTer", &pSet->mini_terrain); Cev(MiniUpd); ck= &ckMiniBorder; ck->Init("MiniBorder", &pSet->mini_border); Cev(MiniUpd); // camera ck= &ckCamInfo; ck->Init("CamInfo", &pSet->show_cam); Cev(HudShow); ck= &ckCamTilt; ck->Init("CamTilt", &pSet->cam_tilt); ck= &ckCamLoop; ck->Init("CamLoop", &pSet->cam_loop_chng); ck= &ckCamBnc; ck->Init("CamBounce", &pSet->cam_bounce); sv= &svCamBnc; sv->Init("CamBnc", &pSet->cam_bnc_mul, 0.f, 2.f); sv= &svFov; sv->Init("Fov", &pSet->fov_min, 50.f, 180.f, 1.f, 1,4); sv->DefaultF(90.f); sv= &svFovMax; sv->Init("FovMax", &pSet->fov_max, 50.f, 180.f, 1.f, 1,4); sv->DefaultF(120.f); sv= &svFovSm; sv->Init("FovSm", &pSet->fov_smooth, 0.f, 15.f, 1.5f); sv->DefaultF(5.f); // times, opp ck= &ckTimes; ck->Init("Times", &pSet->show_times); Cev(HudShow); ck= &ckOpponents; ck->Init("Opponents", &pSet->show_opponents); Cev(HudShow); ck= &ckOppSort; ck->Init("OppSort", &pSet->opplist_sort); // dbg,other ck= &ckFps; ck->Init("Fps", &pSet->show_fps); app->bckFps->setVisible(pSet->show_fps); ck= &ckWireframe; ck->Init("Wireframe", &app->mbWireFrame); Cev(Wireframe); ck= &ckProfilerTxt; ck->Init("ProfilerTxt", &pSet->profilerTxt); ck= &ckBulletDebug; ck->Init("BulletDebug", &pSet->bltDebug); ck= &ckBltProfTxt; ck->Init("BltProfTxt", &pSet->bltProfilerTxt); ck= &ckCarDbgBars; ck->Init("CarDbgBars", &pSet->car_dbgbars); Cev(HudShow); ck= &ckCarDbgTxt; ck->Init("CarDbgTxt", &pSet->car_dbgtxt); Cev(HudShow); ck= &ckCarDbgSurf; ck->Init("CarDbgSurf", &pSet->car_dbgsurf); Cev(HudShow); ck= &ckTireVis; ck->Init("CarTireVis", &pSet->car_tirevis); Cev(HudCreate); ck= &ckGraphs; ck->Init("Graphs", &pSet->show_graphs); Cev(Graphs); sv= &svDbgTxtClr; sv->Init("DbgTxtClr", &pSet->car_dbgtxtclr, 0, 1); sv= &svDbgTxtCnt; sv->Init("DbgTxtCnt", &pSet->car_dbgtxtcnt, 0, 8); // car setup todo: for each player .. Chk("CarABS", chkAbs, pSet->abs[0]); bchAbs = bchk; Chk("CarTCS", chkTcs, pSet->tcs[0]); bchTcs = bchk; ck= &ckCarGear; ck->Init("CarGear", &pSet->autoshift); Cev(Gear); ck= &ckCarRear; ck->Init("CarRear", &pSet->autorear); Cev(Gear); ck= &ckCarRearInv; ck->Init("CarRearThrInv",&pSet->rear_inv); Cev(Gear); TabPtr tTires = fTab("tabCarTires"); Tev(tTires, TireSet); sv= &svSSSEffect; sv->Init("SSSEffect", &f, 0.f, 1.f); sv= &svSSSVelFactor; sv->Init("SSSVelFactor", &f, 0.f, 2.f); sv= &svSteerRangeSurf; sv->Init("SteerRangeSurf", &f, 0.3f, 1.3f); sv= &svSteerRangeSim; sv->Init("SteerRangeSim", &f, 0.3f, 1.3f); Btn("SSSReset", btnSSSReset); Btn("SteerReset", btnSteerReset); SldUpd_TireSet(); // game ------------------------------------------------------------ ck= &ckVegetCollis; ck->Init("VegetCollis", &pSet->gui.collis_veget); ck= &ckCarCollis; ck->Init("CarCollis", &pSet->gui.collis_cars); ck= &ckRoadWCollis; ck->Init("RoadWCollis", &pSet->gui.collis_roadw); ck= &ckDynamicObjs; ck->Init("DynamicObjects", &pSet->gui.dyn_objects); Cmb(cmb, "CmbBoost", comboBoost); cmbBoost = cmb; cmb->removeAllItems(); cmb->addItem(TR("#{Never}")); cmb->addItem(TR("#{FuelLap}")); cmb->addItem(TR("#{FuelTime}")); cmb->addItem(TR("#{Always}")); cmb->setIndexSelected(pSet->gui.boost_type); Cmb(cmb, "CmbFlip", comboFlip); cmbFlip = cmb; cmb->removeAllItems(); cmb->addItem(TR("#{Never}")); cmb->addItem(TR("#{FuelBoost}")); cmb->addItem(TR("#{Always}")); cmb->setIndexSelected(pSet->gui.flip_type); Cmb(cmb, "CmbDamage", comboDamage); cmbDamage = cmb; cmb->removeAllItems(); cmb->addItem(TR("#{None}")); cmb->addItem(TR("#{Reduced}")); cmb->addItem(TR("#{Normal}")); cmb->setIndexSelected(pSet->gui.damage_type); Cmb(cmb, "CmbRewind", comboRewind); cmbRewind = cmb; cmb->removeAllItems(); cmb->addItem(TR("#{None}")); cmb->addItem(TR("#{Always}")); //cmb->addItem(TR("#{FuelLap}")); cmb->addItem(TR("#{FuelTime}")); cmb->setIndexSelected(pSet->gui.rewind_type); sv= &svDamageDec; sv->Init("DamageDec", &pSet->gui.damage_dec, 0.f, 100.f, 1.f, 0,1, 1.f, " %"); sv= &svBmin; sv->Init("Bmin", &pSet->gui.boost_min, 0.f, 10.f,1.f, 1,3); sv->DefaultF(2.f); sv= &svBmax; sv->Init("Bmax", &pSet->gui.boost_max, 2.f, 20.f,1.f, 1,3); sv->DefaultF(6.f); sv= &svBpow; sv->Init("Bpow", &pSet->gui.boost_power, 0.f, 2.5f,1.f, 1,3); sv->DefaultF(1.f); sv= &svBperKm; sv->Init("BperKm", &pSet->gui.boost_per_km, 0.f, 4.f, 1.f, 1,3); sv->DefaultF(1.f); sv= &svBaddSec; sv->Init("BaddSec", &pSet->gui.boost_add_sec, 0.f, 1.f, 1.f, 2,4); sv->DefaultF(0.1f); // split Btn("btnPlayers1", btnNumPlayers); Btn("btnPlayers2", btnNumPlayers); Btn("btnPlayers3", btnNumPlayers); Btn("btnPlayers4", btnNumPlayers); ck= &ckSplitVert; ck->Init("chkSplitVertically", &pSet->split_vertically); Chk("chkStartOrderRev", chkStartOrd, pSet->gui.start_order); valLocPlayers = fTxt("valLocPlayers"); if (valLocPlayers) valLocPlayers->setCaption(toStr(pSet->gui.local_players)); // sim mode radio Btn("SimModeEasy", radSimEasy); bRsimEasy = btn; btn->setStateSelected(pSet->gui.sim_mode == "easy"); Btn("SimModeNorm", radSimNorm); bRsimNorm = btn; btn->setStateSelected(pSet->gui.sim_mode == "normal"); Btn("SimModeHard", radSimHard); bRsimHard = btn; btn->setStateSelected(pSet->gui.sim_mode == "hard"); // kmh/mph radio Btn("kmh", radKmh); bRkmh = btn; bRkmh->setStateSelected(!pSet->show_mph); Btn("mph", radMph); bRmph = btn; bRmph->setStateSelected( pSet->show_mph); // startup ck= &ckStartInMain; ck->Init("StartInMain", &pSet->startInMain); ck= &ckAutoStart; ck->Init("AutoStart", &pSet->autostart); ck= &ckEscQuits; ck->Init("EscQuits", &pSet->escquit); ck= &ckOgreDialog; ck->Init("OgreDialog", &pSet->ogre_dialog); ck= &ckMouseCapture;ck->Init("MouseCapture",&pSet->mouse_capture); ck= &ckBltLines; ck->Init("BltLines", &pSet->bltLines); ck= &ckShowPics; ck->Init("ShowPictures",&pSet->loadingbackground); Chk("MultiThread", chkMultiThread, pSet->multi_thr > 0); ck= &ckDevKeys; ck->Init("DevKeys", &pSet->dev_keys); // effects ck= &ckAllEffects; ck->Init("AllEffects", &pSet->all_effects); Cev(AllEffects); ck= &ckBoostFOV; ck->Init("BoostFOV", &pSet->boost_fov); ck= &ckBloom; ck->Init("Bloom", &pSet->bloom); Cev(EffUpd); sv= &svBloomInt; sv->Init("BloomInt", &pSet->bloom_int); sv->DefaultF(0.13f); sv= &svBloomOrig; sv->Init("BloomOrig", &pSet->bloom_orig); sv->DefaultF(0.91f); ck= &ckBlur; ck->Init("MotionBlur", &pSet->blur); Cev(EffUpdShd); sv= &svBlurIntens; sv->Init("BlurIntens", &pSet->blur_int); sv->DefaultF(0.4f); ck= &ckSSAO; ck->Init("SSAO", &pSet->ssao); Cev(EffUpdShd); ck= &ckSoftPar; ck->Init("SoftParticles",&pSet->softparticles); Cev(EffUpdShd); ck= &ckGodRays; ck->Init("GodRays", &pSet->godrays); Cev(EffUpdShd); ck= &ckDoF; ck->Init("DepthOfField",&pSet->dof); Cev(EffUpdShd); sv= &svDofFocus; sv->Init("DofFocus", &pSet->dof_focus, 0.f, 2000.f, 2.f, 0,3); sv->DefaultF(100.f); sv= &svDofFar; sv->Init("DofFar", &pSet->dof_far, 0.f, 2000.f, 2.f, 0,4); sv->DefaultF(1000.f); // hdr ck= &ckHDR; ck->Init("HDR", &pSet->hdr); Cev(EffUpd); sv= &svHDRParam1; sv->Init("HDRParam1", &pSet->hdrParam1); sv->DefaultF(0.62f); sv= &svHDRParam2; sv->Init("HDRParam2", &pSet->hdrParam2, 0.f, 1.f, 2.f); sv->DefaultF(0.10f); sv= &svHDRParam3; sv->Init("HDRParam3", &pSet->hdrParam3); sv->DefaultF(0.79f); sv= &svHDRAdaptScale; sv->Init("HDRAdaptScale", &pSet->hdrAdaptationScale, 0.f, 1.f, 2.f); sv->DefaultF(0.10f); sv= &svHDRBloomInt; sv->Init("HDRBloomInt", &pSet->hdrBloomint); sv->DefaultF(0.81f); sv= &svHDRBloomOrig; sv->Init("HDRBloomOrig", &pSet->hdrBloomorig); sv->DefaultF(0.34f); sv= &svHDRVignRadius; sv->Init("HDRVignRadius", &pSet->vignRadius, 0.f, 10.f); sv->DefaultF(2.85f); sv= &svHDRVignDark; sv->Init("HDRVignDark", &pSet->vignDarkness); sv->DefaultF(0.34f); // replays ------------------------------------------------------------ Btn("RplLoad", btnRplLoad); Btn("RplSave", btnRplSave); Btn("RplDelete", btnRplDelete); Btn("RplRename", btnRplRename); // settings ck= &ckRplAutoRec; ck->Init("RplChkAutoRec", &app->bRplRec); ck= &ckRplBestOnly; ck->Init("RplChkBestOnly", &pSet->rpl_bestonly); ck= &ckRplGhost; ck->Init("RplChkGhost", &pSet->rpl_ghost); ck= &ckRplParticles; ck->Init("RplChkParticles", &pSet->rpl_ghostpar); ck= &ckRplRewind; ck->Init("RplChkRewind", &pSet->rpl_ghostrewind); ck= &ckRplGhostOther; ck->Init("RplChkGhostOther",&pSet->rpl_ghostother); ck= &ckRplTrackGhost; ck->Init("RplChkTrackGhost",&pSet->rpl_trackghost); Slv(RplNumViewports, (pSet->rpl_numViews-1) / 3.f); // radios, filter ck= &ckRplGhosts; ck->Init("RplBtnGhosts", &pSet->rpl_listghosts); Cev(RplGhosts); Btn("RplBtnAll", btnRplAll); rbRplAll = btn; Btn("RplBtnCur", btnRplCur); rbRplCur = btn; btn = pSet->rpl_listview == 0 ? rbRplAll : rbRplCur; if (btn) btn->setStateSelected(true); if (app->mWndRpl) { // replay controls Btn("RplToStart", btnRplToStart); Btn("RplToEnd", btnRplToEnd) Btn("RplPlay", btnRplPlay); btRplPl = btn; btn = fBtn("RplBack"); btn->eventMouseButtonPressed += newDelegate(this, &CGui::btnRplBackDn); btn->eventMouseButtonReleased += newDelegate(this, &CGui::btnRplBackUp); btn = fBtn("RplForward"); btn->eventMouseButtonPressed += newDelegate(this, &CGui::btnRplFwdDn); btn->eventMouseButtonReleased += newDelegate(this, &CGui::btnRplFwdUp); // info slRplPos = (Slider*)app->mWndRpl->findWidget("RplSlider"); if (slRplPos) slRplPos->eventValueChanged += newDelegate(this, &CGui::slRplPosEv); valRplPerc = fTxt("RplPercent"); valRplCur = fTxt("RplTimeCur"); valRplLen = fTxt("RplTimeLen"); } // text desc, stats valRplName = fTxt("RplName"); valRplName2 = fTxt("RplName2"); valRplInfo = fTxt("RplInfo"); valRplInfo2 = fTxt("RplInfo2"); edRplName = fEd("RplNameEdit"); //edRplDesc = fEd("RplDesc"); rplList = fLi("RplList"); Lev(rplList, RplChng); updReplaysList(); /// Car //------------------------------------------------------------ const int clrBtn = 30; Real hsv[clrBtn][5] = { // color buttons hue,sat,val, gloss,refl {0.05,0.64,0.27, 0.10,0.9}, {0.00,0.97,0.90, 0.3, 1.2}, // cherry, red {0.91,1.00,1.00, 0.5, 1.0}, {0.86,1.00,0.97, 0.8, 0.6}, // orange, yellow {0.75,0.95,0.90, 1.0, 0.4}, {0.70,1.00,0.70, 0.03,1.3}, // lime, green {0.54,0.88,0.60, 0.7, 0.85},{0.51,0.90,0.50, 0.1, 0.7}, // cyan {0.41,0.34,0.30, 0.01,0.3}, {0.43,0.58,0.23, 0.1, 1.0}, // dark-cyan //{0.45,0.54,0.37, 0.5,1.0}, {0.37,0.78,0.21, 0.34,0.5}, {0.35,0.70,0.40, 0.5, 1.0}, {0.38,0.97,0.52, 0.5, 1.0}, // dark-blue {0.44,0.90,0.71, 1.0, 1.1}, {0.47,0.80,0.80, 0.2, 0.9}, // sky-blue {0.50,0.33,0.90, 0.9, 1.0}, {0.42,0.20,0.94, 0.5, 0.4}, // sky-white {0.63,0.21,0.62, 0.1, 1.2}, {0.80,0.52,0.32, 0.1, 0.6}, {0.62,0.74,0.12, 0.8, 0.7}, // olive- {0.28,0.00,0.12, 0.09,0.0}, {0.28,0.00,0.07, 0.14,0.84}, // black {0.83,0.00,0.20, 0.0, 0.8}, {0.41,0.00,0.86, 0.15,0.37}, // silver,white {0.83,0.31,0.31, 0.0, 0.6}, {0.91,0.40,0.37, 0.0, 1.0}, {0.20,0.40,0.37, 0.05,1.0}, // orng-white- {0.24,0.90,0.26, 0.04,0.8}, {0.28,0.57,0.17, 0.3, 1.0}, {0.27,0.38,0.23, 0.03,0.6}, // dark violet }; for (i=0; i < clrBtn; ++i) { Img img = fImg("carClr"+toStr(i)); Real h = hsv[i][0], s = hsv[i][1], v = hsv[i][2], g = hsv[i][3], r = hsv[i][4]; ColourValue c; c.setHSB(1.f-h, s, v); img->setColour(Colour(c.r,c.g,c.b)); img->eventMouseButtonClick += newDelegate(this, &CGui::imgBtnCarClr); img->setUserString("s", toStr(s)); img->setUserString("h", toStr(h)); img->setUserString("v", toStr(v)); img->setUserString("g", toStr(g)); img->setUserString("r", toStr(r)); } Btn("CarClrRandom", btnCarClrRandom); sv= &svNumLaps; sv->Init("NumLaps", &pSet->gui.num_laps, 1,10, 1.3f); sv->DefaultI(2); txCarStatsTxt = fTxt("CarStatsTxt"); txCarSpeed = fTxt("CarSpeed"); txCarStatsVals = fTxt("CarStatsVals"); txCarType = fTxt("CarType"); txCarAuthor = fTxt("CarAuthor"); txTrackAuthor = fTxt("TrackAuthor"); TabPtr tPlr = fTab("tabPlayer"); Tev(tPlr, Player); Btn("btnPlayers1", btnNumPlayers); Btn("btnPlayers2", btnNumPlayers); Btn("btnPlayers3", btnNumPlayers); Btn("btnPlayers4", btnNumPlayers); ck= &ckSplitVert; ck->Init("chkSplitVertically", &pSet->split_vertically); /// Multiplayer //------------------------------------------------------------------------ tabsNet = fTab("tabsNet"); //TabItem* t1 = tabsNet->getItemAt(0); //t1->setEnabled(0); //int num = tabsNet ? tabsNet->getItemCount() : 0; //tabsNet->setIndexSelected( (tabsNet->getIndexSelected() - 1 + num) % num ); // server, games listServers = fMli("MListServers"); int c=0; Mli ml = listServers; ml->addColumn("#C0FFC0"+TR("#{Game name}"), 160); ++c; ml->addColumn("#50FF50"+TR("#{Track}"), 120); ++c; ml->addColumn("#80FFC0"+TR("#{Laps}"), 60); ++c; ml->addColumn("#FFFF00"+TR("#{Players}"), 60); ++c; ml->addColumn("#80FFFF"+TR("#{Collis.}"), 70); ++c; ml->addColumn("#A0D0FF"+TR("#{Simulation}"), 80); ++c; ml->addColumn("#A0D0FF"+TR("#{Boost}"), 90); ++c; ml->addColumn("#FF6060"+TR("#{Locked}"), 60); iColLock = c; ++c; ml->addColumn("#FF9000"+TR("#{NetHost}"), 140); iColHost = c; ++c; ml->addColumn("#FFB000"+TR("#{NetPort}"), 80); iColPort = c; ++c; Btn("btnNetRefresh",evBtnNetRefresh); btnNetRefresh = btn; Btn("btnNetJoin", evBtnNetJoin); btnNetJoin = btn; Btn("btnNetCreate", evBtnNetCreate); btnNetCreate = btn; Btn("btnNetDirect", evBtnNetDirect); btnNetDirect = btn; // game, players Edt(edNetGameName, "edNetGameName", evEdNetGameName); edNetGameName->setCaption(pSet->netGameName); valNetPassword = fTxt("valNetPassword"); Edt(edNetPassword, "edNetPassword", evEdNetPassword); listPlayers = fMli("MListPlayers"); ml = listPlayers; ml->addColumn("#80C0FF"+TR("#{Player}"), 140); ml->addColumn("#F08080"+TR("#{Car}"), 60); ml->addColumn("#C0C060"+TR("#{Peers}"), 60); ml->addColumn("#60F0F0"+TR("#{Ping}"), 60); ml->addColumn("#40F040"+TR("#{NetReady}"), 60); Btn("btnNetReady", evBtnNetReady); btnNetReady = btn; Btn("btnNetLeave", evBtnNetLeave); btnNetLeave = btn; // panels to hide tabs panNetServer = fWP("panelNetServer"); panNetServer->setVisible(false); panNetGame = fWP("panelNetGame"); panNetGame->setVisible(true); // chat edNetChat = fEd("edNetChat"); // chat area edNetChatMsg = fEd("edNetChatMsg"); // user text // track,game text valNetGameInfo = fTxt("valNetGameInfo"); // settings Edt(edNetNick, "edNetNick", evEdNetNick); edNetNick->setCaption( pSet->nickname); Edt(edNetServerIP, "edNetServerIP", evEdNetServerIP); edNetServerIP->setCaption( pSet->master_server_address); Edt(edNetServerPort,"edNetServerPort", evEdNetServerPort); edNetServerPort->setCaption(toStr(pSet->master_server_port)); Edt(edNetLocalPort, "edNetLocalPort", evEdNetLocalPort); edNetLocalPort->setCaption( toStr(pSet->local_port)); // quick help text ---- Ed edHelp = fEd("QuickHelpText"); String s = TR("#{QuickHelpText}"); s = StringUtil::replaceAll(s, "@", "\n"); edHelp->setCaption(s); // user dir Ed edUserDir = fEd("EdUserDir"); edUserDir->setCaption(PATHMANAGER::UserConfigDir()); /// graphs ---- sv= &svTC_r; sv->Init("TC_r", &pSet->tc_r, 0.5f, 2.f, 1.5f, 1,4); sv->DefaultF(1.f); sv= &svTC_xr; sv->Init("TC_xr", &pSet->tc_xr, 0.f, 5.f, 1.5f, 1,4); sv->DefaultF(1.f); sv= &svTE_yf; sv->Init("TE_yf", &pSet->te_yf, 5000.f, 10000.f, 1.f, 0,4); sv->DefaultF(7000.f); sv= &svTE_xfx; sv->Init("TE_xfx", &pSet->te_xfx, 4.f, 42.f, 2.f, 1,4); sv->DefaultF(12.f); sv= &svTE_xfy; sv->Init("TE_xfy", &pSet->te_xfy, 90.f, 560.f, 2.f, 0,3); sv->DefaultF(160.f); sv= &svTE_xpow; sv->Init("TE_xpow", &pSet->te_xf_pow, 1.f, 2.f, 1.f, 1,3); sv->DefaultF(1.f); /// tweak car //------------------------------------------------------------ for (i=0; i < ciEdCar; ++i) edCar[i] = fEd("EdCar"+toStr(i)); edPerfTest = fEd("TweakPerfTest"); tabEdCar = fTab("TabEdCar"); Tev(tabEdCar, CarEdChng); tabEdCar->setIndexSelected(pSet->car_ed_tab); tabTweak = fTab("TabTweak"); /**/tabTweak->setIndexSelected(1); txtTweakPath = fTxt("TweakPath"); Btn("TweakCarSave", btnTweakCarSave); edTweakCol = fEd("TweakEditCol"); txtTweakPathCol = fTxt("TweakPathCol"); Btn("TweakColSave", btnTweakColSave); /// tweak tires ---- Btn("TweakTireSave", btnTweakTireSave); txtTweakTire = fTxt("TweakTireTxtSaved"); Edt(edTweakTireSet, "TweakTireSet", editTweakTireSet); liTwkTiresUser = fLi("TweakTiresUser"); Lev(liTwkTiresUser, TwkTiresUser); liTwkTiresOrig = fLi("TweakTiresOrig"); Lev(liTwkTiresOrig, TwkTiresOrig); Btn("TweakTireLoad", btnTweakTireLoad); Btn("TweakTireLoadRef", btnTweakTireLoadRef); /// tweak surfaces ---- liTwkSurfaces = fLi("TweakSurfaces"); Lev(liTwkSurfaces, TwkSurfaces); //<Widget type="ComboBox" name="TweakSurface"> Btn("TweakSurfPickWh", btnTwkSurfPick); sv= &svSuFrict; sv->Init("SuFrict", &f, 0.f, 1.5f, 1.0f, 2,4); sv->DefaultF(0.65f); sv= &svSuFrictX; sv->Init("SuFrictX", &f, 0.f, 1.5f, 1.0f, 2,4); sv->DefaultF(1.f); sv= &svSuFrictY; sv->Init("SuFrictY", &f, 0.f, 1.5f, 1.0f, 2,4); sv->DefaultF(1.f); sv= &svSuBumpWave; sv->Init("SuBumpWave", &f, 0.f, 50.f, 1.2f, 1,4); sv->DefaultF(20.f); sv= &svSuBumpAmp; sv->Init("SuBumpAmp", &f, 0.f, 0.4f, 1.0f, 2,4); sv->DefaultF(0.15f); sv= &svSuBumpWave2; sv->Init("SuBumpWave2", &f, 0.f, 50.f, 1.2f, 1,4); sv->DefaultF(20.f); sv= &svSuBumpAmp2; sv->Init("SuBumpAmp2", &f, 0.f, 0.4f, 1.0f, 2,4); sv->DefaultF(0.15f); sv= &svSuRollDrag; sv->Init("SuRollDrag", &f, 0.f, 200.f, 2.f, 0,3); sv->DefaultF(60.f); sv= &svSuRollRes; sv->Init("SuRollRes", &f, 0.f, 200.f, 2.f, 0,3); sv->DefaultF(1.f); //TODO: <Widget type="Button" name="TweakSurfSave"> Cmb(cmb, "CmbSuTire", comboSurfTire); cmbSurfTire = cmb; Cmb(cmb, "CmbSuType", comboSurfType); cmbSurfType = cmb; cmb->removeAllItems(); for (i=0; i < TRACKSURFACE::NumTypes; ++i) cmb->addItem(csTRKsurf[i]); /// input tab ------- InitInputGui(); /// cars list //------------------------------------------------------------------------ Tbi carTab = fTbi("TabCar"); Mli2 li = carTab->createWidget<MultiList2>("MultiListBox",16,48,200,110, Align::Left | Align::VStretch); li->setColour(Colour(0.7,0.85,1.0)); li->removeAllColumns(); int n=0; li->addColumn("#FF8888"+TR("#{Car}"), colCar[n++]); li->addColumn("#FFC080"+TR("#{CarSpeed}"), colCar[n++]); li->addColumn("#B0B8C0"+TR("#{CarYear}"), colCar[n++]); li->addColumn("#C0C0E0"+TR("#{CarType}"), colCar[n++]); li->addColumn(" ", colCar[n++]); carList = li; FillCarList(); //once li->mSortColumnIndex = pSet->cars_sort; li->mSortUp = pSet->cars_sortup; Lev(carList, CarChng); CarListUpd(false); //upd sListCar = pSet->gui.car[0]; imgCar = fImg("CarImg"); carDesc = fEd("CarDesc"); listCarChng(carList,0); /// tracks list, text, chg btn //------------------------------------------------------------------------ gcom->trkDesc[0] = fEd("TrackDesc"); gcom->sListTrack = pSet->gui.track; gcom->GuiInitTrack(); Ed ed; Edt(ed,"RplFind",edRplFind); // netw Tbi trkTab = fTbi("TabTrack"); trkTab->setColour(Colour(0.8f,0.96f,1.f)); const IntCoord& tc = trkTab->getCoord(); WP wp = trkTab->createWidget<Widget>( "PanelSkin", 0,0,tc.width*0.66f,tc.height, Align::Default/*, "Popup", "panelNetTrack"*/); wp->setColour(Colour(0.8f,0.96f,1.f)); wp->setAlpha(0.8f); wp->setVisible(false); panNetTrack = wp; //<UserString key="RelativeTo" value="OptionsWnd"/> // new game for (i=1; i<=3; ++i) { Btn("NewGame"+toStr(i), btnNewGame); if (i==2) btNewGameCar = btn; } // championships //------------------------------------------------------------------------ // track stats 2nd set gcom->trkDesc[1] = fEd("TrackDesc2"); valTrkNet = fTxt("TrackText"); // preview images gcom->imgPrv[1] = fImg("TrackImg2"); gcom->imgPrv[1]->setImageTexture("PrvView"); gcom->imgTer[1] = fImg("TrkTerImg2"); gcom->imgTer[1]->setImageTexture("PrvTer"); gcom->imgMini[1] = fImg("TrackMap2"); gcom->imgMini[1]->setImageTexture("PrvRoad"); gcom->initMiniPos(1); // track stats text int st = gcom->StTrk; for (i=0; i < st; ++i) gcom->stTrk[1][i] = fTxt("2st"+toStr(i)); for (i=0; i < 4; ++i) gcom->imStTrk[1][i] = fImg("2ist"+toStr(i)); for (i=0; i < gcom->InfTrk; ++i) { gcom->infTrk[1][i] = fTxt("2ti"+toStr(i)); gcom->imInfTrk[1][i] = fImg("2iti"+toStr(i)); } edChInfo = fEd("ChampInfo"); if (edChInfo) edChInfo->setVisible(pSet->champ_info); Btn("btnChampInfo",btnChampInfo); panCh = fWP("panCh"); txtCh = fTxt("txtChDetail"); valCh = fTxt("valChDetail"); for (i=0; i<3; ++i) { String s = toStr(i); txtChP[i] = fTxt("txtChP"+s); valChP[i] = fTxt("valChP"+s); } edChDesc = fEd("ChampDescr"); // Champs list ------------- Tbi trktab = fTbi("TabChamps"); li = trktab->createWidget<MultiList2>("MultiListBox",0,0,400,300, Align::Left | Align::VStretch); Lev(li, ChampChng); li->setVisible(false); li->removeAllColumns(); c=0; li->addColumn("#80A080N", colCh[c++]); li->addColumn(TR("#40F040#{Name}"), colCh[c++]); li->addColumn(TR("#F0F040#{Difficulty}"), colCh[c++]); li->addColumn(TR("#80F0C0#{Stages}"), colCh[c++]); li->addColumn(TR("#80E0FF#{Time} #{TimeMS}"), colCh[c++]); li->addColumn(TR("#D0C0FF#{Progress}"), colCh[c++]); li->addColumn(TR("#F0E0F0#{Score}"), colCh[c++]); li->addColumn(" ", colCh[c++]); liChamps = li; // Challs list ------------- li = trktab->createWidget<MultiList2>("MultiListBox",0,0,400,300, Align::Left | Align::VStretch); Lev(li, ChallChng); li->setVisible(false); li->removeAllColumns(); c=0; li->addColumn("#80A080N", colChL[c++]); li->addColumn(TR("#60F060#{Name}"), colChL[c++]); li->addColumn(TR("#F0D040#{Difficulty}"), colChL[c++]); li->addColumn(TR("#F09090#{Cars}"), colChL[c++]); li->addColumn(TR("#80F0C0#{Stages}"), colChL[c++]); li->addColumn(TR("#80E0FF#{Time} m"), colChL[c++]); li->addColumn(TR("#D0C0FF#{Progress}"), colChL[c++]); li->addColumn(TR("#F0F8FF#{Prize}"), colChL[c++]); li->addColumn(TR("#F0D0F0#{Score}"), colChL[c++]); li->addColumn(" ", colChL[c++]); liChalls = li; // Stages list ------------- trktab = (TabItem*)app->mWndGame->findWidget("TabStages"); li = trktab->createWidget<MultiList2>("MultiListBox",0,0,400,300, Align::Left | Align::VStretch); li->setColour(Colour(0.7,0.73,0.76)); Lev(li, StageChng); li->setVisible(false); li->removeAllColumns(); c=0; li->addColumn("#80A080N", colSt[c++]); li->addColumn(TR("#50F050#{Track}"), colSt[c++]); li->addColumn(TR("#80FF80#{Scenery}"), colSt[c++]); li->addColumn(TR("#F0F040#{Difficulty}"), colSt[c++]); li->addColumn(TR("#60E0A0#{Laps}"), colSt[c++]); li->addColumn(TR("#80E0FF#{Time} #{TimeMS}"), colSt[c++]); li->addColumn(TR("#F0E0F0#{Score}"), colSt[c++]); li->addColumn(" ", colSt[c++]); liStages = li; updChampListDim(); ChampsListUpdate(); listChampChng(liChamps, liChamps->getIndexSelected()); ChallsListUpdate(); listChallChng(liChalls, liChalls->getIndexSelected()); // tabs tabTut = fTab("TutType"); Tev(tabTut, TutType); tabTut->setIndexSelected(pSet->tut_type); tabChamp = fTab("ChampType"); Tev(tabChamp, ChampType); tabChamp->setIndexSelected(pSet->champ_type); tabChall = fTab("ChallType"); Tev(tabChall, ChallType); tabChall->setIndexSelected(pSet->chall_type); imgTut = fImg("imgTut"); imgChamp = fImg("imgChamp"); imgChall = fImg("imgChall"); Btn("btnTutStart", btnChampStart); btStTut = btn; Btn("btnChampStart",btnChampStart); btStChamp = btn; Btn("btnChallStart",btnChallStart); btStChall = btn; Btn("btnChRestart", btnChRestart); btChRestart = btn; // ch other ck= &ckChampRev; ck->Init("ChampRev", &pSet->gui.champ_rev); Cev(ChampRev); Btn("btnChampStageBack", btnChampStageBack); Btn("btnChampStageStart",btnChampStageStart); btChampStage = btn; Btn("btnChampEndClose", btnChampEndClose); Btn("btnChallStageBack", btnChallStageBack); Btn("btnChallStageStart",btnChallStageStart); btChallStage = btn; Btn("btnChallEndClose", btnChallEndClose); Btn("btnStageNext", btnStageNext); Btn("btnStagePrev", btnStagePrev); valStageNum = fTxt("StageNum"); edChampStage = fEd("ChampStageText"); edChampEnd = fEd("ChampEndText"); edChallStage = fEd("ChallStageText"); edChallEnd = fEd("ChallEndText"); // stage prv imgChampStage = fImg("ChampStageImg"); imgChampStage->setImageTexture("PrvStCh"); imgChallStage = fImg("ChallStageImg"); imgChallStage->setImageTexture("PrvStCh"); imgChampEndCup = fImg("ChampEndImgCup"); txChampEndF = fTxt("ChampEndFinished"); imgChallFail = fImg("ChallEndImgFail"); txChallEndF = fTxt("ChallEndFinished"); imgChallCup = fImg("ChallEndImgCup"); txChallEndC = fTxt("ChallEndCongrats"); UpdChampTabVis(); // netw end list ------ Btn("btnNetEndClose", btnNetEndClose); li = app->mWndNetEnd->createWidget<MultiList2>("MultiListBox",4,42,632,360, Align::Left | Align::VStretch); li->setInheritsAlpha(false); li->setColour(Colour(0.8,0.9,1,1)); li->removeAllColumns(); li->addColumn("", 40); //N li->addColumn(TR("#{TBPlace}"), 60); li->addColumn(TR("#{NetNickname}"), 180); li->addColumn(TR("#{TBTime}"), 120); li->addColumn(TR("#{TBBest}"), 120); li->addColumn(TR("#{TBLap}"), 60); liNetEnd = li; bGI = true; // gui inited, gui events can now save vals LogO(String("::: Time Init Gui: ") + fToStr(ti.getMilliseconds(),0,3) + " ms"); }
/// Terrain generate ///-------------------------------------------------------------------------------------------------------------------------- void CGui::btnTerGenerate(WP wp) { const std::string& n = wp->getName(); bool add = false, sub = false; if (n == "TerrainGenAdd") add = true; else if (n == "TerrainGenSub") sub = true;/*else if (n == "TerrainGenMul") mul = true;*/ float* hfData = sc->td.hfHeight, *hfAng = sc->td.hfAngle; const int sx = sc->td.iVertsX; // sx=sy const float s = sx * 0.5f, s1 = 1.f/s; const float ox = pSet->gen_ofsx, oy = pSet->gen_ofsy; //) road test bool bRoad = pSet->gen_roadsm > 0.1f; float rdPow = pSet->gen_roadsm; //- int r = 0; Image imgRoad; if (bRoad) { try { imgRoad.load(String("roadDensity.png"),"General"); } catch(...) { imgRoad.load(String("grassDensity.png"),"General"); } r = imgRoad.getWidth(); } QTimer ti; ti.update(); /// time // generate noise terrain hmap register int a,x,y; register float c; for (y=0; y < sx; ++y) { a = y * sx; for (x=0; x < sx; ++x,++a) { float fx = ((float)x - s)*s1, fy = ((float)y - s)*s1; // -1..1 c = app->Noise(y*s1-oy, x*s1+ox, pSet->gen_freq, pSet->gen_oct, pSet->gen_persist) * 0.8f; c = c >= 0.f ? powf(c, pSet->gen_pow) : -powf(-c, pSet->gen_pow); //) check if on road - uses roadDensity.png // todo: smooth depends on -smooth grass dens par, own val? if (bRoad) { int mx = ( fx+1.f)*0.5f*r, my = (-fy+1.f)*0.5f*r; float cr = imgRoad.getColourAt( std::max(0,std::min(r-1, mx)), std::max(0,std::min(r-1, my)), 0).r; //c = c + std::max(0.f, std::min(1.f, 2*c-cr)) * pow(cr, rdPow); c *= pow(cr, rdPow); } c *= app->linRange(hfAng[a], pSet->gen_terMinA,pSet->gen_terMaxA, pSet->gen_terSmA); c *= app->linRange(hfData[a], pSet->gen_terMinH,pSet->gen_terMaxH, pSet->gen_terSmH); hfData[a] = add ? (hfData[a] + c * pSet->gen_scale + pSet->gen_ofsh) : ( sub ? (hfData[a] - c * pSet->gen_scale - pSet->gen_ofsh) : (hfData[a] * c * pSet->gen_mul) ); } } ti.update(); /// time float dt = ti.dt * 1000.f; LogO(String("::: Time Ter Gen: ") + fToStr(dt,0,3) + " ms"); std::ofstream of; of.open(getHMapNew().c_str(), std::ios_base::binary); int siz = sx * sx * sizeof(float); of.write((const char*)&hfData[0], siz); of.close(); ti.update(); /// time dt = ti.dt * 1000.f; LogO(String("::: Time Ter Gen save: ") + fToStr(dt,0,3) + " ms"); app->bNewHmap = true; app->UpdateTrack(); }
void CGui::btnBrushPreset(WP img) { int id = 0; sscanf(img->getName().c_str(), "brI%d", &id); app->SetBrushPreset(id); }