2 #ifndef WORLDSIM_MENU_WORLD_GENERATOR_HPP 3 #define WORLDSIM_MENU_WORLD_GENERATOR_HPP 13 #include <Graphics/GUI/GUI.hpp> 15 #include <Device/Display/DisplayInterface.hpp> 16 #include <Device/Mouse/MouseInterface.hpp> 17 #include <Data/Debug/DebugMacro.hpp> 19 #include <Data/DataTools.hpp> 26 GUI_Manager guiManager;
29 ColourRGB <unsigned char> cNormal;
30 ColourRGB <unsigned char> cSelected;
31 ColourRGB <unsigned char> cDropPanel;
32 ColourRGB <unsigned char> cHighlight;
35 Texture* backgroundTexture;
37 GUI_Button buttonBack;
39 GUI_Button buttonExpandPreviewWindow;
41 GUI_TextBox textMenuTitle;
43 GUI_TextEntry textEntryWorldName;
45 GUI_TextEntry textEntryFullSeed;
47 GUI_TextEntry textEntryFullBiome;
49 GUI_Button buttonGenerate;
51 GUI_Button buttonSimWorld;
53 GUI_Button buttonExportData;
55 GUI_Button buttonLoadWorld;
57 GUI_CycleButton worldSize;
59 GUI_TextBox textWorldSize;
61 GUI_CycleButton freeSteps;
63 GUI_TextBox textFreeSteps;
65 GUI_CycleButton guiWrapX;
66 GUI_TextBox textWrapX;
68 GUI_CycleButton guiWrapY;
69 GUI_TextBox textWrapY;
71 GUI_CycleButton guiIslandMode;
72 GUI_TextBox textIslandMode;
74 GUI_NumberInput nLandPercent;
75 GUI_TextBox textOceanPercent;
78 GUI_TextBox guiCaptionNCiv;
80 GUI_NumberInput nTribe;
81 GUI_TextBox guiCaptionNTribe;
83 GUI_NumberInput nTribeDwarven;
84 GUI_TextBox guiCaptionNTribeDwarven;
86 GUI_NumberInput nTribeElven;
87 GUI_TextBox guiCaptionNTribeElven;
89 bool fullScreenPreview;
95 fullScreenPreview=
false;
100 buttonGenerate.clicked=
false;
106 guiManager.setFont(_font);
119 backgroundTexture=&TEX_NEW_GAME_BACKGROUND;
121 fullScreenPreview=
true;
124 cNormal.set(200,200,200);
125 cSelected.set(180,180,180);
126 cDropPanel.set(170,170,170);
127 cHighlight.set(170,170,170);
129 buttonExpandPreviewWindow.setPanel(0,0,32,32);
131 if(fullScreenPreview==
false)
134 int panelSizeX = panelX2-panelX1;
135 int panelSizeY = panelY2-panelY1;
137 int worldPreviewX1=panelX1+(panelSizeX/2);
138 int worldPreviewY1=panelY1+(panelSizeY/2);
155 buttonBack.text=
"Back";
156 buttonBack.setColours(cNormal,cHighlight,0);
161 worldSize.addOption(
"33");
162 worldSize.addOption(
"65");
163 worldSize.addOption(
"129");
164 worldSize.addOption(
"257");
165 worldSize.addOption(
"513");
166 worldSize.addOption(
"1025");
167 worldSize.addOption(
"2049");
168 worldSize.addOption(
"4097");
169 worldSize.addOption(
"8193");
170 worldSize.texCycleButton=&TEX_GUI_DECREMENT;
171 worldSize.setColours(cNormal,cHighlight,0);
173 freeSteps.currentOption=0;
174 freeSteps.addOption(
"0");
175 freeSteps.addOption(
"1");
176 freeSteps.addOption(
"2");
177 freeSteps.addOption(
"3");
178 freeSteps.addOption(
"4");
179 freeSteps.addOption(
"5");
180 freeSteps.addOption(
"6");
181 freeSteps.addOption(
"7");
182 freeSteps.addOption(
"8");
183 freeSteps.addOption(
"9");
184 freeSteps.addOption(
"10");
185 freeSteps.addOption(
"11");
186 freeSteps.addOption(
"12");
187 freeSteps.texCycleButton=&TEX_GUI_DECREMENT;
188 freeSteps.setColours(cNormal,cHighlight,0);
191 guiWrapX.currentOption=0;
192 guiWrapX.addOption(
"Yes");
193 guiWrapX.addOption(
"No");
194 guiWrapX.texCycleButton=&TEX_GUI_DECREMENT;
195 guiWrapX.setColours(cNormal,cHighlight,0);
199 guiWrapY.currentOption=1;
200 guiWrapY.addOption(
"Yes");
201 guiWrapY.addOption(
"No");
202 guiWrapY.texCycleButton=&TEX_GUI_DECREMENT;
203 guiWrapY.setColours(cNormal,cHighlight,0);
207 guiIslandMode.currentOption=0;
208 guiIslandMode.addOption(
"Yes");
209 guiIslandMode.addOption(
"No");
210 guiIslandMode.texCycleButton=&TEX_GUI_DECREMENT;
211 guiIslandMode.setColours(cNormal, cHighlight,0);
212 guiIslandMode.wrap=
true;
216 nCiv.setColours(cNormal,cHighlight,0);
217 nCiv.texIncrement = &TEX_GUI_INCREMENT;
218 nCiv.texDecrement = &TEX_GUI_DECREMENT;
219 guiCaptionNCiv.text=
"# civs:";
220 guiCaptionNCiv.setColours(cNormal);
221 guiCaptionNCiv.centeredY=
true;
224 nLandPercent.setNumbers(0,100,66);
225 nLandPercent.setColours(cNormal,cHighlight,0);
226 nLandPercent.texIncrement = &TEX_GUI_INCREMENT;
227 nLandPercent.texDecrement = &TEX_GUI_DECREMENT;
228 textOceanPercent.text=
"Land percent:";
229 textOceanPercent.setColours(cNormal);
230 textOceanPercent.centeredY=
true;
234 nTribe.setColours(cNormal,cHighlight,0);
235 nTribe.texIncrement = &TEX_GUI_INCREMENT;
236 nTribe.texDecrement = &TEX_GUI_DECREMENT;
237 guiCaptionNTribe.text=
"# human tribes:";
238 guiCaptionNTribe.setColours(cNormal);
239 guiCaptionNTribe.centeredY=
true;
243 nTribeDwarven.setColours(cNormal,cHighlight,0);
244 nTribeDwarven.texIncrement = &TEX_GUI_INCREMENT;
245 nTribeDwarven.texDecrement = &TEX_GUI_DECREMENT;
246 guiCaptionNTribeDwarven.text=
"# Dwarven forts:";
247 guiCaptionNTribeDwarven.setColours(cNormal);
248 guiCaptionNTribeDwarven.centeredY=
true;
252 nTribeElven.setColours(cNormal,cHighlight,0);
253 nTribeElven.texIncrement = &TEX_GUI_INCREMENT;
254 nTribeElven.texDecrement = &TEX_GUI_DECREMENT;
255 guiCaptionNTribeElven.text=
"# Elven tribes:";
256 guiCaptionNTribeElven.setColours(cNormal);
257 guiCaptionNTribeElven.centeredY=
true;
260 buttonGenerate.text=
"1. Generate";
261 buttonGenerate.setColours(cNormal,cHighlight,0);
264 textEntryWorldName.setColours(cNormal,cHighlight);
265 textEntryWorldName.fieldName=
"World name:";
266 textEntryWorldName.characterLimit=20;
269 textEntryWorldName.input =
"testworld";
272 textEntryFullSeed.setColours(cNormal,cHighlight);
273 textEntryFullSeed.fieldName=
"World seed:";
274 textEntryFullSeed.characterLimit=16 ;
276 textEntryFullSeed.input=
"";
279 textEntryFullBiome.setColours(cNormal,cHighlight);
280 textEntryFullBiome.fieldName=
"Biome seed:";
281 textEntryFullBiome.characterLimit=16;
282 textEntryFullBiome.input=
"";
284 textWorldSize.text=
"World size:";
285 textWorldSize.setColours(cNormal);
286 textWorldSize.centeredY=
true;
288 textFreeSteps.text=
"Fragmentation:";
289 textFreeSteps.setColours(cNormal);
290 textFreeSteps.centeredY=
true;
292 textWrapX.text=
"Wrap X:";
293 textWrapX.setColours(cNormal);
294 textWrapX.centeredY=
true;
296 textWrapY.text=
"Wrap Y:";
297 textWrapY.setColours(cNormal);
298 textWrapY.centeredY=
true;
300 textIslandMode.text=
"Island mode:";
301 textIslandMode.setColours(cNormal);
302 textIslandMode.centeredY=
true;
304 textMenuTitle.text=
"World Generator";
305 textMenuTitle.setColours(cNormal);
307 textMenuTitle.centeredX=
true;
308 textMenuTitle.centeredY=
true;
310 buttonSimWorld.text=
"2. Simulate World";
311 buttonSimWorld.setColours(cNormal,cHighlight,0);
313 buttonExportData.text=
"Export World Data (N/A)";
314 buttonExportData.setColours(cNormal,cHighlight,0);
316 buttonLoadWorld.text=
"Load world (N/A)";
317 buttonLoadWorld.setColours(cNormal,cHighlight,0);
319 buttonExpandPreviewWindow.texture = &TEX_GUI_EXPAND;
321 guiManager.add(&textMenuTitle);
324 guiManager.add(&textEntryWorldName);
325 guiManager.add(&textEntryFullSeed);
326 guiManager.add(&textEntryFullBiome);
327 guiManager.add(&buttonGenerate);
328 guiManager.add(&textWorldSize);
329 guiManager.add(&textFreeSteps);
330 guiManager.add(&textIslandMode);
331 guiManager.add(&textWrapX);
332 guiManager.add(&textWrapY);
333 guiManager.add(&worldSize);
334 guiManager.add(&freeSteps);
335 guiManager.add(&guiIslandMode);
336 guiManager.add(&guiWrapX);
337 guiManager.add(&guiWrapY);
339 guiManager.add(&textOceanPercent);
341 guiManager.add(&nLandPercent);
342 guiManager.add(&guiCaptionNTribe);
343 guiManager.add(&guiCaptionNTribeDwarven);
344 guiManager.add(&guiCaptionNTribeElven);
345 guiManager.add(&nTribe);
346 guiManager.add(&nTribeDwarven);
347 guiManager.add(&nTribeElven);
348 guiManager.add(&buttonSimWorld);
359 guiManager.setFont(font);
366 textMenuTitle.setPanel(panelX1, panelY2, panelX2/2, panelY2-20);
369 buttonBack.setPanel(panelX1,panelY1+20,panelX1+120,panelY1);
371 const int leftColumnCenterX = panelX1+(panelNX/4);
372 textEntryWorldName.setPanel(panelX1+20, panelY2-30, (panelX2/2)-20, panelY2-40);
374 textEntryFullSeed.setPanel(panelX1+20, panelY2-40, (panelX2/2)-20, panelY2-50);
376 textEntryFullBiome.setPanel(panelX1+20, panelY2-50, (panelX2/2)-20, panelY2-60);
381 int currentY1 = panelY2 - 60;
382 int currentY2 = currentY1-ySize;
384 currentY1 -= (ySize+ySpacing);
385 currentY2 -= (ySize+ySpacing);
387 textWorldSize.setPanel(leftColumnCenterX-180, currentY1, leftColumnCenterX-20, currentY2);
388 worldSize.setPanel(leftColumnCenterX-20, currentY1, leftColumnCenterX+120, currentY2);
390 currentY1 -= (ySize+ySpacing);
391 currentY2 -= (ySize+ySpacing);
393 textFreeSteps.setPanel(leftColumnCenterX-180, currentY1, leftColumnCenterX-20, currentY2);
394 freeSteps.setPanel(leftColumnCenterX-20, currentY1, leftColumnCenterX+120, currentY2);
396 currentY1 -= (ySize+ySpacing);
397 currentY2 -= (ySize+ySpacing);
399 textIslandMode.setPanel(leftColumnCenterX-180, currentY1, leftColumnCenterX-20, currentY2);
400 guiIslandMode.setPanel(leftColumnCenterX-20, currentY1, leftColumnCenterX+120, currentY2);
402 currentY1 -= (ySize+ySpacing);
403 currentY2 -= (ySize+ySpacing);
405 textWrapX.setPanel(leftColumnCenterX-180, currentY1, leftColumnCenterX-20, currentY2);
406 guiWrapX.setPanel(leftColumnCenterX-20, currentY1, leftColumnCenterX+120, currentY2);
408 currentY1 -= (ySize+ySpacing);
409 currentY2 -= (ySize+ySpacing);
411 textWrapY.setPanel(leftColumnCenterX-180, currentY1, leftColumnCenterX-20, currentY2);
412 guiWrapY.setPanel(leftColumnCenterX-20, currentY1, leftColumnCenterX+120, currentY2);
414 currentY1 -= (ySize+ySpacing);
415 currentY2 -= (ySize+ySpacing);
417 textOceanPercent.setPanel(leftColumnCenterX-180, currentY1, leftColumnCenterX-20, currentY2);
418 nLandPercent.setPanel(leftColumnCenterX-20, currentY1, leftColumnCenterX+120, currentY2);
420 currentY1 -= (ySize+ySpacing);
421 currentY2 -= (ySize+ySpacing);
423 nCiv.setPanel(leftColumnCenterX-20, currentY1, leftColumnCenterX+120, currentY2);
424 guiCaptionNCiv.setPanel(leftColumnCenterX-120, currentY1, leftColumnCenterX-20, currentY2);
426 currentY1 -= (ySize+ySpacing);
427 currentY2 -= (ySize+ySpacing);
429 nTribeDwarven.setPanel(leftColumnCenterX-20, currentY1, leftColumnCenterX+120, currentY2);
430 guiCaptionNTribeDwarven.setPanel(leftColumnCenterX-180, currentY1, leftColumnCenterX-20, currentY2);
432 currentY1 -= (ySize+ySpacing);
433 currentY2 -= (ySize+ySpacing);
435 nTribeElven.setPanel(leftColumnCenterX-20, currentY1, leftColumnCenterX+120, currentY2);
436 guiCaptionNTribeElven.setPanel(leftColumnCenterX-180, currentY1, leftColumnCenterX-20, currentY2);
438 currentY1 -= (ySize+ySpacing);
439 currentY2 -= (ySize+ySpacing);
441 nTribe.setPanel(leftColumnCenterX-20, currentY1, leftColumnCenterX+120, currentY2);
442 guiCaptionNTribe.setPanel(leftColumnCenterX-180, currentY1, leftColumnCenterX-20, currentY2);
444 currentY1 -= (ySize+ySpacing);
445 currentY2 -= (ySize+ySpacing);
447 buttonGenerate.setPanel(leftColumnCenterX-170, currentY1, leftColumnCenterX+110, currentY2);
449 currentY1 -= (ySize+ySpacing);
450 currentY2 -= (ySize+ySpacing);
452 buttonSimWorld.setPanel(leftColumnCenterX-170, currentY1, leftColumnCenterX+110, currentY2);
454 currentY1 -= (ySize+ySpacing);
455 currentY2 -= (ySize+ySpacing);
457 buttonExportData.setPanel(leftColumnCenterX-170, currentY1, leftColumnCenterX+110, currentY2);
459 currentY1 -= (ySize+ySpacing);
460 currentY2 -= (ySize+ySpacing);
462 buttonLoadWorld.setPanel(leftColumnCenterX-170, currentY1, leftColumnCenterX+110, currentY2);
464 buttonExpandPreviewWindow.setPanel(0,0,32,32);
467 if(fullScreenPreview==
false)
470 int panelSizeX = panelX2-panelX1;
471 int panelSizeY = panelY2-panelY1;
473 int worldPreviewX1=panelX1+(panelSizeX/2);
474 int worldPreviewY1=panelY1+(panelSizeY/2);
513 if(fullScreenPreview==
false)
515 int panelSizeX = panelX2-panelX1;
516 int panelSizeY = panelY2-panelY1;
518 int worldPreviewX1=panelX1+(panelSizeX/2);
520 int worldPreviewY1=panelY1;
541 Renderer::placeTexture4(panelX1,panelY1,panelX2,panelY2,backgroundTexture,
true);
552 if ( guiManager.keyboardEvent(_keyboard) )
558 else if(_keyboard->isPressed(Keyboard::TAB))
560 std::cout<<
"Enter World Simulator to enable Adventure mode\n";
561 _keyboard->unpress(Keyboard::TAB);
564 else if(_keyboard->isPressed(Keyboard::ONE))
567 _keyboard->unpress(Keyboard::ONE);
571 else if(_keyboard->isPressed(Keyboard::TWO))
573 _keyboard->unpress(Keyboard::TWO);
581 std::cout<<
"You must first generate a world.\n";
597 if(guiManager.mouseEvent(_mouse)==
true)
600 if(buttonBack.clicked==
true)
602 buttonBack.unclick();
605 if(buttonGenerate.clicked==
true)
607 buttonGenerate.unclick();
609 buttonGenerate.unclick();
611 if(buttonExpandPreviewWindow.clicked==
true)
613 fullScreenPreview=!fullScreenPreview;
615 if(fullScreenPreview==
false)
619 int panelSizeX = panelX2-panelX1;
620 int panelSizeY = panelY2-panelY1;
622 int worldPreviewX1=panelX1+(panelSizeX/2);
623 int worldPreviewY1=panelY1+(panelSizeY/2);
625 buttonSimWorld.active=
true;
626 buttonExportData.active=
true;
627 buttonLoadWorld.active=
true;
628 buttonGenerate.active=
true;
629 textEntryWorldName.active=
true;
630 textEntryFullSeed.active=
true;
631 textEntryFullBiome.active=
true;
632 textWorldSize.active=
true;
633 textFreeSteps.active=
true;
634 textIslandMode.active=
true;
635 textWrapX.active=
true;
636 textWrapY.active=
true;
639 buttonBack.active=
false;
640 worldSize.active=
true;
641 freeSteps.active=
true;
642 guiWrapX.active=
true;
643 guiWrapY.active=
true;
644 guiIslandMode.active=
true;
655 buttonExpandPreviewWindow.unclick();
657 if(buttonSimWorld.clicked==
true)
659 buttonSimWorld.unclick();
667 std::cout<<
"You must first generate a world.\n";
671 if ( buttonExportData.clicked==
true)
673 std::cout<<
"Export data\n";
675 buttonExportData.unclick();
678 if ( buttonLoadWorld.clicked==
true)
680 buttonLoadWorld.unclick();
688 return guiManager.stealKeyboard();
695 if ( textEntryWorldName.input ==
"" )
697 std::cout<<
"Error: World needs a name.\n";
699 else if (DataTools::isAlphaNumeric(textEntryWorldName.input,
true) ==
false)
701 std::cout<<
"Error: World name must be alphanumeric.\n";
702 textEntryWorldName.input=
"";
706 int worldSizeV = DataTools::toInt(worldSize.getCurrentOption());
708 if (worldSizeV<0 || worldSizeV>100000)
710 std::cout<<
"Warning. Strange worldsize. Attempting to continue.\n";
716 if (textEntryFullSeed.input !=
"")
718 if ( DataTools::isNumeric(textEntryFullSeed.input))
720 seed = DataTools::toInt(textEntryFullSeed.input);
724 std::hash<std::string> hasher;
725 seed=hasher(textEntryFullSeed.input);
734 int fragmentation = DataTools::toInt(freeSteps.getCurrentOption());
736 bool islandMode =
true;
737 if ( guiIslandMode.currentOption==1 )
743 if ( guiWrapX.currentOption==1 )
748 if ( guiWrapY.currentOption==1 )
753 double landPercent = (double) nLandPercent.currentValue / 100;
755 world.
generateWorld(textEntryWorldName.input,worldSizeV,worldSizeV,seed,fragmentation,islandMode,wrapX,wrapY,landPercent);
757 world.
generateTribes(nTribe.currentValue,nTribeDwarven.currentValue,nTribeElven.currentValue);
765 if ( textEntryWorldName.input ==
"" )
767 std::cout<<
"Error: World needs a name.\n";
769 else if (DataTools::isAlphaNumeric(textEntryWorldName.input) ==
false)
771 std::cout<<
"Error: World name must be alphanumeric.\n";
772 textEntryWorldName.input=
"";
WorldViewer worldViewer
Definition: Driver.cpp:35
const int DEFAULT_WORLD_SIZE_SLOT
Definition: Driver_Settings.cpp:131
World * world
Definition: World_Viewer.hpp:90
void generateTribes(int, int, int)
Definition: World.cpp:853
void generateWorld(const std::string, const int, const int, int, int, const bool, const bool, const bool, const double)
Definition: World.cpp:1469
World world
Definition: Driver.cpp:45
void render()
Definition: World_Viewer.hpp:523
virtual void save()
Definition: World.cpp:2604
WorldViewer_Minimap minimap
Definition: World_Viewer_Minimap.hpp:145
GUI_Manager globalGuiManager
Definition: Driver_GlobalObjects.hpp:102
void startSimulation()
Definition: World.cpp:218
bool QUICKSTART_GENERATOR
Definition: Driver_Settings.cpp:117
const int DEFAULT_NUMBER_TRIBES_HUMAN
Definition: Driver_Settings.cpp:134
Definition: Driver_Settings_Enums.hpp:24
const int DEFAULT_NUMBER_TRIBES_ELVEN
Definition: Driver_Settings.cpp:135
enumMenu activeMenu
Definition: Driver_Settings_Enums.hpp:29
void setPanel(const int _x1, const int _y1, const int _x2, const int _y2)
Definition: World_Viewer.hpp:318
void nameRegions()
Definition: World.cpp:450
const int DEFAULT_NUMBER_CIVS
Definition: Driver_Settings.cpp:136
bool mouseEvent(Mouse *mouse)
Definition: World_Viewer.hpp:261
bool generated
Definition: World.hpp:71
World * world
Definition: World_Viewer_Minimap.hpp:26
bool active
Definition: World_Viewer.hpp:66
const int DEFAULT_NUMBER_TRIBES_DWARVEN
Definition: Driver_Settings.cpp:133
bool keyboardEvent(Keyboard *_keyboard)
Definition: World_Viewer.hpp:181
bool loadWorld(std::string)
Definition: World.cpp:2474