WorldSim  inDev
2D tile-based sandbox RPG with procedurally generated fantasy world simulator 🌏
Menu_World.hpp
Go to the documentation of this file.
1 #pragma once
2 #ifndef WORLDSIM_MENU_WORLD_HPP
3 #define WORLDSIM_MENU_WORLD_HPP
4 
5 /* WorldSim: Menu_World.hpp
6 
7  This menu shows a database of all tribes in the world. The player can click a tribe to get a detailed view of the tribe.
8 
9  This will be changed to legends. Could also be called annals.
10 */
11 
13 #include "Menu_Events.cpp"
14 #include "Menu_Items.cpp"
15 #include "Menu_Mythology.cpp"
16 #include "Menu_Races.cpp"
17 
18 #include <Graphics/GUI/GUI_Table.hpp>
19 #include <Container/Table/Table.hpp>
20 
21 #include <Data/DataTools.hpp>
22 
23 class Menu_World: public GUI_Interface
24 {
25  public:
26  GUI_Manager guiManager;
27 
28  /* Colours / theme. */
29  ColourRGB <unsigned char> cNormal;
30  ColourRGB <unsigned char> cSelected;
31  ColourRGB <unsigned char> cDropPanel;
32  ColourRGB <unsigned char> cHighlight;
33 
34  Wildcat::Font* font;
35 
36  /* Menu for investigating an individual tribe */
37  GUI_Button buttonClose;
38 
39  // View notable events
40  GUI_Button buttonEvents;
41  // View notable characters living and deceased.
42  GUI_Button buttonCharacters;
43  // View notable Tribes
44  // View notable Civilizations
45  GUI_Button buttonCivilizations;
46  // View notable Cities
47  // View notable Artifacts
48  GUI_Button buttonItems;
49  // View notable locations
50  // View Mythologies
51  GUI_Button buttonMythology;
52  // View races
53  GUI_Button buttonRaces;
54 
55  //Submenu for events
57  //Submenu for items
59  //Submenu for mythologies
61  //Submenu for races
63 
64  // TABLE FOR LANDMASSES
65  Table2 tLandmass;
66  GUI_Table guiTableLandmass;
67 
70 
71 
73  {
74  selectedLandmass=0;
75  lastRowClicked=-1;
76  }
77 
78  void setFont(Wildcat::Font* _font)
79  {
80  font = _font;
81  guiManager.setFont(_font);
82  menuEvents.setFont(_font);
83  menuItems.setFont(_font);
84  menuMythologies.setFont(_font);
85  menuRaces.setFont(_font);
86  }
87 
88  void init()
89  {
90  /* Initialise theme. */
91  cNormal.set(220,220,220);
92  cSelected.set(180,180,180);
93  cDropPanel.set(170,170,170);
94  cHighlight.set(255,160,160);
95 
96  buttonClose.text="X";
97  buttonClose.setColours(cNormal,cHighlight,0);
98  buttonClose.active=true;
99 
100  buttonEvents.text="Events";
101  buttonEvents.setColours(cNormal,cHighlight,0);
102  buttonEvents.active=true;
103 
104  buttonItems.text="Items";
105  buttonItems.setColours(cNormal,cHighlight,0);
106  buttonItems.active=true;
107 
108  buttonCivilizations.text="Civilizations";
109  buttonCivilizations.setColours(cNormal,cHighlight,0);
110  buttonCivilizations.active=true;
111 
112  buttonMythology.text="Mythologies";
113  buttonMythology.setColours(cNormal,cHighlight,0);
114  buttonMythology.active=true;
115 
116  buttonRaces.text="Races";
117  buttonRaces.setColours(cNormal,cHighlight,0);
118  buttonRaces.active=true;
119 
120  active = false;
121 
122 
123  guiTableLandmass.clear();
124  guiTableLandmass.table = &tLandmass;
125  guiTableLandmass.alpha=0;
126  guiTableLandmass.active=true;
127  guiTableLandmass.addColumn("Name","name",120);
128  guiTableLandmass.addColumn("Size","size",80);
129 
130  tLandmass.clear();
131  for (int i=0;i<world.vLandmass.size();++i)
132  {
133  tLandmass.addRow(world.vLandmass(i));
134  }
135 
136  guiManager.clear();
137  guiManager.add(&buttonClose);
138  guiManager.add(&buttonEvents);
139  guiManager.add(&buttonItems);
140  guiManager.add(&buttonCivilizations);
141  guiManager.add(&buttonMythology);
142  guiManager.add(&buttonRaces);
143  //guiManager.add(&guiTableLandmass);
144 
145  menuEvents.init();
146  menuEvents.active=false;
147  menuItems.init();
148  menuItems.active=false;
149  menuMythologies.init();
150  menuMythologies.active=false;
151  menuRaces.init();
152  menuRaces.active=false;
153 
154  eventResize();
155  menuEvents.eventResize();
156  menuItems.eventResize();
157  menuMythologies.eventResize();
158  menuRaces.eventResize();
159  }
160 
161  void render()
162  {
163  if ( menuEvents.active )
164  {
165  menuEvents.render();
166  }
167  else if ( menuItems.active )
168  {
169  menuItems.render();
170  }
171  else if ( menuMythologies.active )
172  {
173  menuMythologies.render();
174  }
175  else if ( menuRaces.active )
176  {
177  menuRaces.render();
178  }
179  else if ( active )
180  {
181  Renderer::placeColour4a(150,150,150,200,panelX1,panelY1,panelX2,panelY2);
182  font8x8.drawText("Legends of "+world.name,panelX1,panelY2-20,panelX2,panelY2-5, true, true);
183 
184  std::string strWorldInfo = "The planet "+world.name+" is in the "+world.astronomy.sunName+" system, with "+
185  DataTools::toString(world.astronomy.vPlanet.size())+" planets. ";
186 
187  if ( world.astronomy.vMoon.size() == 0 )
188  {
189  strWorldInfo += "It has no moons.";
190  }
191  else if (world.astronomy.vMoon.size() == 1 )
192  {
193  strWorldInfo += "It has 1 moon called "+world.astronomy.vMoon(0)+".";
194  }
195  else
196  {
197  strWorldInfo += "It has " + DataTools::toString(world.astronomy.vMoon.size()) +" moons called ";
198 
199 
200  for (int i=0;i<world.astronomy.vMoon.size()-1;++i)
201  {
202  strWorldInfo+=world.astronomy.vMoon(i)+", ";
203  } strWorldInfo+="and "+world.astronomy.vMoon(world.astronomy.vMoon.size()-1)+".";
204 
205  }
206 
207  font8x8.drawText(strWorldInfo, panelX1+2,panelY1,panelX2-2,panelY2-25, false, false);
208 
209  guiManager.render();
210  }
211  }
212 
213  bool keyboardEvent (Keyboard* _keyboard)
214  {
215  return false;
216  }
217 
218  bool mouseEvent (Mouse* _mouse)
219  {
220  if ( menuEvents.active )
221  {
222  menuEvents.mouseEvent(_mouse);
223  }
224  else if ( menuItems.active )
225  {
226  menuItems.mouseEvent(_mouse);
227  }
228  else if ( menuMythologies.active )
229  {
230  menuMythologies.mouseEvent(_mouse);
231  }
232  else if ( menuRaces.active )
233  {
234  menuRaces.mouseEvent(_mouse);
235  }
236 
237  else if ( active )
238  {
239  /* If the guiManager did something with the mouse event. */
240  if(guiManager.mouseEvent(_mouse)==true)
241  {
242 
243  }
244 
245  if (buttonClose.clicked==true)
246  {
247  active=false;
248  buttonClose.unclick();
249  }
250  if (buttonEvents.clicked==true)
251  {
252  std::cout<<"Events\n";
253  active=false;
254  buttonEvents.unclick();
255 
256  //menuEvents here
257  menuEvents.init(0);
258  menuEvents.active=true;
259  }
260  if (buttonItems.clicked==true)
261  {
262  std::cout<<"Items\n";
263  active=false;
264  buttonItems.unclick();
265 
266  //menuEvents here
267  menuItems.init(0);
268  menuItems.active=true;
269  }
270  if (buttonCivilizations.clicked==true)
271  {
272  std::cout<<"Civilizations\n";
273  active=false;
274  buttonCivilizations.unclick();
275 
276  //menuEvents here
277  //menuItems.init(0);
278  //menuItems.active=true;
279  }
280  if (buttonMythology.clicked==true)
281  {
282  std::cout<<"Mythology\n";
283  active=false;
284  buttonMythology.unclick();
285  menuMythologies.init(0);
286  menuMythologies.active=true;
287  }
288  if (buttonRaces.clicked==true)
289  {
290  std::cout<<"Races\n";
291  active=false;
292  buttonRaces.unclick();
293  menuRaces.init(0);
294  buttonRaces.active=true;
295  }
296 
297 
298  if ( guiTableLandmass.lastClickedIndex != -1 )
299  {
300  //world->worldV
301  //TableInterface
302  //worldViewer.setCenterTile();
303  lastRowClicked=guiTableLandmass.lastClickedIndex;
304  if (world.vLandmass.isSafe(lastRowClicked))
305  {
306  selectedLandmass=world.vLandmass(lastRowClicked);
307  }
308  guiTableLandmass.lastClickedIndex = -1;
309  }
310 
311  }
312  return false;
313  }
314 
315  void eventResize()
316  {
317  guiTableLandmass.setPanel(panelX1,panelY1,panelX2,panelY2-80);
318  buttonClose.setPanel(panelX2-40, panelY2-40, panelX2-20, panelY2-20);
319 
320  int midX = panelNX/2+panelX1;
321 
322  buttonEvents.setPanel(midX-80,panelY2-100,midX+80,panelY2-120);
323  buttonItems.setPanel(midX-80,panelY2-120,midX+80,panelY2-140);
324  buttonCivilizations.setPanel(midX-80,panelY2-140,midX+80,panelY2-160);
325  buttonMythology.setPanel(midX-80,panelY2-160,midX+80,panelY2-180);
326  buttonRaces.setPanel(midX-80,panelY2-180,midX+80,panelY2-200);
327 
328  menuEvents.setPanel(panelX1,panelY1,panelX2,panelY2);
329  menuEvents.eventResize();
330 
331  menuItems.setPanel(panelX1,panelY1,panelX2,panelY2);
332  menuItems.eventResize();
333 
334  menuMythologies.setPanel(panelX1,panelY1,panelX2,panelY2);
335  menuMythologies.eventResize();
336 
337  menuRaces.setPanel(panelX1,panelY1,panelX2,panelY2);
338  menuRaces.eventResize();
339 
340  }
341 
342 };
343 
344 
345 #endif
void render()
Definition: Menu_Items.cpp:111
std::string sunName
Definition: World_Astronomy.hpp:41
Definition: Menu_World.hpp:23
Vector< World_Landmass * > vLandmass
Definition: World.hpp:122
Menu_Mythology menuRaces
Definition: Menu_World.hpp:62
GUI_Button buttonItems
Definition: Menu_World.hpp:48
Definition: Menu_Items.cpp:15
Menu_Events menuEvents
Definition: Menu_World.hpp:56
ColourRGB< unsigned char > cDropPanel
Definition: Menu_World.hpp:31
Menu_Items menuItems
Definition: Menu_World.hpp:58
World world
Definition: Driver.cpp:45
void setFont(Wildcat::Font *_font)
Definition: Menu_Events.cpp:52
GUI_Table guiTableLandmass
Definition: Menu_World.hpp:66
void init()
Definition: Menu_Mythology.cpp:61
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_World.hpp:213
Wildcat::Font font8x8
Definition: Driver_GlobalObjects.hpp:55
void eventResize()
Definition: Menu_Mythology.cpp:211
std::string name
Definition: World.hpp:93
GUI_Button buttonCharacters
Definition: Menu_World.hpp:42
GUI_Button buttonMythology
Definition: Menu_World.hpp:51
ColourRGB< unsigned char > cNormal
Definition: Menu_World.hpp:29
GUI_Button buttonEvents
Definition: Menu_World.hpp:40
void eventResize()
Definition: Menu_Events.cpp:209
ColourRGB< unsigned char > cSelected
Definition: Menu_World.hpp:30
void init()
Definition: Menu_Events.cpp:61
Menu_World()
Definition: Menu_World.hpp:72
void init()
Definition: Menu_Items.cpp:51
Definition: Menu_Mythology.cpp:19
void setFont(Wildcat::Font *_font)
Definition: Menu_Items.cpp:43
void render()
Definition: Menu_World.hpp:161
void setFont(Wildcat::Font *_font)
Definition: Menu_World.hpp:78
bool mouseEvent(Mouse *_mouse)
Definition: Menu_Events.cpp:147
Definition: World_Landmass.hpp:13
void eventResize()
Definition: Menu_World.hpp:315
void setFont(Wildcat::Font *_font)
Definition: Menu_Mythology.cpp:52
GUI_Manager guiManager
Definition: Menu_World.hpp:26
GUI_Button buttonClose
Definition: Menu_World.hpp:37
World_Astronomy astronomy
Definition: World.hpp:98
int lastRowClicked
Definition: Menu_World.hpp:69
ColourRGB< unsigned char > cHighlight
Definition: Menu_World.hpp:32
GUI_Button buttonRaces
Definition: Menu_World.hpp:53
bool mouseEvent(Mouse *_mouse)
Definition: Menu_World.hpp:218
Wildcat::Font * font
Definition: Menu_World.hpp:34
void render()
Definition: Menu_Events.cpp:118
Definition: Menu_Events.cpp:18
Vector< std::string > vPlanet
Definition: World_Astronomy.hpp:44
GUI_Button buttonCivilizations
Definition: Menu_World.hpp:45
Table2 tLandmass
Definition: Menu_World.hpp:65
void init()
Definition: Menu_World.hpp:88
bool mouseEvent(Mouse *_mouse)
Definition: Menu_Mythology.cpp:146
World_Landmass * selectedLandmass
Definition: Menu_World.hpp:68
void render()
Definition: Menu_Mythology.cpp:119
Menu_Mythology menuMythologies
Definition: Menu_World.hpp:60
Vector< std::string > vMoon
Definition: World_Astronomy.hpp:43
bool mouseEvent(Mouse *_mouse)
Definition: Menu_Items.cpp:134
void eventResize()
Definition: Menu_Items.cpp:161