WorldSim  inDev
2D tile-based sandbox RPG with procedurally generated fantasy world simulator 🌏
Menu_Flora.hpp
Go to the documentation of this file.
1 #pragma once
2 #ifndef WORLDSIM_MENU_FLORA_HPP
3 #define WORLDSIM_MENU_FLORA_HPP
4 
5 /* WorldSim: Menu_Flora.hpp
6  #include "Menu_Flora.hpp"
7 
8  Table of all Flora in World, with option to view submenu for a specific Flora.
9 */
10 
11 #include "Menu_FloraDetails.hpp" //Flora Details Submenu
12 
13 #include <Graphics/GUI/GUI_Table.hpp>
14 #include <Container/Table/Table.hpp>
15 #include <Data/DataTools.hpp>
16 
17 
18 
19 class Menu_Flora: 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  /* Button to close the menu */
33  GUI_Button buttonClose;
34 
35  /* Button to open Flora Details menu */
36  GUI_Button buttonFloraDetails;
37 
38  // TABLE FOR BIOMES
39  // why are there 2 tables here?
40  Table2 tFlora;
41  GUI_Table guiTableFlora;
42 
44 
46  Flora * selectedFlora; // The Flora the user has selected in the menu.
47 
49  {
50  lastRowClicked=-1;
51  selectedFlora=0;
52  menuFloraDetails.active=false;
53  }
54 
55  void setFont(Wildcat::Font* _font)
56  {
57  font = _font;
58  guiManager.setFont(_font);
59  menuFloraDetails.setFont(_font);
60  }
61 
62  void init()
63  {
64  /* Initialise theme. */
65  cNormal.set(220,220,220);
66  cSelected.set(180,180,180);
67  cDropPanel.set(170,170,170);
68  cHighlight.set(255,160,160);
69 
70  buttonClose.text="X";
71  buttonClose.setColours(cNormal,cHighlight,0);
72  buttonClose.active=true;
73 
74  buttonFloraDetails.text="Flora Details";
75  buttonFloraDetails.setColours(cNormal,cHighlight,0);
76  buttonFloraDetails.active=true;
77 
78  active = false;
79 
80  guiTableFlora.clear();
81  guiTableFlora.table = &tFlora;
82  guiTableFlora.alpha=0;
83  guiTableFlora.active=true;
84  guiTableFlora.addColumn("Name","name",300);
85 
86  tFlora.clear();
87  for (int i=0;i<world.vBiome.size();++i)
88  {
89  World_Biome * biome = world.vBiome(i);
90  Vector <Flora*> * vFloraTypes = biome->getAllFloraTypes();
91 
92  if ( vFloraTypes == 0 )
93  {
94  // error null vector ptr
95  return;
96  }
97 
98  for (int j=0;j<vFloraTypes->size();++j)
99  {
100  tFlora.addRow( (*vFloraTypes)(j) );
101  }
102  }
103 
104  guiManager.clear();
105  guiManager.add(&buttonClose);
106  guiManager.add(&buttonFloraDetails);
107  guiManager.add(&guiTableFlora);
108 
109  eventResize();
110  }
111 
112  void render()
113  {
114  if (menuFloraDetails.active)
115  {
116  menuFloraDetails.render();
117  }
118  else if (active)
119  {
120  Renderer::placeColour4a(150,150,150,200,panelX1,panelY1,panelX2,panelY2);
121  font8x8.drawText("Flora Info",panelX1,panelY2-20,panelX2,panelY2-5, true, true);
122  guiManager.render();
123  }
124  }
125 
126  bool keyboardEvent (Keyboard* _keyboard)
127  {
128  return false;
129  }
130 
131  bool mouseEvent (Mouse* _mouse)
132  {
133  if (menuFloraDetails.active)
134  {
135  menuFloraDetails.mouseEvent(_mouse);
136  }
137  else if ( active )
138  {
139  /* If the guiManager did something with the mouse event. */
140  if(guiManager.mouseEvent(_mouse)==true)
141  {
142  }
143  if (buttonClose.clicked==true)
144  {
145  active=false;
146  buttonClose.unclick();
147  }
148  if (buttonFloraDetails.clicked==true)
149  {
150  std::cout<<"Clicked flora details.\n";
151  if ( selectedFlora != 0 )
152  {
153  std::cout<<"Flora details\n";
154  menuFloraDetails.init(selectedFlora);
155  menuFloraDetails.active=true;
156  }
157  else
158  {
159  std::cout<<"Select a Flora first.\n";
160  }
161 
162  buttonFloraDetails.unclick();
163  }
164  if ( guiTableFlora.lastClickedIndex != -1 )
165  {
166  selectedFlora=0;
167  lastRowClicked=guiTableFlora.lastClickedIndex;
168  std::cout<<"You clicked index: "<<lastRowClicked<<"\n";
169 
170  // get the flora of this index.
171  // (in future an ID system would be useful)]
172  int floraIndex=0;
173 
174  for (int i=0;i<world.vBiome.size()&&selectedFlora==0;++i)
175  {
176  World_Biome * biome = world.vBiome(i);
177  Vector <Flora*> * vFloraTypes = biome->getAllFloraTypes();
178 
179  if ( vFloraTypes == 0 )
180  {
181  // error null vector ptr
182  return false;
183  }
184 
185  for (int j=0;j<vFloraTypes->size()&&selectedFlora==0;++j)
186  {
187 
188  if ( floraIndex == lastRowClicked )
189  {
190  // we found the matching index.
191 
192  selectedFlora=(*vFloraTypes)(j);
193  std::cout<<"Found match: "<<selectedFlora->getName()<<"\n";
194  //break;
195  }
196  ++floraIndex;
197  }
198  }
199  guiTableFlora.lastClickedIndex = -1;
200  }
201  }
202  return false;
203  }
204 
205  void eventResize()
206  {
207  guiTableFlora.setPanel(panelX1,panelY1,panelX2,panelY2-30);
208  buttonClose.setPanel(panelX2-40, panelY2-40, panelX2-20, panelY2-20);
209  buttonFloraDetails.setPanel(panelX2-150, panelY1+40, panelX2-20, panelY1+20);
210  menuFloraDetails.setPanel(panelX1,panelY1,panelX2,panelY2);
211  menuFloraDetails.eventResize();
212  }
213 
214 };
215 
216 
217 #endif
ColourRGB< unsigned char > cNormal
Definition: Menu_Flora.hpp:25
ColourRGB< unsigned char > cDropPanel
Definition: Menu_Flora.hpp:27
bool mouseEvent(Mouse *_mouse)
Definition: Menu_Flora.hpp:131
void init()
Definition: Menu_FloraDetails.hpp:51
ColourRGB< unsigned char > cSelected
Definition: Menu_Flora.hpp:26
ColourRGB< unsigned char > cHighlight
Definition: Menu_Flora.hpp:28
Definition: Menu_FloraDetails.hpp:21
World world
Definition: Driver.cpp:45
GUI_Button buttonClose
Definition: Menu_Flora.hpp:33
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_Flora.hpp:126
Flora * selectedFlora
Definition: Menu_Flora.hpp:46
int lastRowClicked
Definition: Menu_Flora.hpp:45
Definition: World_Biome.hpp:46
Wildcat::Font * font
Definition: Menu_Flora.hpp:30
Menu_Flora()
Definition: Menu_Flora.hpp:48
Wildcat::Font font8x8
Definition: Driver_GlobalObjects.hpp:55
void render()
Definition: Menu_FloraDetails.hpp:78
void render()
Definition: Menu_Flora.hpp:112
GUI_Table guiTableFlora
Definition: Menu_Flora.hpp:41
GUI_Button buttonFloraDetails
Definition: Menu_Flora.hpp:36
bool mouseEvent(Mouse *_mouse)
Definition: Menu_FloraDetails.hpp:122
GUI_Manager guiManager
Definition: Menu_Flora.hpp:22
void setFont(Wildcat::Font *_font)
Definition: Menu_Flora.hpp:55
Definition: Static_Flora.hpp:201
void eventResize()
Definition: Menu_FloraDetails.hpp:141
void eventResize()
Definition: Menu_Flora.hpp:205
Table2 tFlora
Definition: Menu_Flora.hpp:40
Definition: Menu_Flora.hpp:19
Vector< World_Biome * > vBiome
Definition: World.hpp:123
Menu_FloraDetails menuFloraDetails
Definition: Menu_Flora.hpp:43
void init()
Definition: Menu_Flora.hpp:62
std::string getName() override
Definition: Static_Flora.cpp:60
void setFont(Wildcat::Font *_font)
Definition: Menu_FloraDetails.hpp:44
Vector< Flora * > * getAllFloraTypes()
Definition: World_Biome.cpp:337