WorldSim  inDev
2D tile-based sandbox RPG with procedurally generated fantasy world simulator 🌏
Menu_Civs.hpp
Go to the documentation of this file.
1 #pragma once
2 #ifndef WORLDSIM_MENU_CIVS_HPP
3 #define WORLDSIM_MENU_CIVS_HPP
4 
5 /* WorldSim: Menu_Civs.cpp
6 
7  This menu shows a database of all civs in the world. The player can click a civ to get a detailed view of the civ.
8 */
9 
10 #include <Graphics/GUI/GUI_Table.hpp>
11 #include <Container/Table/Table.hpp>
12 
13 #include "Menu_CivDetails.hpp"
14 
15 class Menu_Civs: public GUI_Interface
16 {
17  public:
18  GUI_Manager guiManager;
19 
20  /* Colours / theme. */
21  ColourRGB <unsigned char> cNormal;
22  ColourRGB <unsigned char> cSelected;
23  ColourRGB <unsigned char> cDropPanel;
24  ColourRGB <unsigned char> cHighlight;
25 
26  Wildcat::Font* font;
27 
28  GUI_Button buttonClose;
29 
30  /* Menu for investigating an individual civ */
31  GUI_Button buttonCivDetails;
32 
33  // TABLE FOR CIVS
34  Table2 tCivs;
35  GUI_Table guiTableCivs;
36 
39 
41 
43  {
44  lastRowClicked=-1;
45  selectedCiv=0;
46  }
47 
48  void setFont(Wildcat::Font* _font)
49  {
50  font = _font;
51  guiManager.setFont(_font);
52  menuCivDetails.setFont(_font);
53  }
54 
55  void init()
56  {
57  lastRowClicked=-1;
58  selectedCiv=0;
59  active = false;
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  buttonCivDetails.text="Details";
72  buttonCivDetails.setColours(cNormal,cHighlight,0);
73  buttonCivDetails.active=true;
74 
75  guiTableCivs.clear();
76  guiTableCivs.table = &tCivs;
77  guiTableCivs.alpha=0;
78  guiTableCivs.active=true;
79  guiTableCivs.addColumn("Name","name",120);
80  guiTableCivs.addColumn("Race","race",120);
81  guiTableCivs.addColumn("Population","population",120);
82  //guiTableCivs.addColumn("Coordinates","coordinates",120);
83  //guiTableCivs.addColumn("Territory","territory",120);
84 
85  tCivs.clear();
86  for (int i=0;i<world.vCiv.size();++i)
87  {
88  tCivs.addRow(world.vCiv(i));
89  }
90 
91 
92  guiManager.add(&buttonClose);
93  guiManager.add(&buttonCivDetails);
94  guiManager.add(&guiTableCivs);
95 
96  menuCivDetails.init();
97  menuCivDetails.active=false;
98 
99  eventResize();
100  menuCivDetails.eventResize();
101  }
102 
103  void render()
104  {
105  if ( menuCivDetails.active )
106  {
107  menuCivDetails.render();
108  }
109  else if ( active )
110  {
111  Renderer::placeColour4a(150,150,150,200,panelX1,panelY1,panelX2,panelY2);
112  font8x8.drawText("CIV LIST MENU",panelX1,panelY2-20,panelX2,panelY2-5, true, true);
113  guiManager.render();
114  }
115  }
116 
117  bool keyboardEvent (Keyboard* _keyboard)
118  {
119  if ( menuCivDetails.active )
120  {
121  return menuCivDetails.keyboardEvent(_keyboard);
122  }
123  else if ( active )
124  {
125  return guiManager.keyboardEvent(_keyboard);
126  }
127 
128 
129  return false;
130  }
131 
132  bool mouseEvent (Mouse* _mouse)
133  {
134  if ( menuCivDetails.active )
135  {
136  menuCivDetails.mouseEvent(_mouse);
137  }
138  else if ( active )
139  {
140  /* If the guiManager did something with the mouse event. */
141  if(guiManager.mouseEvent(_mouse)==true)
142  {
143 
144  }
145 
146  if (buttonClose.clicked==true)
147  {
148  active=false;
149  buttonClose.unclick();
150  }
151 
152  if (buttonCivDetails.clicked==true)
153  {
154  if ( selectedCiv != 0 )
155  {
156  active=false;
157  //menuCivDetails.selectedCiv=selectedCiv;
158  menuCivDetails.init(selectedCiv);
159  menuCivDetails.active=true;
160  guiTableCivs.active=false;
161  }
162  else
163  {
164  std::cout<<"Select a civ first.\n";
165  }
166 
167  buttonCivDetails.unclick();
168  }
169 
170 
171 
172  if ( guiTableCivs.lastClickedIndex != -1 )
173  {
174  //world->worldV
175  //TableInterface
176  //worldViewer.setCenterTile();
177  lastRowClicked=guiTableCivs.lastClickedIndex;
178  if (world.vCiv.isSafe(lastRowClicked))
179  {
180  selectedCiv=world.vCiv(lastRowClicked);
181  }
182  guiTableCivs.lastClickedIndex = -1;
183  }
184 
185  }
186 
187  return false;
188  }
189 
190  void eventResize()
191  {
192 
193  guiTableCivs.setPanel(panelX1,panelY1,panelX2,panelY2-30);
194  buttonClose.setPanel(panelX2-40, panelY2-40, panelX2-20, panelY2-20);
195  buttonCivDetails.setPanel(panelX2-100, panelY1+40, panelX2-20, panelY1+20);
196  menuCivDetails.setPanel(panelX1,panelY1,panelX2,panelY2);
197  menuCivDetails.eventResize();
198  }
199 
200 };
201 
202 
203 #endif
void setFont(Wildcat::Font *_font)
Definition: Menu_Civs.hpp:48
GUI_Manager guiManager
Definition: Menu_Civs.hpp:18
Vector< Civ * > vCiv
Definition: World.hpp:136
Civ * selectedCiv
Definition: Menu_Civs.hpp:38
ColourRGB< unsigned char > cNormal
Definition: Menu_Civs.hpp:21
Definition: Civ.hpp:28
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_Civs.hpp:117
World world
Definition: Driver.cpp:45
GUI_Table guiTableCivs
Definition: Menu_Civs.hpp:35
Table2 tCivs
Definition: Menu_Civs.hpp:34
int lastRowClicked
Definition: Menu_Civs.hpp:37
Wildcat::Font font8x8
Definition: Driver_GlobalObjects.hpp:55
void init()
Definition: Menu_CivDetails.hpp:56
bool mouseEvent(Mouse *_mouse)
Definition: Menu_CivDetails.hpp:145
GUI_Button buttonClose
Definition: Menu_Civs.hpp:28
void render()
Definition: Menu_Civs.hpp:103
void render()
Definition: Menu_CivDetails.hpp:114
void init()
Definition: Menu_Civs.hpp:55
Wildcat::Font * font
Definition: Menu_Civs.hpp:26
void eventResize()
Definition: Menu_Civs.hpp:190
Definition: Menu_CivDetails.hpp:14
bool keyboardEvent(Keyboard *_keyboard)
Definition: Menu_CivDetails.hpp:129
ColourRGB< unsigned char > cDropPanel
Definition: Menu_Civs.hpp:23
void setFont(Wildcat::Font *_font)
Definition: Menu_CivDetails.hpp:47
void eventResize()
Definition: Menu_CivDetails.hpp:206
ColourRGB< unsigned char > cSelected
Definition: Menu_Civs.hpp:22
Definition: Menu_Civs.hpp:15
GUI_Button buttonCivDetails
Definition: Menu_Civs.hpp:31
bool mouseEvent(Mouse *_mouse)
Definition: Menu_Civs.hpp:132
Menu_CivDetails menuCivDetails
Definition: Menu_Civs.hpp:40
ColourRGB< unsigned char > cHighlight
Definition: Menu_Civs.hpp:24
Menu_Civs()
Definition: Menu_Civs.hpp:42