1 #pragma once 2 #include "BaseApp.h" 3 #include "../vdrift/tracksurface.h" 4 #include "../vdrift/track.h" 5 #include "../ogre/common/Gui_Def.h" 6 #include "../ogre/common/SliderValue.h" 7 8 #include <OgreCommon.h> 9 #include <OgreVector3.h> 10 #include <OgreString.h> 11 12 #include <MyGUI_Types.h> 13 #include <MyGUI_WidgetToolTip.h> 14 #include <MyGUI_Enumerator.h> 15 #include <MyGUI_WidgetDefines.h> //EnumeratorWidgetPtr 16 #include <MyGUI_Colour.h> 17 #include "../ogre/common/MessageBox/MessageBoxStyle.h" 18 19 20 namespace wraps { class RenderBoxScene; } 21 class App; class SETTINGS; class CScene; class Scene; class CData; class CGuiCom; 22 23 24 class CGui : public BGui 25 { 26 public: 27 App* app; SETTINGS* pSet; 28 CScene* scn; Scene* sc; CData* data; 29 MyGUI::Gui* mGui; CGuiCom* gcom; 30 31 CGui(App* app1); 32 33 typedef std::list <std::string> strlist; 34 35 36 /// Gui 37 ///----------------------------------------------------------------------------------------------------------------- 38 39 bool bGI; // gui inited set values 40 void InitGui(), GuiUpdate(); 41 void UpdGuiAfterPreset(); 42 43 Txt valTrk[2]; 44 std::vector<Tab> vSubTabsTrack, vSubTabsEdit, vSubTabsHelp, vSubTabsOpts; 45 46 // util 47 void toggleGui(bool toggle=false); 48 void GuiShortcut(WND_Types wnd, int tab, int subtab=-1), NumTabNext(int rel); 49 50 51 // ed 52 void Status(Ogre::String s, float r,float g,float b); 53 void SetGuiFromXmls(); // update gui controls 54 bool noBlendUpd; 55 56 /// mode, status 57 Img imgCam, imgEdit, imgGui; 58 WP panStatus; Txt txtStatus; 59 60 61 // clr 62 const static MyGUI::Colour sUsedClr[8]; 63 void SetUsedStr(Txt valUsed, int cnt, int yellowAt); 64 65 // _Tools_ 66 void ToolTexAlpha(), ToolSceneXml(), 67 ToolTracksWarnings(), ToolBrushesPrv(), ToolPresets(); 68 69 70 // tool windows texts 71 const static int MAX_TXT=12, 72 BR_TXT=9, RD_TXT=12, RDS_TXT=11, // brush, road, road stats 73 ST_TXT=6, FL_TXT=6, OBJ_TXT=6, RI_TXT=6; // start, fluids, objects, 74 75 Txt brTxt[BR_TXT], brVal[BR_TXT], brKey[BR_TXT], 76 rdTxt[RD_TXT], rdVal[RD_TXT], rdKey[RD_TXT], 77 rdTxtSt[RDS_TXT], rdValSt[RDS_TXT], 78 stTxt[ST_TXT], flTxt[FL_TXT], objTxt[OBJ_TXT], riTxt[RI_TXT]; 79 WP objPan; 80 Img brImg; Tab wndTabs; 81 82 83 // [settings] 84 Ck ckAutoStart, ckEscQuits; // startup 85 Ck ckStartInMain, ckOgreDialog, ckMouseCapture, ckScreenPng; 86 87 SlV(SizeMinimap); SlV(SizeRoadP); 88 SV svCamSpeed, svCamInert; 89 SV svTerUpd, svMiniUpd; 90 91 CK(Minimap); 92 void btnSetCam(WP); 93 94 CK(Fps); CK(Wireframe); Ck ckAllowSave; 95 CK(InputBar); CK(CamPos); 96 97 // top view 98 void toggleTopView(); 99 bool bTopView, oldFog; 100 Ogre::Vector3 oldPos,oldRot; 101 102 103 // Color tool wnd ---- 104 Wnd wndColor; WP wpClrSet; 105 SV svHue,svSat,svVal, svAlp,svNeg; 106 void btnClrSet(WP), btnClrSetA(WP), slUpdClr(SV*); 107 108 109 // [Sky] ---- 110 Btn btnSky; // pick 111 Cmb cmbRain1,cmbRain2; 112 void comboSky(CMB), comboRain1(CMB),comboRain2(CMB); 113 114 SV svRain1Rate, svRain2Rate; 115 SV svSunPitch, svSunYaw, svSkyYaw; 116 void slUpdSky(SV*), slUpdSun(SV*), slUpdFog(SV*); 117 118 SV svFogStart, svFogEnd; 119 SV svFogHStart, svFogHEnd; // Hfog 120 SV svFogHeight, svFogHDensity, svFogHDmg; 121 122 Img clrAmb, clrDiff, clrSpec, clrFog, clrFog2, clrFogH; 123 124 CK(Fog); Ck ckWeather; 125 126 127 /// [Terrain] -------------------- 128 // Ter HMap 129 Tab tabsHmap; void tabHmap(TAB); 130 void updTabHmap(); int getHMapSizeTab(); 131 132 // Ter HMap 133 SlV(TerTriSize); int UpdTxtTerSize(float mul=1.f); 134 SV svTerErrorNorm; void slTerErrorNorm(SV*); 135 SV svTerNormScale, svTerSpecPow, svTerSpecPowEm; void slTerPar(SV*); 136 137 Ogre::String getHMapNew(); 138 void btnTerrainNew(WP), btnTerGenerate(WP); 139 void btnTerrainHalf(WP), btnTerrainDouble(WP), btnTerrainMove(WP); // tools 140 141 void btnBrushPreset(WP); 142 143 // Ter Generator 144 SV svTerGenScale, svTerGenOfsX, svTerGenOfsY; 145 SV svTerGenFreq, svTerGenOct, svTerGenPers, svTerGenPow; 146 SV svTerGenMul, svTerGenOfsH, svTerGenRoadSm; 147 SV svTerGenAngMin, svTerGenAngMax, svTerGenAngSm; 148 SV svTerGenHMin, svTerGenHMax, svTerGenHSm; 149 void slTerGen(SV*); 150 151 152 // Ter Layer ---- 153 int idTerLay; // help var 154 void SldUpd_TerL(); 155 156 Btn btnTexDiff; // pick 157 Tab tabsTerLayers; void tabTerLayer(TAB); 158 CK(TerLayOn); 159 Txt valTerLAll,valTriplAll; 160 void updUsedTer(); 161 void btnUpdateLayers(WP); 162 163 // texture 164 Cmb cmbTexNorm; void comboTexNorm(CMB); 165 Img imgTexDiff; 166 Ck ckTexNormAuto; bool bTexNormAuto; // auto norm tex name 167 void btnTerLmoveL(WP),btnTerLmoveR(WP); 168 169 // Ter blendmap 170 SV svTerLScale; 171 SV svTerLAngMin, svTerLHMin, svTerLAngSm; 172 SV svTerLAngMax, svTerLHMax, svTerLHSm; 173 // noise 174 SV svTerLNoise, svTerLNprev, svTerLNnext2, svTerLDmg; 175 SV svTerLN_Freq[2], svTerLN_Oct[2], svTerLN_Pers[2], svTerLN_Pow[2]; 176 void slTerLay(SV*), SldUpd_TerLNvis(); 177 178 CK(TerLNOnly); CK(TerLayTripl); 179 CK(DebugBlend); bool bDebugBlend; 180 Img dbgLclr; 181 182 // noise btns 183 Btn bRn1, bRn2; 184 void radN1(WP), radN2(WP), btnNpreset(WP); 185 void btnNrandom(WP), btnNswap(WP); 186 187 188 // Ter Particles 189 SV svLDust,svLDustS,svLMud,svLSmoke; Img clrTrail; 190 void SldUpd_Surf(); 191 Cmb cmbParDust,cmbParMud,cmbParSmoke; void comboParDust(CMB); 192 193 // Ter Surfaces 194 Cmb cmbSurface; void comboSurface(CMB), UpdSurfInfo(); 195 Txt txtSurfTire, txtSuBumpWave,txtSuBumpAmp, txtSuRollDrag, txtSuFrict, txtSurfType; 196 197 198 /// [Vegetation] -------------------- 199 // global params 200 SV svGrassDens, svTreesDens; 201 Ed edGrPage,edGrDist; 202 Ed edTrPage,edTrDist, edTrImpDist; 203 // grass 204 Ed edGrSwayDistr, edGrSwayLen, edGrSwaySpd; 205 void editTrGr(Ed); 206 SV svTrRdDist; SV svGrDensSmooth; 207 208 // model view 3d (veget,objs) 209 Txt txVHmin,txVHmax,txVWmin,txVWmax, txVCnt; 210 void updVegetInfo(); 211 212 Can viewCanvas; 213 wraps::RenderBoxScene* viewBox; Ogre::Vector3 viewSc; 214 MyGUI::IntCoord GetViewSize(); 215 Ogre::String viewMesh; 216 float tiViewUpd; 217 void Upd3DView(Ogre::String mesh); 218 219 /// models (paged layers) -------- 220 int idPgLay; // help var 221 void SldUpd_PgL(); 222 223 Btn btnVeget; // pick 224 Tab tabsPgLayers; void tabPgLayers(TAB); 225 CK(PgLayOn); Txt valLTrAll; 226 void btnUpdateVeget(WP); 227 228 SV svLTrDens; 229 SV svLTrRdDist, svLTrRdDistMax; 230 SV svLTrMinSc, svLTrMaxSc; void slLTrSc(SV*); 231 SV svLTrWindFx, svLTrWindFy; 232 SV svLTrMaxTerAng; 233 SV svLTrMinTerH, svLTrMaxTerH, svLTrFlDepth; 234 235 /// grass layers -------- 236 int idGrLay; // help var 237 void SldUpd_GrL(); 238 239 Btn btnGrassMtr; // pick 240 Tab tabsGrLayers; void tabGrLayers(TAB); 241 CK(GrLayOn); Txt valLGrAll; 242 void btnUpdateGrass(WP); 243 244 SV svLGrDens, svGrChan; 245 SV svGrMinX, svGrMaxX; 246 SV svGrMinY, svGrMaxY; 247 248 void comboGrassMtr(CMB); 249 Cmb cmbGrassClr; void comboGrassClr(CMB); 250 Img imgGrass,imgGrClr; 251 252 /// grass channels -------- 253 int idGrChan; // help var 254 void SldUpd_GrChan(); 255 Tab tabsGrChan; void tabGrChan(TAB); 256 257 SV svGrChAngMin, svGrChAngMax, svGrChAngSm; // ter angle,height 258 SV svGrChHMin, svGrChHMax, svGrChHSm, svGrChRdPow; 259 SV svGrChNoise, svGrChNfreq, svGrChNoct, svGrChNpers, svGrChNpow; 260 261 262 // [Road] ---- 263 // materials 264 int idRdPick; 265 Btn btnRoad[4]; // pick 266 Cmb cmbPipeMtr[4], 267 cmbRoadWMtr, cmbPipeWMtr, cmbRoadColMtr; 268 void comboPipeMtr(CMB), 269 comboRoadWMtr(CMB), comboPipeWMtr(CMB), comboRoadColMtr(CMB); 270 // params 271 SV svRdTcMul,svRdTcMulW, svRdTcMulP,svRdTcMulPW, svRdTcMulC; 272 SV svRdLenDim,svRdWidthSteps, svRdPwsM,svRdPlsM; 273 SV svRdMergeLen,svRdLodPLen, svRdColN,svRdColR; 274 void SldUpd_Road(); 275 Ed edRdSkirtLen,edRdSkirtH, edRdHeightOfs; 276 void editRoad(Ed); 277 278 279 // [Surfaces] ---- 280 int idSurf; // help var 281 struct TerLayer* GetTerRdLay(); 282 283 Li surfList; void listSurf(Li, size_t); 284 void UpdSurfList(); 285 Ck ckRoad1Mtr; 286 287 288 // [Game] ---- 289 SV svDamage, svWind, svGravity; 290 CK(DenyReversed); CK(TiresAsphalt); CK(TerrainEmissive); 291 CK(NoWrongChks); 292 void SldUpd_Game(); 293 // sound 294 Txt txtRevebDescr; 295 Cmb cmbReverbs; void comboReverbs(CMB), UpdRevDescr(); 296 // info 297 Txt txtEdInfo; void UpdEdInfo(); 298 299 300 // [Pacenotes] ---- 301 SV svPaceShow, svPaceDist, svPaceSize, svPaceNear, svPaceAlpha; 302 void slUpd_Pace(SV*); 303 CK(TrkReverse); 304 305 306 // [Objects] ---- 307 // gui lists 308 Li objListDyn, objListSt, objListRck, objListBld, objListCat; 309 void listObjsChng(Li, size_t), listObjsNext(int rel); 310 void listObjsCatChng(Li, size_t); 311 312 313 // [Tools] ---- 314 // copy 315 Txt valTrkCpySel; 316 void btnTrkCopySel(WP); bool ChkTrkCopy(); 317 void btnCopySun(WP), btnCopyTerHmap(WP), btnCopyTerLayers(WP); 318 void btnCopyVeget(WP), btnCopyRoad(WP), btnCopyRoadPars(WP); 319 // delete 320 void btnDeleteRoad(WP),btnDeleteFluids(WP),btnDeleteObjects(WP); 321 // scale 322 float fScale, fScaleTer; 323 SV svScaleAllMul, svScaleTerHMul; 324 void btnScaleAll(WP), btnScaleTerH(WP); 325 // align 326 SV svAlignWidthAdd, svAlignWidthMul, svAlignSmooth; 327 328 329 // [Warnings] ---- 330 Ed edWarn; Txt txWarn; 331 Img imgWarn,imgInfo; 332 void WarningsCheck(const class Scene* sc, const SplineRoad* road); 333 334 int cntWarn; // count 335 bool logWarn; // only log warnings (tool) 336 337 enum eWarn { ERR=0, WARN, INFO, NOTE, TXT }; 338 void Warn(eWarn type, Ogre::String text); 339 340 int iLoadNext; 341 Ck ckCheckSave, ckCheckLoad; 342 343 344 // [Tweak] ---- 345 void CreateGUITweakMtr(), slTweak(SL),edTweak(Ed); 346 void TweakSetMtrPar(std::string name, float val); void comboTweakMtr(CMB); 347 348 349 // [Pick] ---- 350 Ck ckPickSetPar; WP panPick; 351 Mli2 liSky, liTex, liGrs, liVeg, liRd; 352 enum EPick { P_Sky=0, P_Tex, P_Grs, P_Veg, P_Rd, P_All }; 353 int liPickW[P_All]; 354 void PickShow(EPick n, bool toggleVis=true); 355 int liNext(Mli2 li, int rel); void keyPickNext(int rel); 356 357 void btnPickSky(WP), wheelSky(WP, int rel), listPickSky(Mli2 li, size_t pos); 358 void btnPickTex(WP), wheelTex(WP, int rel), listPickTex(Mli2 li, size_t pos); 359 void btnPickGrass(WP), wheelGrs(WP, int rel), listPickGrs(Mli2 li, size_t pos); 360 void btnPickVeget(WP), wheelVeg(WP, int rel), listPickVeg(Mli2 li, size_t pos); 361 void btnPickRoad(WP), wheelRd(WP, int rel), listPickRd(Mli2 li, size_t pos); 362 363 364 365 /// [Track] ---- 366 Ogre::String sCopyTrack; int bCopyTrackU; // for copy tools 367 Ogre::String PathCopyTrk(int user=-1); 368 Ogre::String GetListTrk(); 369 370 void btnTrackNew(WP), btnTrackRename(WP); 371 void btnTrackDel(WP); // track 372 void msgTrackDel(MyGUI::Message* sender, MyGUI::MessageBoxStyle result); 373 void btnNewGame(WP); // load track 374 375 Ed trkName; void editTrkDesc(Ed); 376 377 378 // system, utils 379 Ogre::String strFSerrors; 380 bool Rename(Ogre::String from, Ogre::String to); 381 bool Delete(Ogre::String file), DeleteDir(Ogre::String dir); 382 bool CreateDir(Ogre::String dir); 383 bool Copy(Ogre::String file, Ogre::String to); 384 385 std::vector<Ogre::String> vsMaterials; 386 void GetMaterials( Ogre::String filename, bool clear=true, Ogre::String type="material"); // ogre resource 387 void GetMaterialsMat(Ogre::String filename, bool clear=true, Ogre::String type="material"); // direct path+file 388 }; 389