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