WorldSim  inDev
2D tile-based sandbox RPG with procedurally generated fantasy world simulator 🌏
Menu_WorldSimulator.hpp
Go to the documentation of this file.
1 #pragma once
2 #ifndef WORLDSIM_MENU_WORLDSIMULATOR_HPP
3 #define WORLDSIM_MENU_WORLDSIMULATOR_HPP
4 
5 /* WorldSim: Menu_WorldSimulator.hpp
6 #include "Menu_WorldSimulator.hpp" */
7 
13 #include "World_Viewer.hpp"
14 #include "World_Viewer_Minimap.hpp"
15 
16 #include "Menu_Tribes.hpp"
17 #include "Menu_Civs.hpp"
18 #include "Menu_Settlements.hpp"
19 #include "Menu_World.hpp"
20 #include "Menu_Character.hpp"
21 #include "Menu_Biome.hpp"
22 #include "Menu_Flora.hpp"
23 #include "Menu_Creatures.hpp"
24 
25 
26 class Menu_WorldSimulator: public GUI_Interface
27 {
28 private:
29  GUI_Manager guiManager;
30  Wildcat::Font* font;
31  /* Texture to draw in the background of this menu. */
32  Texture* backgroundTexture;
33 
34  /* Colours / theme. */
35  ColourRGB <unsigned char> cNormal;
36  ColourRGB <unsigned char> cSelected;
37  ColourRGB <unsigned char> cDropPanel;
38  ColourRGB <unsigned char> cHighlight;
39 
40  /* Button: Resume or commence simulation of the world map. */
41  GUI_Button buttonStartSimulation;
42  /* Button: Pause the simulation so the player can look around the world as it currently exists. */
43  GUI_Button buttonPauseSimulation;
44  /* Number entry: Simulation speed. */
45  GUI_CycleButton cycleSimulationSpeed;
46  /* Textbox: Caption for simulation speed. */
47  GUI_TextBox textSimulationSpeed;
48  /* Button: Step the simulation forward by a certain amount of time. (Day/Month/Year). */
49  GUI_Button buttonIncrementDay;
50  GUI_Button buttonIncrementMonth;
51  GUI_Button buttonIncrementYear;
52  GUI_Button buttonIncrementContinuous;
53 
54  //GUI_Button buttonIncrementContinuous;
55 
56  /* Menu for investigating an individual tribe */
57  GUI_Button buttonTribeMenu;
58  /* Menu for seeing info about the world. */
59  GUI_Button buttonWorldMenu;
60  /* Menu for a list of all biomes. */
61  GUI_Button buttonBiomeMenu;
62  /* List of all characters in the game. */
63  GUI_Button buttonCharacterMenu;
64  /* Toggle tribal territory visibility */
65  GUI_Button buttonTerritoryView;
66  /* List of all Civs in the game */
67  GUI_Button buttonCivMenu;
68  /* Switch to subterranean view on local map */
69  GUI_Button buttonSubterraneanView;
70  /* Button: Switch between 1/4 or fullscreen view of world map. */
71  GUI_Button buttonExpandMap;
72 
73  /* Button to view list of all Flora in World */
74  GUI_Button buttonFlora;
75  /* Button to view list of all Creatures in the World */
76  GUI_Button buttonCreaturesMenu;
77  /* Button to view list of all Settlements in the World */
78  GUI_Button buttonSettlementsMenu;
79 
80  // Base world view modes
81  // Toggle Textures
82  GUI_Button buttonMinimapBaseTexture;
83  // Toggle landmass/biome view
84  GUI_Button buttonMinimapBaseLand;
85 
86  bool simulateWorld;
87 
88  bool fullScreenWorldView;
89 
90  /* Submenus */
91  Menu_Tribes menuTribes;
92  Menu_Civs menuCivs;
93  Menu_World menuWorld;
94  Menu_Characters menuCharacter;
95  Menu_Biome menuBiome;
96  Menu_Flora menuFlora;
97  Menu_Creatures menuCreatures;
98  Menu_Settlements menuSettlements;
99 
100 public:
101 
102 
104  {
105  backgroundTexture=&TEX_NEW_GAME_BACKGROUND;
106 
108  worldViewer.active = true;
109 
110  minimap.world = &world;
111  minimap.active=true;
112 
113  simulateWorld=false;
114 
115  buttonExpandMap.text="Expand";
116  buttonExpandMap.setColours(cNormal,cHighlight,0);
117  //buttonExpandMap.setPanel(0,0,32,32);
118  buttonExpandMap.texture = &TEX_GUI_EXPAND;
119 
120  fullScreenWorldView=true;
121 
122  menuTribes.active=false;
123  menuWorld.active=false;
124  menuCharacter.active=false;
125  menuBiome.active=false;
126  menuFlora.active=false;
127  menuCreatures.active=false;
128  menuSettlements.active=false;
129  minimap.active=true;
130 
131  // Link MenuSettlementDetails and MenuCharacterDetails until I can implement a MenuManager
132  menuSettlements.menuSettlementDetails.menuCharacterDetails = &menuCharacter.menuCharacterDetails;
133  }
134 
135  void setFont(Wildcat::Font* _font)
136  {
137  font = _font;
138  guiManager.setFont(_font);
139  }
140 
141  void init()
142  {
143  /* Initialise theme. */
144  cNormal.set(200,200,200);
145  cSelected.set(180,180,180);
146  cDropPanel.set(170,170,170);
147  cHighlight.set(170,170,170);
148 
149  cycleSimulationSpeed.wrap=false;
150  cycleSimulationSpeed.currentOption=0;
151  cycleSimulationSpeed.addOption("PAUSED");
152  cycleSimulationSpeed.addOption("1x");
153  cycleSimulationSpeed.addOption("60x");
154  cycleSimulationSpeed.addOption("100x");
155  cycleSimulationSpeed.addOption("1,000x");
156  cycleSimulationSpeed.addOption("10,000x");
157  cycleSimulationSpeed.addOption("100,000x");
158  cycleSimulationSpeed.addOption("1,000,000x");
159  cycleSimulationSpeed.addOption("10,000,000x");
160  cycleSimulationSpeed.addOption("100,000,000x");
161  cycleSimulationSpeed.texCycleButton=&TEX_GUI_DECREMENT;
162  cycleSimulationSpeed.setColours(cNormal,cHighlight,0);
163 
164  textSimulationSpeed.text="Speed:";
165  textSimulationSpeed.setColours(cNormal);
166 
167  buttonIncrementDay.text = "+D";
168  buttonIncrementDay.setColours(cNormal,cHighlight,0);
169  buttonIncrementMonth.text = "+M";
170  buttonIncrementMonth.setColours(cNormal,cHighlight,0);
171  buttonIncrementYear.text = "+Y";
172  buttonIncrementYear.setColours(cNormal,cHighlight,0);
173  buttonIncrementContinuous.text = "+++";
174  buttonIncrementContinuous.setColours(cNormal,cHighlight,0);
175  buttonTribeMenu.text="Tri";
176  buttonTribeMenu.setColours(cNormal,cHighlight,0);
177  buttonWorldMenu.text="Leg";
178  buttonWorldMenu.setColours(cNormal,cHighlight,0);
179  buttonBiomeMenu.text="Bio";
180  buttonBiomeMenu.setColours(cNormal,cHighlight,0);
181  buttonCharacterMenu.text="Cha";
182  buttonCharacterMenu.setColours(cNormal,cHighlight,0);
183  buttonCivMenu.text="Civ";
184  buttonCivMenu.setColours(cNormal,cHighlight,0);
185  buttonSubterraneanView.text = "Sub";
186  buttonSubterraneanView.setColours(cNormal,cHighlight,0);
187  buttonTerritoryView.text="Ter";
188  buttonTerritoryView.setColours(cNormal,cHighlight,0);
189  buttonFlora.text="F";
190  buttonFlora.setColours(cNormal,cHighlight,0);
191  buttonCreaturesMenu.text="Crt";
192  buttonCreaturesMenu.setColours(cNormal,cHighlight,0);
193  buttonSettlementsMenu.text="Cit";
194  buttonSettlementsMenu.setColours(cNormal,cHighlight,0);
195 
196 
197  buttonMinimapBaseTexture.init("", &TEX_GUI_MINIMAP_BASE_TEXTUREMODE, cNormal, cHighlight, 0, true);
198  buttonMinimapBaseLand.init("", &TEX_GUI_MINIMAP_BASE_LANDMODE, cNormal, cHighlight, 0, true);
199 
200  guiManager.add(&minimap);
201 
202  guiManager.add(&textSimulationSpeed);
203  guiManager.add(&cycleSimulationSpeed);
204  guiManager.add(&buttonIncrementDay);
205  guiManager.add(&buttonIncrementMonth);
206  guiManager.add(&buttonIncrementYear);
207  guiManager.add(&buttonIncrementContinuous);
208 
209  guiManager.add(&buttonTribeMenu);
210  guiManager.add(&buttonWorldMenu);
211  guiManager.add(&buttonBiomeMenu);
212  guiManager.add(&buttonCharacterMenu);
213  guiManager.add(&buttonCivMenu);
214  guiManager.add(&buttonFlora);
215  guiManager.add(&buttonCreaturesMenu);
216  guiManager.add(&buttonSettlementsMenu);
217  guiManager.add(&buttonTerritoryView);
218  guiManager.add(&buttonSubterraneanView);
219 
220  /* GUI Minimap Buttons */
221  guiManager.add(&buttonMinimapBaseTexture);
222  guiManager.add(&buttonMinimapBaseLand);
223 
224  /* Submenus */
225  guiManager.add(&menuTribes);
226  guiManager.add(&menuCivs);
227  guiManager.add(&menuWorld);
228  guiManager.add(&menuCharacter);
229  guiManager.add(&menuBiome);
230  guiManager.add(&menuFlora);
231  guiManager.add(&menuCreatures);
232  guiManager.add(&menuSettlements);
233 
234  textSimulationSpeed.active=true;
235  cycleSimulationSpeed.active=true;
236 
237  buttonIncrementDay.active=true;
238  buttonIncrementMonth.active=true;
239  buttonIncrementYear.active=true;
240  buttonIncrementContinuous.active=true;
241 
242  buttonTribeMenu.active=true;
243  buttonWorldMenu.active=true;
244  buttonBiomeMenu.active=true;
245  buttonCharacterMenu.active=true;
246  buttonCivMenu.active=true;
247  buttonFlora.active=true;
248  buttonCreaturesMenu.active=true;
249  buttonSettlementsMenu.active=true;
250  buttonTerritoryView.active=true;
251  buttonSubterraneanView.active=true;
252 
253  buttonExpandMap.active = false;
254  buttonStartSimulation.active = false;
255  buttonPauseSimulation.active = false;
256 
257  menuTribes.init();
258  menuCivs.init();
259  menuWorld.init();
260  menuCharacter.init();
261  menuBiome.init();
262  menuFlora.init();
263  menuCreatures.init();
264  menuSettlements.init();
265  //minimap.init();
266 
268  eventResize();
269  }
270 
271  void render()
272  {
273  // if ( active == false )
274  // {
275  // if ( menuAdventureMode.active )
276  // {
277  // menuAdventureMode.render();
278  // return;
279  // }
280 
281  // return;
282  // }
283  /* Draw background texture. */
284  if ( fullScreenWorldView==true)
285  {
286  Renderer::placeTexture4(panelX1,panelY1,panelX2,panelY2,backgroundTexture,true);
287  }
288  else
289  {
290  Renderer::placeTexture4(panelX1,panelY1,panelX2,panelY2,backgroundTexture,true);
291  }
292 
293  /* Preview world view. */
295 
296  // MESSAGE CONSOLE
297  const int nY = panelY2-panelY1;
298  Renderer::placeColour4a(200,200,250,125,panelX1,panelY1+120,panelX1+220,panelY2);
299  int currentY = panelY2-2;
300  int iMessage = vConsoleMessage.size()-1;
301 
302  int linesDrawn = 0;
303 
304  while (currentY>panelY1+120 && iMessage>=0 && iMessage<vConsoleMessage.size() )
305  {
306  linesDrawn = font8x8.drawText(vConsoleMessage(iMessage),panelX1,currentY,panelX1+220,currentY-38,false,false);
307  --iMessage;
308  currentY-=linesDrawn*9;
309  currentY-=2;
310  }
311 
312 
313 
314  // Minimap
315  // I think we can assume it'll be a square, although in future a rectangle may be more realistic.
316  Renderer::placeColour4a(250,200,250,250,panelX1,panelY1,panelX1+220,panelY1+220);
317 
318 
319  // Tile info panel
320  Renderer::placeColour4a(200,250,250,250,panelX1,panelY1+236,panelX1+220,panelY1+356);
321 
322  //if (world.queryWorldX != -1 && world.queryWorldY != -1)
324  {
326 
327  if ( tile != 0 )
328  {
329  // Tile stats
330  font8x8.drawText
331  (Stream() << tile->getTerrainName() << " ("<<world.queryWorldX<<", "<<world.queryWorldY<<")",
332  panelX1,panelY1+310,panelX1+220,panelY1+320,false,true);
333  font8x8.drawText
335  panelX1,panelY1+300,panelX1+220,panelY1+310,false,true);
336  font8x8.drawText
338  panelX1,panelY1+290,panelX1+220,panelY1+300,false,true);
339  font8x8.drawText(Stream() << tile->baseMetal << " metal",
340  panelX1,panelY1+280,panelX1+220,panelY1+290,false,true);
341  // Elevation
342  font8x8.drawText
343  (Stream() << "Elevation: "<< tile->centerHeight << "m",
344  panelX1,panelY1+270,panelX1+220,panelY1+280,false,true);
345  // Tile image
346  Renderer::setTextureMode();
347  Renderer::placeTexture4(panelX1, panelY1+236, panelX1+32, panelY1+268, tile->currentTexture(), false);
348  }
349  }
350 
351  // Map info panel
352  Renderer::placeColour4a(250,200,250,250,panelX1,panelY1+356,panelX1+220,panelY1+476);
354  {
356 
357  if ( tile != 0 )
358  {
359  if (tile->data && tile->data->aLocalTile.isSafe(world.queryWorldXLocal,world.queryWorldYLocal))
360  {
361 
362  if ( tile->data->aLocalTile(world.queryWorldXLocal,world.queryWorldYLocal).objStatic )
363  {
364  const std::string sName =
365  tile->data->aLocalTile(world.queryWorldXLocal,world.queryWorldYLocal).objStatic->getName();
366  font8x8.drawText
367  (Stream() << sName,
368  panelX1,panelY1+418,panelX1+220,panelY1+428,false,true);
369  }
370 
371  font8x8.drawText
372  (Stream() << tile->data->aLocalTile
374  << " ("<<world.queryWorldXLocal<<", "<<world.queryWorldYLocal<<")",
375  panelX1,panelY1+408,panelX1+220,panelY1+418,false,true);
376 
377 
378 
379  font8x8.drawText
380  (Stream() << tile->getTerrainName() << " ("<<world.queryWorldXLocal<<", "<<world.queryWorldYLocal<<")",
381  panelX1,panelY1+398,panelX1+220,panelY1+408,false,true);
382  font8x8.drawText
383  (Stream() << "Elevation: "<< tile->data->aLocalTile
385  panelX1,panelY1+388,panelX1+220,panelY1+398,false,true);
386  }
387  // Tile image
388  Renderer::setTextureMode();
389  Renderer::placeTexture4(panelX1, panelY1+356, panelX1+32, panelY1+388, tile->currentTexture(), false);
390  }
391  }
392 
393  buttonExpandMap.render();
394 
395  // DATE
396  Renderer::placeColour4a(150,150,150,255,panelX2-208,panelY2-20,panelX2,panelY2-10);
397  std::string strDate = globalCalendar.toString();
398  font8x8.drawText("DATE: "+strDate,panelX2-208,panelY2-20,panelX2,panelY2-10, false, true);
399 
400  worldPop=0;
401  for (int i=0;i<world.vTribe.size();++i)
402  {
403  worldPop+=world.vTribe(i)->vCharacter.size();
404  }
405 
406  for (int i=0;i<world.vCiv.size();++i)
407  {
408  //Todo: Remove dead civ members from vector.
409  worldPop+=world.vCiv(i)->vCharacter.size();
410  }
411 
412  //Population
413  Renderer::placeColour4a(150,150,150,255,panelX2-380,panelY2-20,panelX2-208,panelY2-10);
414  font8x8.drawText("Pop: "+DataTools::toString(worldPop),panelX2-380,panelY2-20,panelX2-208,panelY2-10, false, true);
415 
416  guiManager.render();
417  }
418 
419  void logicTick()
420  {
421  //textDate.text = world.date.toString("-");
422 
423  if(active)
424  {
425  if ( cycleSimulationSpeed.getCurrentOption() == "PAUSED" )
426  {
427  //PAUSE_LOGIC=true;
428  //std::cout<<"Simulation paused.\n";
429  TIME_SCALE=0;
430  }
431  if ( cycleSimulationSpeed.getCurrentOption() == "1x" )
432  {
433  //PAUSE_LOGIC=false;
434  TIME_SCALE = 1;
435  }
436  else if ( cycleSimulationSpeed.getCurrentOption() == "60x" )
437  {
438  //PAUSE_LOGIC=false;
439  TIME_SCALE = 60;
440  }
441  else if ( cycleSimulationSpeed.getCurrentOption() == "100x" )
442  {
443  //PAUSE_LOGIC=false;
444  TIME_SCALE = 100;
445  }
446  else if ( cycleSimulationSpeed.getCurrentOption() == "1,000x" )
447  {
448  //PAUSE_LOGIC=false;
449  TIME_SCALE = 1000;
450  }
451  else if ( cycleSimulationSpeed.getCurrentOption() == "10,000x" )
452  {
453  //PAUSE_LOGIC=false;
454  TIME_SCALE = 10000;
455  }
456  else if ( cycleSimulationSpeed.getCurrentOption() == "100,000x" )
457  {
458  //PAUSE_LOGIC=false;
459  TIME_SCALE = 100000;
460  }
461  else if ( cycleSimulationSpeed.getCurrentOption() == "1,000,000x" )
462  {
463  //PAUSE_LOGIC=false;
464  TIME_SCALE = 1000000;
465  }
466  else if ( cycleSimulationSpeed.getCurrentOption() == "10,000,000x" )
467  {
468  //PAUSE_LOGIC=false;
469  TIME_SCALE = 10000000;
470  }
471  else if ( cycleSimulationSpeed.getCurrentOption() == "100,000,000x" )
472  {
473  //PAUSE_LOGIC=false;
474  TIME_SCALE = 100000000;
475  }
476 
477  }
478  }
479 
480  bool keyboardEvent (Keyboard* _keyboard)
481  {
482  // ESCAPE - Close all submenus and go back to main game.
483  // If all submenus are already closed, bring up main menu.
484  // If time is progressing, pause it.
485  if(_keyboard->isPressed(Keyboard::ESCAPE))
486  {
487  menuTribes.active = false;
488  menuCivs.active = false;
489  menuFlora.active = false;
490  menuFlora.menuFloraDetails.active = false;
491  menuCreatures.active = false;
492  menuCreatures.menuCreatureDetails.active = false;
493  menuSettlements.active = false;
494  menuWorld.active = false;
495  menuCharacter.active = false;
496  menuBiome.active = false;
497  menuBiome.menuBiomeDetails.active = false;
498  minimap.active = true;
499 
500 
501  //Clear the backlog so time stops progressing.
503  buttonIncrementContinuous.text = "+++";
505 
506  _keyboard->keyUp(Keyboard::ESCAPE);
507  }
508  // Increment world by 1 tick by pressing period
509  if(_keyboard->isPressed(Keyboard::PERIOD))
510  {
512 
513  _keyboard->keyUp(Keyboard::PERIOD);
514  }
515 
516 
517  // TAB will switch between adventure mode and god mode.
518  if(_keyboard->isPressed(Keyboard::TAB))
519  {
520  if (playerCharacter == 0 )
521  {
522  std::cout<<"No character selected, selecting random character.\n";
523  //Automatically select a random character so we can go straight into adventure mode.
525  }
526 
527  if ( playerCharacter != 0 )
528  {
529  std::cout<<"Entering adventure mode.\n";
530 
532  {
534 
535  menuTribes.active = false;
536  menuCivs.active = false;
537  menuFlora.active = false;
538  menuCreatures.active = false;
539  menuSettlements.active = false;
540  menuWorld.active = false;
541  menuCharacter.active = false;
542  menuBiome.active = false;
543  minimap.active = false;
544  //active = false;
545 
547  }
548  else
549  {
550  std::cout<<"Error: world.prepareAdventureMode(~) failed.\n";
551  }
552 
553  _keyboard->keyUp(Keyboard::TAB);
554  }
555  else
556  {
557  std::cout<<"Error: No player pointer.\n";
558  }
559  }
560 
561  guiManager.keyboardEvent(_keyboard);
562 
563  worldViewer.keyboardEvent(_keyboard);
564  return false;
565  }
566 
567  bool mouseEvent (Mouse* _mouse)
568  {
569  worldViewer.mouseEvent(_mouse);
570  buttonExpandMap.mouseEvent(_mouse);
571 
572  if(buttonExpandMap.clicked==true)
573  {
574  fullScreenWorldView=!fullScreenWorldView;
575 
576  if (fullScreenWorldView==true)
577  {
578  worldViewer.setPanel(panelX1,panelY1,panelX2,panelY2);
579  buttonExpandMap.setPanel(panelX1,panelY1,panelX1+16,panelY1+16);
580  }
581  else
582  {
583  worldViewer.setPanel(panelX1+(panelX2/2),panelY1+(panelY2/2),panelX2,panelY2);
584  buttonExpandMap.setPanel
585  (panelX1+(panelX2/2),panelY1+(panelY2/2),panelX1+(panelX2/2)+16,panelY1+(panelY2/2)+16);
586  }
587 
588  buttonExpandMap.unclick();
589  eventResize();
590  }
591 
592  if (buttonIncrementDay.clicked==true)
593  {
594  buttonIncrementDay.unclick();
596  }
597  if (buttonIncrementMonth.clicked==true)
598  {
599  buttonIncrementMonth.unclick();
601  }
602  if (buttonIncrementYear.clicked==true)
603  {
604  buttonIncrementYear.unclick();
606  }
607  if (buttonIncrementContinuous.clicked==true)
608  {
609  buttonIncrementContinuous.unclick();
610  //world.ticksBacklog+=311040000;
612 
614  {
615  buttonIncrementContinuous.text = "---";
616  }
617  else
618  {
619  buttonIncrementContinuous.text = "+++";
620  }
621 
622  std::cout<<"Incrementing continuously: "<<world.incrementContinuous<<".\n";
623  }
624 
625  if (buttonTribeMenu.clicked==true)
626  {
627  menuTribes.init();
628  menuTribes.active=true;
629  buttonTribeMenu.unclick();
630  }
631 
632  if (buttonWorldMenu.clicked==true)
633  {
634  std::cout<<"Worldmenu\n";
635  menuWorld.init();
636  menuWorld.active=true;
637  buttonWorldMenu.unclick();
638  }
639 
640  if (buttonCharacterMenu.clicked==true)
641  {
642  std::cout<<"Character menu\n";
643  menuCharacter.init();
644  menuCharacter.active=true;
645  buttonCharacterMenu.unclick();
646  }
647 
648  if (buttonCivMenu.clicked==true)
649  {
650  std::cout<<"Civ menu\n";
651  menuCivs.init();
652  menuCivs.active=true;
653  buttonCivMenu.unclick();
654  }
655 
656  if (buttonFlora.clicked==true)
657  {
658  std::cout<<"Flora menu\n";
659  menuFlora.init();
660  menuFlora.active=true;
661  buttonFlora.unclick();
662  }
663 
664  if (buttonCreaturesMenu.clicked==true)
665  {
666  std::cout<<"Creatures menu\n";
667  menuCreatures.init();
668  menuCreatures.active=true;
669  buttonCreaturesMenu.unclick();
670  }
671 
672  if (buttonSettlementsMenu.clicked==true)
673  {
674  std::cout<<"Settlments menu\n";
675  menuSettlements.init();
676  menuSettlements.active=true;
677  buttonSettlementsMenu.unclick();
678  }
679 
680 
681 
682 
683 
684  if (buttonBiomeMenu.clicked==true)
685  {
686  std::cout<<"Biome menu\n";
687  menuBiome.init();
688  menuBiome.active=true;
689  buttonBiomeMenu.unclick();
690  }
691 
692  if (buttonMinimapBaseTexture.clicked==true)
693  {
694  std::cout<<"Toggle texture/colour mode\n";
696  buttonMinimapBaseTexture.unclick();
697  }
698  if (buttonMinimapBaseLand.clicked==true)
699  {
700  std::cout<<"Toggle texture/colour mode\n";
702  buttonMinimapBaseLand.unclick();
703  }
704  if (buttonTerritoryView.clicked==true)
705  {
706  std::cout<<"Toggle territory visibility.\n";
708  buttonTerritoryView.unclick();
709  }
710  if (buttonSubterraneanView.clicked==true)
711  {
712  std::cout<<"Toggle subterranean mode\n";
714  buttonSubterraneanView.unclick();
715  }
716 
717  //buttonMinimapBaseTexture.setPanel(panelX1,panelY1,panelX1+32,panelY1+16);
718  //buttonMinimapBaseColour.setPanel(panelX1+32,panelY1,panelX1+64,panelY1+16);
719  //buttonMinimapBaseLand.setPanel(panelX1+64,panelY1,panelX1+96,panelY1+16);
720 
721  /* If the guiManager did something with the mouse event. */
722  if(guiManager.mouseEvent(_mouse)==true)
723  {
724 
725  }
726 
727  if (menuTribes.lastRowClicked != -1 )
728  {
729  if ( world.vTribe.isSafe(menuTribes.lastRowClicked) )
730  {
731  Tribe* t = world.vTribe(menuTribes.lastRowClicked);
733  }
734 
735  menuTribes.lastRowClicked=-1;
736  }
737 
738  // maybe some kind of EVENT class would work better for this kind of thing?
739  if (menuWorld.lastRowClicked != -1 )
740  {
741  if ( world.vLandmass.isSafe(menuWorld.lastRowClicked) )
742  {
743  World_Landmass* l = menuWorld.selectedLandmass;
744  if ( l != 0 )
745  {
747  }
748  }
749  menuWorld.lastRowClicked=-1;
750  }
751 
752 
753  return false;
754  }
755 
756  void eventResize()
757  {
758  /* World preview takes top-right quarter of screen. */
759 
760  int panelSizeX = panelX2-panelX1;
761  int panelSizeY = panelY2-panelY1;
762 
763  int worldPreviewX1=panelX1+(panelSizeX/2);
764  int worldPreviewY1=panelY1+(panelSizeY/2);
765 
766  /* Left column, centered. */
767  const int leftColumnCenterX = panelX1+(panelNX/4);
768 
769  Renderer::placeColour4(0,0,0,worldPreviewX1,worldPreviewY1,panelX2,panelY2);
770  worldViewer.setPanel(worldPreviewX1,worldPreviewY1,panelX2,panelY2);
771 
772  textSimulationSpeed.setPanel(panelX2-200, panelY2-30, panelX2-100, panelY2-20);
773  cycleSimulationSpeed.setPanel(panelX2-150, panelY2-30, panelX2, panelY2-20);
774 
775  buttonIncrementDay.setPanel(panelX2-120, panelY2-40, panelX2-160, panelY2-30);
776  buttonIncrementMonth.setPanel(panelX2-80, panelY2-40, panelX2-120, panelY2-30);
777  buttonIncrementYear.setPanel(panelX2-40, panelY2-40, panelX2-80, panelY2-30);
778  buttonIncrementContinuous.setPanel(panelX2, panelY2-40, panelX2-40, panelY2-30);
779 
780  buttonTribeMenu.setPanel(panelX2-180, panelY2-40, panelX2-220, panelY2-30);
781  buttonWorldMenu.setPanel(panelX2-220, panelY2-40, panelX2-260, panelY2-30);
782  buttonCharacterMenu.setPanel(panelX2-260, panelY2-40, panelX2-300, panelY2-30);
783  buttonBiomeMenu.setPanel(panelX2-300, panelY2-40, panelX2-340, panelY2-30);
784  buttonTerritoryView.setPanel(panelX2-340, panelY2-40, panelX2-380, panelY2-30);
785  buttonCivMenu.setPanel(panelX2-380, panelY2-40, panelX2-420, panelY2-30);
786  buttonSubterraneanView.setPanel(panelX2-420, panelY2-40, panelX2-460, panelY2-30);
787 
788  buttonFlora.setPanel(panelX2-460, panelY2-40, panelX2-500, panelY2-30);
789  buttonCreaturesMenu.setPanel(panelX2-500, panelY2-40, panelX2-540, panelY2-30);
790  buttonSettlementsMenu.setPanel(panelX2-540, panelY2-40, panelX2-580, panelY2-30);
791 
792  buttonMinimapBaseTexture.setPanel(panelX1,panelY1,panelX1+32,panelY1+16);
793  buttonMinimapBaseLand.setPanel(panelX1+32,panelY1,panelX1+64,panelY1+16);
794 
795  menuTribes.setPanel(panelX1,panelY1+5,panelX2,panelY2-40);
796  menuCivs.setPanel(panelX1,panelY1+5,panelX2,panelY2-40);
797  menuWorld.setPanel(panelX1,panelY1+5,panelX2,panelY2-40);
798  menuCharacter.setPanel(panelX1,panelY1+5,panelX2,panelY2-40);
799  menuBiome.setPanel(panelX1,panelY1+5,panelX2,panelY2-40);
800  menuFlora.setPanel(panelX1,panelY1+5,panelX2,panelY2-40);
801  menuCreatures.setPanel(panelX1,panelY1+5,panelX2,panelY2-40);
802  menuSettlements.setPanel(panelX1,panelY1+5,panelX2,panelY2-40);
803  minimap.setPanel(panelX1,panelY1+16,panelX1+220,panelY1+236);
804 
805  if (fullScreenWorldView==true)
806  {
807  worldViewer.setPanel(panelX1,panelY1,panelX2,panelY2);
808  buttonExpandMap.setPanel(panelX1,panelY1,panelX1+16,panelY1+16);
809  }
810  else
811  {
812  worldViewer.setPanel(panelX1+(panelX2/2),panelY1+(panelY2/2),panelX2,panelY2);
813  buttonExpandMap.setPanel
814  (panelX1+(panelX2/2),panelY1+(panelY2/2),panelX1+(panelX2/2)+16,panelY1+(panelY2/2)+16);
815  }
816  }
817 
818 };
819 
820 #endif
Menu_SettlementDetails menuSettlementDetails
Definition: Menu_Settlements.hpp:42
WorldViewer worldViewer
Definition: Driver.cpp:35
void init()
Definition: Menu_Creatures.hpp:60
unsigned short int centerHeight
Definition: World_Local.hpp:214
Menu_CharacterDetails * menuCharacterDetails
Definition: Menu_SettlementDetails.cpp:24
Definition: Menu_World.hpp:23
Definition: Driver_GlobalObjects.hpp:121
Definition: Menu_Biome.hpp:19
Vector< World_Landmass * > vLandmass
Definition: World.hpp:122
Vector< Civ * > vCiv
Definition: World.hpp:136
World * world
Definition: World_Viewer.hpp:90
const int TICKS_PER_DAY
Definition: Driver_Settings.cpp:185
long long unsigned int ticksBacklog
Definition: World.hpp:86
short int baseMetal
Definition: World_Local.hpp:185
void logicTick()
Definition: Menu_WorldSimulator.hpp:419
World world
Definition: Driver.cpp:45
void init()
Definition: Menu_Settlements.hpp:57
Definition: Menu_Character.hpp:20
void setCenterTile(const double _centerTileX, const double _centerTileY, const int _subTileX=LOCAL_MAP_SIZE/2, const int _subTileY=LOCAL_MAP_SIZE/2)
Definition: World_Viewer.hpp:334
bool tilesetMode
Definition: World_Viewer.hpp:107
void render()
Definition: World_Viewer.hpp:523
bool prepareAdventureMode(Character *)
Definition: World.cpp:2453
int worldPop
Definition: Driver_Settings.cpp:122
Definition: Menu_Creatures.hpp:18
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_WorldSimulator.hpp:480
WorldViewer_Minimap minimap
Definition: World_Viewer_Minimap.hpp:145
Definition: Menu_Settlements.hpp:17
Menu_SpeciesDetails menuCreatureDetails
Definition: Menu_Creatures.hpp:44
Wildcat::Font font8x8
Definition: Driver_GlobalObjects.hpp:55
int worldY
Definition: WorldObjectGlobal.hpp:22
Definition: World_Local.hpp:58
Vector< std::string > vConsoleMessage
Definition: Driver_GlobalObjects.hpp:40
bool isUnderground
Definition: WorldObject.hpp:24
std::string getTerrainName()
Definition: World_Local.cpp:3149
Character * playerCharacter
Definition: Driver_Settings.cpp:107
int worldX
Definition: WorldObjectGlobal.hpp:22
void init()
Definition: Menu_Tribes.hpp:56
int queryWorldY
Definition: World.hpp:82
void render()
Definition: Menu_WorldSimulator.hpp:271
void init()
Definition: Menu_Biome.hpp:59
bool landMode
Definition: World_Viewer.hpp:109
Menu_WorldSimulator()
Definition: Menu_WorldSimulator.hpp:103
Calendar globalCalendar
Definition: Driver_GlobalObjects.hpp:28
void init()
Definition: Menu_Civs.hpp:55
int queryWorldX
Definition: World.hpp:82
int centerX
Definition: World_Landmass.hpp:21
World_Local * getTile(const int, const int)
Definition: World.cpp:2429
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 eventResize()
Definition: Menu_WorldSimulator.hpp:756
World simulator menu. The player can simulate the world to build up civilisation, before jumping in...
Definition: Menu_WorldSimulator.hpp:26
bool territoryView
Definition: World_Viewer.hpp:106
int centerY
Definition: World_Landmass.hpp:21
const int TICKS_PER_YEAR
Definition: Driver_Settings.cpp:187
Definition: Menu_Flora.hpp:19
Definition: World_Landmass.hpp:13
bool incrementContinuous
Definition: World.hpp:87
Menu_Biome_Details menuBiomeDetails
Definition: Menu_Biome.hpp:44
Character * getRandomCharacter()
Definition: World.cpp:535
bool isSafe(int _x, int _y)
Definition: World.cpp:504
const int TICKS_PER_MONTH
Definition: Driver_Settings.cpp:186
void setFont(Wildcat::Font *_font)
Definition: Menu_WorldSimulator.hpp:135
bool mouseEvent(Mouse *mouse)
Definition: World_Viewer.hpp:261
Definition: Tribe.hpp:23
int lastRowClicked
Definition: Menu_World.hpp:69
int TIME_SCALE
Definition: Driver_Settings.cpp:162
World * world
Definition: World_Viewer_Minimap.hpp:26
Menu_FloraDetails menuFloraDetails
Definition: Menu_Flora.hpp:43
void init()
Definition: Menu_Character.hpp:62
Data * data
Definition: World_Local.hpp:154
void incrementTicks(int)
Definition: World.cpp:1024
bool active
Definition: World_Viewer.hpp:66
void init()
Definition: Menu_Flora.hpp:62
Definition: Menu_Tribes.hpp:15
int queryWorldYLocal
Definition: World.hpp:84
std::string getLandmassName(const int, const int)
Definition: World.cpp:2197
void init()
Definition: Menu_WorldSimulator.hpp:141
Definition: Driver_Settings_Enums.hpp:25
bool mouseEvent(Mouse *_mouse)
Definition: Menu_WorldSimulator.hpp:567
bool keyboardEvent(Keyboard *_keyboard)
Definition: World_Viewer.hpp:181
Definition: Menu_Civs.hpp:15
int queryWorldXLocal
Definition: World.hpp:84
void init()
Definition: Menu_World.hpp:88
Vector< Tribe * > vTribe
Definition: World.hpp:135
bool subterraneanMode
Definition: World_Viewer.hpp:108
Menu_CharacterDetails menuCharacterDetails
Definition: Menu_Character.hpp:47
World_Landmass * selectedLandmass
Definition: Menu_World.hpp:68
virtual Texture * currentTexture()
Definition: World_Local.cpp:3159
int lastRowClicked
Definition: Menu_Tribes.hpp:38
std::string getBiomeName(const int, const int)
Definition: World.cpp:2237
void centerView()
Definition: World_Viewer.hpp:169