WorldSim  inDev
2D tile-based sandbox RPG with procedurally generated fantasy world simulator 🌏
Menu_Settlements.hpp
Go to the documentation of this file.
1 #pragma once
2 #ifndef WORLDSIM_MENU_SETTLEMENTS_HPP
3 #define WORLDSIM_MENU_SETTLEMENTS_HPP
4 
5 /* WorldSim: Menu_Settlements.hpp
6 
7  This menu shows a database of all settlements in the world.
8  The player can click a civ to get more detailed information of that particular settlement.
9 */
10 
12 
13 #include <Graphics/GUI/GUI_Table.hpp>
14 #include <Container/Table/Table.hpp>
15 
16 
17 class Menu_Settlements: public GUI_Interface
18 {
19  public:
20  GUI_Manager guiManager;
21 
22  /* Colours / theme. */
23  ColourRGB <unsigned char> cNormal;
24  ColourRGB <unsigned char> cSelected;
25  ColourRGB <unsigned char> cDropPanel;
26  ColourRGB <unsigned char> cHighlight;
27 
28  Wildcat::Font* font;
29 
30  GUI_Button buttonClose;
31 
32  /* Menu for investigating an individual civ */
34 
35  // TABLE FOR CIVS
36  Table2 tSettlements;
38 
41 
43 
45  {
46  lastRowClicked=-1;
47  selectedSettlement=0;
48  }
49 
50  void setFont(Wildcat::Font* _font)
51  {
52  font = _font;
53  guiManager.setFont(_font);
54  menuSettlementDetails.setFont(_font);
55  }
56 
57  void init()
58  {
59  lastRowClicked=-1;
60  selectedSettlement=0;
61  active = false;
62 
63  /* Initialise theme. */
64  cNormal.set(220,220,220);
65  cSelected.set(180,180,180);
66  cDropPanel.set(170,170,170);
67  cHighlight.set(255,160,160);
68 
69  buttonClose.text="X";
70  buttonClose.setColours(cNormal,cHighlight,0);
71  buttonClose.active=true;
72 
73  buttonSettlementDetails.text="Details";
74  buttonSettlementDetails.setColours(cNormal,cHighlight,0);
75  buttonSettlementDetails.active=true;
76  buttonSettlementDetails.clicked=false;
77 
78  guiTableSettlements.clear();
79  guiTableSettlements.table = &tSettlements;
80  guiTableSettlements.alpha=0;
81  guiTableSettlements.active=true;
82  guiTableSettlements.addColumn("Name","name",240);
83  guiTableSettlements.addColumn("Race","race",120);
84  guiTableSettlements.addColumn("Population","population",120);
85  guiTableSettlements.addColumn("Civilization","civilization",120);
86  //guiTableSettlements.addColumn("Coordinates","coordinates",120);
87  //guiTableSettlements.addColumn("Territory","territory",120);
88 
89  tSettlements.clear();
90 
91 
92  for (int i=0;i<world.vCiv.size();++i)
93  {
94  for (int j=0;j<world.vCiv(i)->vSettlement.size();++j)
95  {
96  tSettlements.addRow(world.vCiv(i)->vSettlement(j));
97  }
98  }
99 
100 
101  guiManager.add(&buttonClose);
102  guiManager.add(&buttonSettlementDetails);
103  guiManager.add(&guiTableSettlements);
104 
105  menuSettlementDetails.init();
106  menuSettlementDetails.active=false;
107 
108  eventResize();
109  menuSettlementDetails.eventResize();
110  }
111 
112  void render()
113  {
114  int nSettlements = 0;
115 
116  for (int i=0;i<world.vCiv.size();++i)
117  {
118  for (int j=0;j<world.vCiv(i)->vSettlement.size();++j)
119  {
120  ++nSettlements;
121  break;
122  }
123  }
124 
125  if (nSettlements==0)
126  {
127  active=false;
128  return;
129  }
130 
131 
132  if ( menuSettlementDetails.active )
133  {
134  menuSettlementDetails.render();
135  }
136  else if ( active )
137  {
138  Renderer::placeColour4a(150,150,150,200,panelX1,panelY1,panelX2,panelY2);
139  font8x8.drawText("SETTLEMENT LIST MENU",panelX1,panelY2-20,panelX2,panelY2-5, true, true);
140  guiManager.render();
141  }
142  }
143 
144  bool keyboardEvent (Keyboard* _keyboard)
145  {
146  if ( menuSettlementDetails.active )
147  {
148  return menuSettlementDetails.keyboardEvent(_keyboard);
149  }
150  else if ( active )
151  {
152  return guiManager.keyboardEvent(_keyboard);
153  }
154 
155 
156  return false;
157  }
158 
159  bool mouseEvent (Mouse* _mouse)
160  {
161  if ( menuSettlementDetails.active )
162  {
163  menuSettlementDetails.mouseEvent(_mouse);
164  }
165  else if ( active )
166  {
167  /* If the guiManager did something with the mouse event. */
168  if(guiManager.mouseEvent(_mouse)==true)
169  {
170 
171  }
172 
173  if (buttonClose.clicked==true)
174  {
175  active=false;
176  buttonClose.unclick();
177  }
178 
179  if (buttonSettlementDetails.clicked==true)
180  {
181  if ( selectedSettlement != 0 )
182  {
183  std::cout<<"Settlement details\n";
184  active=false;
185  menuSettlementDetails.selectedSettlement=selectedSettlement;
186  menuSettlementDetails.init(selectedSettlement);
187  menuSettlementDetails.active=true;
188  guiTableSettlements.active=false;
189  }
190  else
191  {
192  std::cout<<"Select a civ first.\n";
193  }
194 
195  buttonSettlementDetails.unclick();
196  }
197 
198 
199 
200  if (guiTableSettlements.lastClickedIndex != -1)
201  {
202  lastRowClicked = guiTableSettlements.lastClickedIndex;
203 
204  int index = 0;
205  bool found = false; // Added flag to indicate when the settlement is found
206 
207  for (int i = 0; i < world.vCiv.size() && !found; ++i)
208  {
209  for (int j = 0; j < world.vCiv(i)->vSettlement.size() && !found; ++j)
210  {
211  if (index == lastRowClicked)
212  {
213  selectedSettlement = world.vCiv(i)->vSettlement(j);
214  worldViewer.setCenterTile(selectedSettlement->worldX, selectedSettlement->worldY);
215  found = true; // Set the flag to true when the settlement is found
216  break; // Break out of the inner loop
217  }
218  ++index;
219  }
220  // No need for an explicit break here; the condition in the for-loop handles it
221  }
222  guiTableSettlements.lastClickedIndex = -1;
223  }
224 
225 
226  }
227 
228  return false;
229  }
230 
231  void eventResize()
232  {
233 
234  guiTableSettlements.setPanel(panelX1,panelY1,panelX2,panelY2-30);
235  buttonClose.setPanel(panelX2-40, panelY2-40, panelX2-20, panelY2-20);
236  buttonSettlementDetails.setPanel(panelX2-100, panelY1+40, panelX2-20, panelY1+20);
237  menuSettlementDetails.setPanel(panelX1,panelY1,panelX2,panelY2);
238  menuSettlementDetails.eventResize();
239  }
240 
241 };
242 
243 
244 #endif
Menu_SettlementDetails menuSettlementDetails
Definition: Menu_Settlements.hpp:42
WorldViewer worldViewer
Definition: Driver.cpp:35
bool mouseEvent(Mouse *_mouse)
Definition: Menu_Settlements.hpp:159
Table2 tSettlements
Definition: Menu_Settlements.hpp:36
void setFont(Wildcat::Font *_font)
Definition: Menu_SettlementDetails.cpp:60
ColourRGB< unsigned char > cNormal
Definition: Menu_Settlements.hpp:23
Vector< Civ * > vCiv
Definition: World.hpp:136
void render()
Definition: Menu_Settlements.hpp:112
World world
Definition: Driver.cpp:45
void init()
Definition: Menu_Settlements.hpp:57
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
void eventResize()
Definition: Menu_SettlementDetails.cpp:329
void eventResize()
Definition: Menu_Settlements.hpp:231
Definition: Menu_Settlements.hpp:17
Settlement * selectedSettlement
Definition: Menu_Settlements.hpp:40
Wildcat::Font font8x8
Definition: Driver_GlobalObjects.hpp:55
Settlement * selectedSettlement
Definition: Menu_SettlementDetails.cpp:40
bool mouseEvent(Mouse *_mouse)
Definition: Menu_SettlementDetails.cpp:236
GUI_Button buttonClose
Definition: Menu_Settlements.hpp:30
int worldY
Definition: WorldObjectGlobal.hpp:22
ColourRGB< unsigned char > cSelected
Definition: Menu_Settlements.hpp:24
Wildcat::Font * font
Definition: Menu_Settlements.hpp:28
int worldX
Definition: WorldObjectGlobal.hpp:22
Definition: Settlement.hpp:15
GUI_Button buttonSettlementDetails
Definition: Menu_Settlements.hpp:33
GUI_Manager guiManager
Definition: Menu_Settlements.hpp:20
int lastRowClicked
Definition: Menu_Settlements.hpp:39
ColourRGB< unsigned char > cHighlight
Definition: Menu_Settlements.hpp:26
void render()
Definition: Menu_SettlementDetails.cpp:128
Definition: Menu_SettlementDetails.cpp:17
void init()
Definition: Menu_SettlementDetails.cpp:69
ColourRGB< unsigned char > cDropPanel
Definition: Menu_Settlements.hpp:25
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_Settlements.hpp:144
Menu_Settlements()
Definition: Menu_Settlements.hpp:44
GUI_Table guiTableSettlements
Definition: Menu_Settlements.hpp:37
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_SettlementDetails.cpp:223
void setFont(Wildcat::Font *_font)
Definition: Menu_Settlements.hpp:50