Peoplemon  0.1.0
Peoplemon 3 game source documentation
BagMenu.cpp
Go to the documentation of this file.
2 
3 #include <BLIB/Interfaces/Utilities.hpp>
4 #include <Core/Events/Maps.hpp>
5 #include <Core/Items/Item.hpp>
6 #include <Core/Properties.hpp>
7 #include <Core/Resources.hpp>
8 
9 namespace game
10 {
11 namespace state
12 {
13 namespace
14 {
15 using ExitCb = std::function<void()>;
16 using ItemCb = std::function<void(menu::BagItemButton*)>;
17 
18 constexpr float SlideTime = 0.5f;
19 int lastTab = -1;
20 int lastPosPerTab[4] = {0, 0, 0, 0};
21 const core::item::Category tabCategories[4] = {core::item::Category::Regular,
25 const char* tabTitles[4] = {"Regular Items", "Peopleballs", "TM's", "Key Items"};
26 constexpr float MenuX = 365.f;
27 constexpr float MenuY = 30.f;
28 constexpr float MenuWidth = 319.f;
29 constexpr float MenuHeight = 385.f;
30 
31 void populateMenu(bl::menu::Menu& menu, const std::vector<core::player::Bag::Item>& items,
32  const ExitCb& ecb, const ItemCb& icb, const ItemCb& dcb, int ti) {
34  exit->getSignal(bl::menu::Item::Activated).willAlwaysCall(ecb);
35  exit->getSignal(bl::menu::Item::Selected).willAlwaysCall(std::bind(dcb, exit.get()));
36  menu.setRootItem(exit);
37  menu.setMoveFailSound(bl::audio::AudioSystem::InvalidHandle);
38 
39  menu::BagItemButton* b = exit.get();
40  menu::BagItemButton* selectMe = exit.get();
41  int i = items.size() - 1;
42  for (auto rit = items.rbegin(); rit != items.rend(); ++rit) {
44  nb->getSignal(bl::menu::Item::Activated).willAlwaysCall(std::bind(icb, nb.get()));
45  menu.addItem(nb, b, bl::menu::Item::Top);
46  auto* nbp = nb.get();
47  nb->getSignal(bl::menu::Item::Selected).willAlwaysCall([nbp, i, ti, dcb]() {
48  lastPosPerTab[ti] = i;
49  dcb(nbp);
50  });
51 
52  b = nb.get();
53  if (lastPosPerTab[ti] == i) { selectMe = nb.get(); }
54  --i;
55  }
56  if (b != exit.get()) { menu.attachExisting(exit.get(), b, bl::menu::Item::Top); }
57  menu.setSelectedItem(selectMe);
58 }
59 
60 bool needPickPeoplemon(core::item::Id item, core::item::Type type) {
61  switch (type) {
64  return true;
66  return item != core::item::Id::Pp6Pack && item != core::item::Id::SuperPp6Pack;
67  default:
68  return false;
69  }
70 }
71 } // namespace
72 
74  int outNow, int* chosenPpl, bool* up) {
75  return bl::engine::State::Ptr(new BagMenu(s, c, i, outNow, chosenPpl, up));
76 }
77 
78 BagMenu::BagMenu(core::system::Systems& s, Context c, core::item::Id* i, int outNow, int* chosenPpl,
79  bool* up)
80 : State(s, bl::engine::StateMask::Menu)
81 , context(c)
82 , outNow(outNow)
83 , result(i)
84 , itemPeoplemon(chosenPpl ? chosenPpl : &selectedPeoplemon)
85 , unpause(up)
86 , state(MenuState::Browsing)
87 , activeMenu(&regularMenu)
88 , actionOpen(false) {
89  actionMenu.create(s.engine(),
90  s.engine().renderer().getObserver(),
91  bl::menu::ArrowSelector::create(10.f, sf::Color::Black));
92  actionMenu.setDepth(bl::cam::OverlayCamera::MinDepth);
93  regularMenu.create(
94  s.engine(), s.engine().renderer().getObserver(), bl::menu::NoSelector::create());
95  ballMenu.create(
96  s.engine(), s.engine().renderer().getObserver(), bl::menu::NoSelector::create());
97  keyMenu.create(s.engine(), s.engine().renderer().getObserver(), bl::menu::NoSelector::create());
98  tmMenu.create(s.engine(), s.engine().renderer().getObserver(), bl::menu::NoSelector::create());
99 
100  bgndTxtr = s.engine().renderer().texturePool().getOrLoadTexture(
101  bl::util::FileUtil::joinPath(core::Properties::MenuImagePath(), "Bag/background.png"));
102  background.create(s.engine(), bgndTxtr);
103 
104  if (context == Context::PauseMenu) {
105  bl::menu::Item::Ptr use =
106  bl::menu::TextItem::create("Use", core::Properties::MenuFont(), sf::Color::Black, 26);
107  bl::menu::Item::Ptr give =
108  bl::menu::TextItem::create("Give", core::Properties::MenuFont(), sf::Color::Black, 26);
109  bl::menu::Item::Ptr drop =
110  bl::menu::TextItem::create("Drop", core::Properties::MenuFont(), sf::Color::Black, 26);
111  bl::menu::Item::Ptr back =
112  bl::menu::TextItem::create("Back", core::Properties::MenuFont(), sf::Color::Black, 26);
113 
114  use->getSignal(bl::menu::Item::Activated)
115  .willAlwaysCall(std::bind(&BagMenu::useItem, this));
116  give->getSignal(bl::menu::Item::Activated)
117  .willAlwaysCall(std::bind(&BagMenu::giveItem, this));
118  drop->getSignal(bl::menu::Item::Activated)
119  .willAlwaysCall(std::bind(&BagMenu::dropItem, this));
120  back->getSignal(bl::menu::Item::Activated)
121  .willAlwaysCall(std::bind(&BagMenu::resetAction, this));
122 
123  actionMenu.setRootItem(use);
124  actionMenu.addItem(drop, use.get(), bl::menu::Item::Bottom);
125  actionMenu.addItem(back, drop.get(), bl::menu::Item::Right);
126  actionMenu.addItem(give, back.get(), bl::menu::Item::Top);
127  actionMenu.attachExisting(give.get(), use.get(), bl::menu::Item::Right);
128  }
129  else {
130  bl::menu::Item::Ptr use =
131  bl::menu::TextItem::create("Use", core::Properties::MenuFont(), sf::Color::Black, 26);
132  bl::menu::Item::Ptr back =
133  bl::menu::TextItem::create("Back", core::Properties::MenuFont(), sf::Color::Black, 26);
134 
135  use->getSignal(bl::menu::Item::Activated)
136  .willAlwaysCall(std::bind(&BagMenu::useItem, this));
137  back->getSignal(bl::menu::Item::Activated)
138  .willAlwaysCall(std::bind(&BagMenu::resetAction, this));
139 
140  actionMenu.setRootItem(use);
141  actionMenu.addItem(back, use.get(), bl::menu::Item::Bottom);
142  }
143  actionMenu.setPadding({16.f, 4.f});
144  actionMenu.configureBackground(sf::Color::White, sf::Color::Black, 3.f, {14.f, 2.f, 2.f, 2.f});
145  actionMenu.setPosition({252.f, 82.f});
146 
147  pocketLabel.create(s.engine(), core::Properties::MenuFont(), "", 27, sf::Color(0, 20, 75));
148  pocketLabel.getTransform().setPosition(72.f, 342.f);
149  pocketLabel.setParent(background);
150 
151  description.create(s.engine(), core::Properties::MenuFont(), "", 20, sf::Color::Black);
152  description.getTransform().setPosition(98.f, 473.f);
153  description.wordWrap(607.f);
154  description.setParent(background);
155 
156  menuTabs[0] = &regularMenu;
157  menuTabs[1] = &ballMenu;
158  menuTabs[2] = &tmMenu;
159  menuTabs[3] = &keyMenu;
160 
161  for (int i = 0; i < 4; ++i) {
162  menuTabs[i]->configureBackground(
163  sf::Color::Transparent, sf::Color::Transparent, 0.f, {0.f, 0.f, 0.f, 0.f});
164  menuTabs[i]->setPosition({MenuX, MenuY});
165  menuTabs[i]->setMaximumSize({-1.f, MenuHeight});
166  menuTabs[i]->setScissor(sf::IntRect(MenuX, MenuY, MenuWidth, MenuHeight));
167  }
168 }
169 
170 const char* BagMenu::name() const { return "BagMenu"; }
171 
172 void BagMenu::activate(bl::engine::Engine& engine) {
173  bl::menu::Menu* toDrive = nullptr;
174 
175  if (state == MenuState::ChoosingGive) {
176  if (*itemPeoplemon >= 0) {
177  resetAction();
178  systems.player().state().peoplemon[*itemPeoplemon].holdItem() =
179  selectedItem->getItem().id;
180  removeAndUpdateItem(1);
181  toDrive = activeMenu;
182  }
183  else { toDrive = &actionMenu; }
184  state = MenuState::Browsing;
185  }
186  else if (state == MenuState::ChoosingItemPeoplemon) {
187  if (*itemPeoplemon >= 0) {
188  if (context == Context::BattleUse) {
189  // battle applies and removes the item
190  if (result) *result = selectedItem->getItem().id;
191  state = MenuState::ImmediatelyPop;
192  }
193  else {
194  resetAction();
195  removeAndUpdateItem(0); // item is removed in other menu
196  state = MenuState::Browsing;
197  }
198  toDrive = activeMenu;
199  }
200  else {
201  toDrive = &actionMenu;
202  state = MenuState::Browsing;
203  }
204  }
205  else { // first time activation
206  if (result) *result = core::item::Id::None;
207 
208  std::vector<core::player::Bag::Item> items;
209  for (int i = 0; i < 4; ++i) {
210  systems.player().state().bag.getByCategory(tabCategories[i], items);
211  populateMenu(*menuTabs[i],
212  items,
213  std::bind(&BagMenu::exitSelected, this),
214  std::bind(&BagMenu::itemSelected, this, std::placeholders::_1),
215  std::bind(&BagMenu::itemHighlighted, this, std::placeholders::_1),
216  i);
217  }
218 
219  state = MenuState::Browsing;
220  actionOpen = false;
221  activeMenu = lastTab >= 0 ? menuTabs[lastTab] : &regularMenu;
222  toDrive = activeMenu;
223  pocketLabel.getSection().setString(tabTitles[lastTab >= 0 ? lastTab : 0]);
224  if (lastTab < 0) lastTab = 0;
225  }
226 
227  auto overlay = engine.renderer().getObserver().pushScene<bl::rc::Overlay>();
228  background.addToScene(overlay, bl::rc::UpdateSpeed::Static);
229  pocketLabel.addToScene(overlay, bl::rc::UpdateSpeed::Static);
230  description.addToScene(overlay, bl::rc::UpdateSpeed::Static);
231  actionMenu.addToOverlay(background.entity());
232  actionMenu.setHidden(true);
233  for (unsigned int i = 0; i < std::size(menuTabs); ++i) {
234  menuTabs[i]->addToOverlay(background.entity());
235  menuTabs[i]->setHidden(menuTabs[i] != activeMenu);
236  }
237 
238  engine.inputSystem().getActor().addListener(*this);
239  inputDriver.drive(toDrive);
240 }
241 
242 void BagMenu::deactivate(bl::engine::Engine& engine) {
243  engine.renderer().getObserver().popScene();
244  engine.inputSystem().getActor().removeListener(*this);
245 }
246 
247 void BagMenu::update(bl::engine::Engine& engine, float dt, float) {
248  switch (state) {
249  case MenuState::Sliding: {
250  slideOff += slideVel * dt;
251 
252  const float m = slideVel > 0.f ? -1.f : 1.f;
253  const float x = MenuX + slideOff;
254  const float wf = MenuWidth * m + x;
255  activeMenu->setPosition({wf, MenuY});
256  slideOut->setPosition({x, MenuY});
257 
258  if (std::abs(slideOff) >= activeMenu->getBounds().width) {
259  state = MenuState::Browsing;
260  activeMenu->setPosition({MenuX, MenuY});
261  inputDriver.drive(activeMenu);
262  slideOut->setHidden(true);
263  }
264  } break;
265 
266  case MenuState::ImmediatelyPop:
267  engine.popState();
268  break;
269 
270  case MenuState::ShowingMessage:
271  case MenuState::Browsing:
272  default:
273  break;
274  }
275 }
276 
277 bool BagMenu::observe(const bl::input::Actor&, unsigned int ctrl, bl::input::DispatchType,
278  bool fromEvent) {
279  inputDriver.sendControl(ctrl, fromEvent);
280 
281  if (state == MenuState::Browsing && fromEvent) {
282  if (actionOpen) {
283  if (ctrl == core::input::Control::Back) {
284  bl::audio::AudioSystem::playOrRestartSound(core::Properties::MenuBackSound());
285  resetAction();
286  }
287  }
288  else {
289  switch (ctrl) {
291  systems.engine().popState();
292  break;
293 
295  beginSlide(true);
296  lastTab = lastTab > 0 ? lastTab - 1 : 3;
297  activeMenu = menuTabs[lastTab];
298  activeMenu->setHidden(false);
299  pocketLabel.getSection().setString(tabTitles[lastTab]);
300  itemHighlighted(
301  dynamic_cast<const menu::BagItemButton*>(activeMenu->getSelectedItem()));
302  break;
303 
305  beginSlide(false);
306  lastTab = lastTab < 3 ? lastTab + 1 : 0;
307  activeMenu = menuTabs[lastTab];
308  activeMenu->setHidden(false);
309  pocketLabel.getSection().setString(tabTitles[lastTab]);
310  itemHighlighted(
311  dynamic_cast<const menu::BagItemButton*>(activeMenu->getSelectedItem()));
312  break;
313 
314  default:
315  break;
316  }
317  }
318  }
319 
320  return true;
321 }
322 
323 void BagMenu::itemSelected(const menu::BagItemButton* but) {
324  selectedItem = const_cast<menu::BagItemButton*>(but);
325  actionOpen = true;
326  actionMenu.setHidden(false);
327  inputDriver.drive(&actionMenu);
328 }
329 
330 void BagMenu::exitSelected() { systems.engine().popState(); }
331 
332 void BagMenu::useItem() {
333  if (context == Context::BattleUse) {
334  if (!core::item::Item::canUseInBattle(selectedItem->getItem().id)) {
335  state = MenuState::ShowingMessage;
336  systems.hud().displayMessage("This item cannot be used in battle!",
337  std::bind(&BagMenu::messageDone, this));
338  return;
339  }
340  }
341 
342  const core::item::Type type = core::item::Item::getType(selectedItem->getItem().id);
343  if (needPickPeoplemon(selectedItem->getItem().id, type)) {
344  state = MenuState::ChoosingItemPeoplemon;
346  context == Context::BattleUse ?
349  outNow,
350  itemPeoplemon,
351  selectedItem->getItem().id));
352  }
353  else {
354  if (context == Context::BattleUse) {
355  if (result) *result = selectedItem->getItem().id;
356  state = MenuState::ImmediatelyPop;
357  }
358  else {
359  switch (type) {
361  state = MenuState::ShowingMessage;
362  switch (selectedItem->getItem().id) {
366  "Use your Penny to use the Transportation Crystal?",
367  {"Yes", "No"},
368  std::bind(&BagMenu::keyItemConfirmUse, this, std::placeholders::_1));
369  }
370  else {
371  systems.hud().displayMessage("You need a Penny to use this!",
372  std::bind(&BagMenu::messageDone, this));
373  }
374  break;
378  if (unpause != nullptr) { *unpause = true; }
379  state = MenuState::ImmediatelyPop;
380  }
381  else {
383  "It's not very dark here. Better save the batteries for later.",
384  std::bind(&BagMenu::messageDone, this));
385  }
386  break;
389  "This will make all trainers hostile again! Are you sure you want to do "
390  "this? This cannot be undone except through violence.",
391  {"Yes", "No"},
392  std::bind(&BagMenu::keyItemConfirmUse, this, std::placeholders::_1));
393  break;
396  "Blow yourself up and respawn at the last PC Center you visited?",
397  {"Yes", "No"},
398  std::bind(&BagMenu::keyItemConfirmUse, this, std::placeholders::_1));
399  break;
400  default:
402  "The Professor's voice rings in your head: \"Not now I'm working!\"");
403  systems.hud().displayMessage("... Or something like that.",
404  std::bind(&BagMenu::messageDone, this));
405  break;
406  }
407  break;
409  if (core::item::Item::hasEffectOnPlayer(selectedItem->getItem().id,
410  systems.player().state())) {
411  core::item::Item::useOnPlayer(selectedItem->getItem().id,
412  systems.player().state());
413  systems.player().state().bag.removeItem(selectedItem->getItem().id);
415  core::item::Item::getUseLine(selectedItem->getItem().id),
416  std::bind(&BagMenu::messageDone, this));
417  }
418  else {
419  systems.hud().displayMessage("It won't have any effect",
420  std::bind(&BagMenu::messageDone, this));
421  }
422  state = MenuState::ShowingMessage;
423  break;
425  systems.hud().displayMessage("The Professor's voice echoes in your head: \"That "
426  "thing is completely useless! "
427  "What are you expecting to happen bro?\"",
428  std::bind(&BagMenu::messageDone, this));
429  state = MenuState::ShowingMessage;
430  break;
431  default:
433  "The Professor's voice echoes in your head: \"You can't use that here bro\"",
434  std::bind(&BagMenu::messageDone, this));
435  state = MenuState::ShowingMessage;
436  break;
437  }
438  }
439  }
440 }
441 
442 void BagMenu::giveItem() {
443  state = MenuState::ChoosingGive;
444  systems.engine().pushState(
446 }
447 
448 void BagMenu::dropItem() {
449  state = MenuState::ShowingMessage;
450  systems.hud().getQty("How many " + core::item::Item::getName(selectedItem->getItem().id) +
451  "s should be dropped?",
452  0,
453  selectedItem->getItem().qty,
454  std::bind(&BagMenu::doDrop, this, std::placeholders::_1));
455 }
456 
457 void BagMenu::doDrop(int qty) {
458  removeAndUpdateItem(qty);
459  resetAction();
460 }
461 
462 void BagMenu::resetAction() {
463  actionOpen = false;
464  inputDriver.drive(activeMenu);
465  actionMenu.setHidden(true);
466 }
467 
468 void BagMenu::itemHighlighted(const menu::BagItemButton* but) {
469  const auto i = but->getItem().id;
470  if (i != core::item::Id::None) {
471  const std::string& d = core::item::Item::getDescription(i);
472  description.getSection().setString(d);
473  }
474  else { description.getSection().setString("Close the bag"); }
475 }
476 
477 void BagMenu::beginSlide(bool l) {
478  slideOut = activeMenu;
479  slideOff = 0.f;
480  slideVel = activeMenu->getBounds().width / SlideTime;
481  if (l) slideVel = -slideVel;
482  inputDriver.drive(nullptr);
483  state = MenuState::Sliding;
484 }
485 
486 void BagMenu::messageDone() {
487  state = MenuState::Browsing;
488  resetAction();
489 }
490 
491 void BagMenu::removeAndUpdateItem(int qty) {
492  core::player::Bag::Item it = selectedItem->getItem();
493  systems.player().state().bag.removeItem(it.id, qty);
494  it.qty = systems.player().state().bag.itemCount(it.id);
495  if (it.qty <= 0) { activeMenu->removeItem(selectedItem); }
496  else { selectedItem->update(it); }
497 }
498 
499 void BagMenu::keyItemConfirmUse(const std::string& c) {
500  messageDone();
501  if (c == "Yes") {
502  switch (selectedItem->getItem().id) {
504  systems.player().whiteout();
505  if (unpause != nullptr) { *unpause = true; }
506  state = MenuState::ImmediatelyPop;
507  break;
510  systems.hud().displayMessage("All trainer Peoplemon have been healed! Watch your back.",
511  std::bind(&BagMenu::messageDone, this));
512  state = MenuState::ShowingMessage;
513  break;
516  bl::event::Dispatcher::dispatch<core::event::SwitchMapTriggered>(
517  {"TheVoid.map", 1});
518  if (unpause != nullptr) { *unpause = true; }
519  state = MenuState::ImmediatelyPop;
520  }
521  else {
522  systems.hud().displayMessage("What happened to your Penny?",
523  std::bind(&BagMenu::messageDone, this));
524  state = MenuState::ShowingMessage;
525  }
526  break;
527  default:
528  break;
529  }
530  }
531 }
532 
533 } // namespace state
534 } // namespace game
Type
The type classification of an item. This is used to determine when an item may be used and how to use...
Definition: Type.hpp:17
Category
Represents a category that an item can belong to. Used for bag sorting.
Definition: Category.hpp:16
Id
Represents an item in its simplist form.
Definition: Id.hpp:24
@ EvolveStone
The item is used to evolve peoplemon.
@ Useless
Items who's only use is to be sold.
@ KeyItem
The item is a key item.
@ TargetPeoplemon
The item is used on a peoplemon.
@ TM
The item is a TM.
@ PlayerModifier
The item modifiers player state (ie repel)
@ Peopleball
Peopleballs.
@ Key
Key items. Covers ids [101, 200].
@ TM
TM's. Covers ids [201, 499].
@ Regular
Regular items. Covers ids [1, 100].
Parent namespace for all functionality unique to the game.
Context
Represents how the menu should be opened.
Definition: BagMenu.hpp:18
static std::string getUseLine(Id item, const pplmn::OwnedPeoplemon &ppl)
Returns the text to display when the item is used on the given peoplemon.
Definition: Item.cpp:327
static const std::string & getDescription(item::Id item)
Returns the description of the given item.
Definition: Item.cpp:105
static void useOnPlayer(Id item, player::State &state)
Uses the given item on the player.
Definition: Item.cpp:391
static const std::string & getName(item::Id item)
Returns the name of the given item.
Definition: Item.cpp:91
static bool canUseInBattle(Id item)
Returns whether or not the item can be used in battle.
Definition: Item.cpp:133
static Type getType(Id item)
Returns the type of the given item.
Definition: Item.cpp:76
static bool hasEffectOnPlayer(Id item, const player::State &state)
Returns whether or not the given item will affect the player.
Definition: Item.cpp:380
bool lightsAreOn() const
Returns whether lights are being shown or not based on how dark it is.
LightingSystem & lightingSystem()
Returns a reference to the lighting system in this map.
Definition: Map.cpp:184
void getByCategory(item::Category category, std::vector< Item > &result) const
Returns the set of owned items in the given category.
Definition: Bag.cpp:17
bool removeItem(item::Id item, unsigned int qty=1)
Removes the given item from the bag.
Definition: Bag.cpp:52
unsigned int itemCount(item::Id item) const
Returns the number of the given item owned.
Definition: Bag.cpp:37
bool hasItem(item::Id item) const
Returns true if at least one of the given items is owned.
Definition: Bag.cpp:42
Simple struct representing a set of items in the bag.
Definition: Bag.hpp:24
item::Id id
The item in the bag.
Definition: Bag.hpp:26
unsigned int qty
How many of the item are in the bag.
Definition: Bag.hpp:29
std::vector< pplmn::OwnedPeoplemon > peoplemon
Definition: State.hpp:46
player::Bag bag
Definition: State.hpp:44
static const sf::VulkanFont & MenuFont()
Definition: Properties.cpp:363
static bl::audio::AudioSystem::Handle MenuBackSound()
Definition: Properties.cpp:712
static const std::string & MenuImagePath()
Definition: Properties.cpp:303
void displayMessage(const std::string &message, const Callback &cb=[](const std::string &) {})
Displays a message in the HUD textbox. Messages are queued in order that they arrive.
Definition: HUD.cpp:92
void getQty(const std::string &prompt, int minQty, int maxQty, const QtyCallback &cb)
Gets a number from the player.
Definition: HUD.cpp:124
void promptUser(const std::string &prompt, const std::vector< std::string > &choices, const Callback &cb)
Asks the player a question through the HUD.
Definition: HUD.cpp:112
void showLantern()
Creates a light for the player's lantern. Keeps it updated as well.
Definition: Player.cpp:106
player::State & state()
Returns the state of the player.
Definition: Player.cpp:154
void whiteout()
Heals all Peoplemon and respawns at the last PC center.
Definition: Player.cpp:97
Owns all primary systems and a reference to the engine.
Definition: Systems.hpp:47
const bl::engine::Engine & engine() const
Const accessor for the Engine.
Definition: Systems.cpp:35
Player & player()
Returns the player system.
Definition: Systems.cpp:59
Trainers & trainers()
Returns the trainer system.
Definition: Systems.cpp:75
HUD & hud()
Returns the HUD.
Definition: Systems.cpp:69
World & world()
Modifiable accessor for the world system.
Definition: Systems.cpp:43
void resetDefeated()
Resets the list of defeated trainers.
Definition: Trainers.cpp:200
map::Map & activeMap()
Returns a reference to the active map.
Definition: World.cpp:84
void update(const core::player::Bag::Item &item)
Updates the text labels from the given item.
const core::player::Bag::Item & getItem() const
Returns the item this button is representing.
std::shared_ptr< BagItemButton > Ptr
Pointer to the menu item.
static Ptr create(const core::player::Bag::Item &item)
Creates a new item button.
State for displaying the player's inventory and selecting items.
Definition: BagMenu.hpp:24
static bl::engine::State::Ptr create(core::system::Systems &systems, Context ctx, core::item::Id *result=nullptr, int outNow=-1, int *chosenPeoplemon=nullptr, bool *unpause=nullptr)
Creates a new BagMenu.
Definition: BagMenu.cpp:73
virtual void activate(bl::engine::Engine &) override
Populates the menu with the player's inventory.
Definition: BagMenu.cpp:172
virtual const char * name() const override
Returns "BagMenu".
Definition: BagMenu.cpp:170
virtual void update(bl::engine::Engine &, float dt, float) override
Updates the menu.
Definition: BagMenu.cpp:247
virtual void deactivate(bl::engine::Engine &) override
Unsubscribes from event and input buses.
Definition: BagMenu.cpp:242
static bl::engine::State::Ptr create(core::system::Systems &systems, Context ctx, int outNow=-1, int *chosen=nullptr, core::item::Id item=core::item::Id::None)
Creates a new PeoplemonMenu state.
Parent to all game states. Provides some commonly required data like core game systems.
Definition: State.hpp:29
core::system::Systems & systems
Definition: State.hpp:66