WorldSim  inDev
2D tile-based sandbox RPG with procedurally generated fantasy world simulator 🌏
Menu_Biome.hpp
Go to the documentation of this file.
1 #pragma once
2 #ifndef WORLDSIM_MENU_BIOME_HPP
3 #define WORLDSIM_MENU_BIOME_HPP
4 
5 /* WorldSim: Menu_Biome.hpp
6  #include "Menu_Biome.hpp"
7 
8  Shows sortable table of all biomes with size and type. Also centers on the biome when you click the entry.
9  Leads to a "Biome Detail" menu.
10 */
11 
12 #include "Menu_Biome_Details.hpp"
13 
14 #include <Graphics/GUI/GUI_Table.hpp>
15 #include <Container/Table/Table.hpp>
16 
17 #include <Data/DataTools.hpp>
18 
19 class Menu_Biome: public GUI_Interface
20 {
21  public:
22  GUI_Manager guiManager;
23 
24  /* Colours / theme. */
25  ColourRGB <unsigned char> cNormal;
26  ColourRGB <unsigned char> cSelected;
27  ColourRGB <unsigned char> cDropPanel;
28  ColourRGB <unsigned char> cHighlight;
29 
30  Wildcat::Font* font;
31 
32  /* Menu for investigating an individual biome */
33  GUI_Button buttonClose;
34 
35  GUI_Button buttonBiomeDetail;
36 
37  // TABLE FOR BIOMES
38  Table2 tBiome;
39  GUI_Table guiTableBiome;
40 
42  World_Biome * selectedBiome; // The biome the user has selected in the menu.
43 
45 
47  {
48  lastRowClicked=-1;
49  selectedBiome=0;
50  }
51 
52  void setFont(Wildcat::Font* _font)
53  {
54  font = _font;
55  guiManager.setFont(_font);
56  menuBiomeDetails.setFont(_font);
57  }
58 
59  void init()
60  {
61  /* Initialise theme. */
62  cNormal.set(220,220,220);
63  cSelected.set(180,180,180);
64  cDropPanel.set(170,170,170);
65  cHighlight.set(255,160,160);
66 
67  buttonClose.text="X";
68  buttonClose.setColours(cNormal,cHighlight,0);
69  buttonClose.active=true;
70 
71  buttonBiomeDetail.text="Details";
72  buttonBiomeDetail.setColours(cNormal,cHighlight,0);
73  buttonBiomeDetail.active=true;
74 
75  active = false;
76 
77 
78  guiTableBiome.clear();
79  guiTableBiome.table = &tBiome;
80  guiTableBiome.alpha=0;
81  guiTableBiome.active=true;
82  guiTableBiome.addColumn("Name","name",150);
83  guiTableBiome.addColumn("Size","size",80);
84  guiTableBiome.addColumn("Type","type",80);
85 
86  tBiome.clear();
87  for (int i=0;i<world.vBiome.size();++i)
88  {
89  tBiome.addRow(world.vBiome(i));
90  }
91 
92  guiManager.clear();
93  guiManager.add(&buttonClose);
94  guiManager.add(&buttonBiomeDetail);
95  guiManager.add(&guiTableBiome);
96 
97 
98  menuBiomeDetails.init();
99  menuBiomeDetails.active=false;
100 
101  eventResize();
102  menuBiomeDetails.eventResize();
103  }
104 
105  void render()
106  {
107  if ( menuBiomeDetails.active )
108  {
109  menuBiomeDetails.render();
110  }
111  else if ( active )
112  {
113  Renderer::placeColour4a(150,150,150,200,panelX1,panelY1,panelX2,panelY2);
114  font8x8.drawText("Biome Menu",panelX1,panelY2-20,panelX2,panelY2-5, true, true);
115 
116  //font8x8.drawText("This menu will display interesting info about the world. For example, did you know that the world has "+DataTools::toString(world.vTribe.size())+" tribes? Fascinating stuff.\n",panelX1,panelY1,panelX2,panelY2-25, false, false);
117 
118  guiManager.render();
119  }
120  }
121 
122  bool keyboardEvent (Keyboard* _keyboard)
123  {
124  if ( menuBiomeDetails.active )
125  {
126  return menuBiomeDetails.keyboardEvent(_keyboard);
127  }
128  else if ( active )
129  {
130  return guiManager.keyboardEvent(_keyboard);
131  }
132  return false;
133  }
134 
135  bool mouseEvent (Mouse* _mouse)
136  {
137  if ( menuBiomeDetails.active )
138  {
139  menuBiomeDetails.mouseEvent(_mouse);
140  }
141  else if ( active )
142  {
143  /* If the guiManager did something with the mouse event. */
144  if(guiManager.mouseEvent(_mouse)==true)
145  {
146  }
147  if (buttonClose.clicked==true)
148  {
149  active=false;
150  buttonClose.unclick();
151  }
152 
153  if (buttonBiomeDetail.clicked==true)
154  {
155  if ( selectedBiome != 0 )
156  {
157  //we need to quickly generate the flora if it hasn't been already
158  // we might need a higher level meta generator for flora/creatures which
159  // doesn't need land to be generated.
160  //selectedBiome->generate();
161 
162  // update: It seems there's no need to do this as the flora and creatures are already generated
163  // upon entering world simulator
164 
165  menuBiomeDetails.selectedBiome=selectedBiome;
166  menuBiomeDetails.init();
167  menuBiomeDetails.active=true;
168  }
169  else
170  {
171  std::cout<<"Select a biome first.\n";
172  }
173 
174  buttonBiomeDetail.unclick();
175  }
176 
177 
178  if ( guiTableBiome.lastClickedIndex != -1 )
179  {
180  lastRowClicked=guiTableBiome.lastClickedIndex;
181 
182  // find the biome with the correct id
183  //for (int i=0;i<world.vBiome
184  World_Biome * b = world.getBiome(lastRowClicked);
185 
186  if (b)
187  {
188  selectedBiome = b;
189  //std::cout<<"Selectedbiome: "<<selectedBiome->name<<"\n";
190 
191  if ( b != 0 )
192  {
194  }
195  }
196 
197  guiTableBiome.lastClickedIndex = -1;
198  }
199  }
200  return false;
201  }
202 
203  void eventResize()
204  {
205  guiTableBiome.setPanel(panelX1,panelY1,panelX2,panelY2-30);
206  buttonClose.setPanel(panelX2-40, panelY2-40, panelX2-20, panelY2-20);
207  buttonBiomeDetail.setPanel(panelX2-150, panelY1+40, panelX2-20, panelY1+20);
208  menuBiomeDetails.setPanel(panelX1,panelY1,panelX2,panelY2);
209  menuBiomeDetails.eventResize();
210  }
211 
212 };
213 
214 
215 #endif
WorldViewer worldViewer
Definition: Driver.cpp:35
Definition: Menu_Biome_Details.hpp:15
Definition: Menu_Biome.hpp:19
World_Biome * getBiome(const int id)
Definition: World.cpp:2212
GUI_Button buttonBiomeDetail
Definition: Menu_Biome.hpp:35
ColourRGB< unsigned char > cNormal
Definition: Menu_Biome.hpp:25
int centerX
Definition: World_Biome.hpp:77
World world
Definition: Driver.cpp:45
Wildcat::Font * font
Definition: Menu_Biome.hpp:30
void eventResize()
Definition: Menu_Biome_Details.hpp:134
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
Definition: World_Biome.hpp:46
bool mouseEvent(Mouse *_mouse)
Definition: Menu_Biome_Details.hpp:117
void setFont(Wildcat::Font *_font)
Definition: Menu_Biome.hpp:52
Wildcat::Font font8x8
Definition: Driver_GlobalObjects.hpp:55
Table2 tBiome
Definition: Menu_Biome.hpp:38
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_Biome_Details.hpp:112
ColourRGB< unsigned char > cDropPanel
Definition: Menu_Biome.hpp:27
void init()
Definition: Menu_Biome.hpp:59
void init()
Definition: Menu_Biome_Details.hpp:44
GUI_Manager guiManager
Definition: Menu_Biome.hpp:22
World_Biome * selectedBiome
Definition: Menu_Biome_Details.hpp:31
void setFont(Wildcat::Font *_font)
Definition: Menu_Biome_Details.hpp:38
void render()
Definition: Menu_Biome.hpp:105
ColourRGB< unsigned char > cHighlight
Definition: Menu_Biome.hpp:28
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_Biome.hpp:122
void render()
Definition: Menu_Biome_Details.hpp:64
Menu_Biome_Details menuBiomeDetails
Definition: Menu_Biome.hpp:44
GUI_Button buttonClose
Definition: Menu_Biome.hpp:33
Menu_Biome()
Definition: Menu_Biome.hpp:46
int lastRowClicked
Definition: Menu_Biome.hpp:41
int centerY
Definition: World_Biome.hpp:77
World_Biome * selectedBiome
Definition: Menu_Biome.hpp:42
Vector< World_Biome * > vBiome
Definition: World.hpp:123
bool mouseEvent(Mouse *_mouse)
Definition: Menu_Biome.hpp:135
ColourRGB< unsigned char > cSelected
Definition: Menu_Biome.hpp:26
GUI_Table guiTableBiome
Definition: Menu_Biome.hpp:39
void eventResize()
Definition: Menu_Biome.hpp:203