WorldSim  inDev
2D tile-based sandbox RPG with procedurally generated fantasy world simulator 🌏
Menu_Character.hpp
Go to the documentation of this file.
1 #pragma once
2 #ifndef WORLDSIM_MENU_CHARACTER_HPP
3 #define WORLDSIM_MENU_CHARACTER_HPP
4 
5 /* WorldSim: Menu_Tribes.hpp
6  #include "Menu_Tribes.hpp"
7 
8  This menu shows a database of all Characters in the world.
9  The player can click a Character to get their Character Sheet.
10  This system seems to work with millions of Characters but obviously can get a bit unwieldy.
11  In future it might be better to split them by city/tribe/civ, or at least have better filtering options.
12  For now it works well enough though.
13 */
14 
16 
17 #include <Graphics/GUI/GUI_Table.hpp>
18 #include <Container/Table/Table.hpp>
19 
20 class Menu_Characters: public GUI_Interface
21 {
22  public:
23  GUI_Manager guiManager;
24 
25  /* Colours / theme. */
26  ColourRGB <unsigned char> cNormal;
27  ColourRGB <unsigned char> cSelected;
28  ColourRGB <unsigned char> cDropPanel;
29  ColourRGB <unsigned char> cHighlight;
30 
31  Wildcat::Font* font;
32 
33  /* Button to close the menu */
34  GUI_Button buttonClose;
35 
36  /* Button to open Character Details menu */
38 
39  // TABLE FOR CHARACTERS
40  Table2 tCharacters;
41  GUI_Table guiTableCharacters;
42 
44  //Tribe* selectedTribe;
46 
48 
50  {
51  lastRowClicked=-1;
52  selectedCharacter=0;
53  }
54 
55  void setFont(Wildcat::Font* _font)
56  {
57  font = _font;
58  guiManager.setFont(_font);
59  menuCharacterDetails.setFont(_font);
60  }
61 
62  void init()
63  {
64  lastRowClicked=-1;
65  selectedCharacter=0;
66 
67  /* Initialise theme. */
68  cNormal.set(220,220,220);
69  cSelected.set(180,180,180);
70  cDropPanel.set(170,170,170);
71  cHighlight.set(255,160,160);
72 
73  buttonClose.text="X";
74  buttonClose.setColours(cNormal,cHighlight,0);
75  buttonClose.active=true;
76 
77  buttonCharacterDetails.text="Character Sheet";
78  buttonCharacterDetails.setColours(cNormal,cHighlight,0);
79  buttonCharacterDetails.active=true;
80 
81  guiTableCharacters.clear();
82  guiTableCharacters.table = &tCharacters;
83  guiTableCharacters.alpha=0;
84  guiTableCharacters.active=true;
85  guiTableCharacters.addColumn("First name","firstname",120);
86  guiTableCharacters.addColumn("Last name","lastname",120);
87  guiTableCharacters.addColumn("Age","age",60);
88  guiTableCharacters.addColumn("Sex","sex",60);
89  guiTableCharacters.addColumn("Race","race",100);
90  guiTableCharacters.addColumn("Strength","strength",100);
91  guiTableCharacters.addColumn("Kills","kills",60);
92  guiTableCharacters.addColumn("Smithing","skillMetalsmithing",120);
93  guiTableCharacters.addColumn("Favourite","favourite",120);
94  guiTableCharacters.setColours(cNormal,cSelected);
95  //guiTableTribes.addColumn("Food","food",120);
96  //guiTableTribes.addColumn("Population","population",120);
97  //guiTableTribes.addColumn("Coordinates","coordinates",120);
98  //guiTableTribes.addColumn("Territory","territory",120);
99 
100  tCharacters.clear();
101  for (int i=0;i<world.vTribe.size();++i)
102  {
103  for (int i2=0;i2<world.vTribe(i)->vCharacter.size();++i2)
104  {
105  tCharacters.addRow(world.vTribe(i)->vCharacter(i2));
106  }
107  }
108  // Add Civ characters
109  for (int i=0;i<world.vCiv.size();++i)
110  {
111  for (int i2=0;i2<world.vCiv(i)->vCharacter.size();++i2)
112  {
113  if (world.vCiv(i)->vCharacter(i2)->isAlive)
114  {
115  tCharacters.addRow(world.vCiv(i)->vCharacter(i2));
116  }
117  }
118  }
119 
120  guiManager.clear();
121  guiManager.add(&buttonClose);
122  guiManager.add(&buttonCharacterDetails);
123  guiManager.add(&guiTableCharacters);
124 
125  menuCharacterDetails.init();
126  menuCharacterDetails.active=false;
127 
128  eventResize();
129  menuCharacterDetails.eventResize();
130  }
131 
132  void render()
133  {
134  if ( menuCharacterDetails.active )
135  {
136  menuCharacterDetails.render();
137  }
138  else if ( active )
139  {
140 
141  Renderer::placeColour4a(150,150,150,200,panelX1,panelY1,panelX2,panelY2);
142  font8x8.drawText("Character List Menu",panelX1,panelY2-20,panelX2,panelY2-5, true, true);
143  guiManager.render();
144  }
145  }
146 
147  bool keyboardEvent (Keyboard* _keyboard)
148  {
149  if ( menuCharacterDetails.active )
150  {
151  return menuCharacterDetails.keyboardEvent(_keyboard);
152  }
153  else if ( active )
154  {
155  return guiManager.keyboardEvent(_keyboard);
156  }
157 
158 
159  return false;
160  }
161 
162  bool mouseEvent (Mouse* _mouse)
163  {
164  if ( menuCharacterDetails.active )
165  {
166  menuCharacterDetails.mouseEvent(_mouse);
167  }
168  else if ( active )
169  {
170  /* If the guiManager did something with the mouse event. */
171  if(guiManager.mouseEvent(_mouse)==true)
172  {
173 
174  }
175 
176  if (buttonClose.clicked==true)
177  {
178  std::cout<<"CLOSE\n";
179  active=false;
180  buttonClose.unclick();
181  }
182 
183  if (buttonCharacterDetails.clicked==true)
184  {
185  if ( selectedCharacter != 0 )
186  {
187  std::cout<<"Character details\n";
188  //active=false;
189  //menuCharacterDetails.selectedTribe=selectedTribe;
190  menuCharacterDetails.init(selectedCharacter);
191 
192  menuCharacterDetails.active=true;
193  //guiTableTribes.active=false;
194 
195  Vector <Character*> vKnown = selectedCharacter->getAllKnownCharacters();
196 
197  std::cout<<"Known:\n";
198  for (int i=0;i<vKnown.size();++i)
199  {
200  std::cout<<vKnown(i)->getFullName()<<"\n";
201  }
202  }
203  else
204  {
205  std::cout<<"Select a character first.\n";
206  }
207 
208  buttonCharacterDetails.unclick();
209  }
210 
211 
212 
213  if ( guiTableCharacters.lastClickedIndex != -1 )
214  {
215  lastRowClicked=guiTableCharacters.lastClickedIndex;
216 
217  int totalIndex = 0;
218  for (int i=0;i<world.vTribe.size();++i)
219  {
220  for (int i2=0;i2<world.vTribe(i)->vCharacter.size();++i2)
221  {
222 
223  if ( totalIndex == lastRowClicked )
224  {
225  selectedCharacter = world.vTribe(i)->vCharacter(i2);
226  }
227  ++totalIndex;
228  }
229  }
230  for (int i=0;i<world.vCiv.size();++i)
231  {
232  for (int j=0;j<world.vCiv(i)->vCharacter.size();++j)
233  {
234  if ( totalIndex == lastRowClicked )
235  {
236  selectedCharacter = world.vCiv(i)->vCharacter(j);
237  }
238 
239  ++totalIndex;
240  }
241 
242 
243  }
244 
245  guiTableCharacters.lastClickedIndex = -1;
246  }
247 
248  }
249 
250  return false;
251  }
252 
253  void eventResize()
254  {
255  guiTableCharacters.setPanel(panelX1,panelY1,panelX2,panelY2-30);
256  buttonClose.setPanel(panelX2-40, panelY2-40, panelX2-20, panelY2-20);
257  buttonCharacterDetails.setPanel(panelX2-150, panelY1+40, panelX2-20, panelY1+20);
258  menuCharacterDetails.setPanel(panelX1,panelY1,panelX2,panelY2);
259  menuCharacterDetails.eventResize();
260  }
261 
262 };
263 
264 
265 #endif
void setFont(Wildcat::Font *_font)
Definition: Menu_Character.hpp:55
Vector< Civ * > vCiv
Definition: World.hpp:136
ColourRGB< unsigned char > cHighlight
Definition: Menu_Character.hpp:29
GUI_Table guiTableCharacters
Definition: Menu_Character.hpp:41
Definition: Menu_CharacterDetails.cpp:14
World world
Definition: Driver.cpp:45
bool mouseEvent(Mouse *_mouse)
Definition: Menu_Character.hpp:162
Definition: Menu_Character.hpp:20
void render()
Definition: Menu_CharacterDetails.cpp:131
Wildcat::Font font8x8
Definition: Driver_GlobalObjects.hpp:55
GUI_Button buttonClose
Definition: Menu_Character.hpp:34
Menu_Characters()
Definition: Menu_Character.hpp:49
void init()
Definition: Menu_CharacterDetails.cpp:55
Vector< Character * > getAllKnownCharacters()
Definition: Character.cpp:252
ColourRGB< unsigned char > cSelected
Definition: Menu_Character.hpp:27
void render()
Definition: Menu_Character.hpp:132
GUI_Manager guiManager
Definition: Menu_Character.hpp:23
GUI_Button buttonCharacterDetails
Definition: Menu_Character.hpp:37
Definition: Character.hpp:38
Table2 tCharacters
Definition: Menu_Character.hpp:40
void eventResize()
Definition: Menu_CharacterDetails.cpp:338
bool mouseEvent(Mouse *_mouse)
Definition: Menu_CharacterDetails.cpp:241
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_Character.hpp:147
ColourRGB< unsigned char > cDropPanel
Definition: Menu_Character.hpp:28
void init()
Definition: Menu_Character.hpp:62
int lastRowClicked
Definition: Menu_Character.hpp:43
void eventResize()
Definition: Menu_Character.hpp:253
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_CharacterDetails.cpp:232
Character * selectedCharacter
Definition: Menu_Character.hpp:45
void setFont(Wildcat::Font *_font)
Definition: Menu_CharacterDetails.cpp:47
Vector< Tribe * > vTribe
Definition: World.hpp:135
Menu_CharacterDetails menuCharacterDetails
Definition: Menu_Character.hpp:47
ColourRGB< unsigned char > cNormal
Definition: Menu_Character.hpp:26
Wildcat::Font * font
Definition: Menu_Character.hpp:31