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